Sumber daya yang dimuat... Pemuatan...

Sistem Strategi Rata-rata Biaya Dinamis Berdasarkan Bollinger Bands dan RSI

Penulis:ChaoZhang, Tanggal: 2024-11-27 16:37:12
Tag:BBRSIDCASMATP

img

Gambaran umum

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan Bollinger Bands, Relative Strength Index (RSI), dan Dynamic Cost Averaging (DCA). Strategi ini menerapkan pembentukan posisi otomatis melalui aturan manajemen uang yang ditetapkan selama fluktuasi pasar, sambil mengintegrasikan indikator teknis untuk penentuan sinyal beli / jual untuk mencapai eksekusi risiko yang terkendali. Sistem ini juga mencakup logika mengambil keuntungan dan fungsi pelacakan keuntungan kumulatif untuk pemantauan dan manajemen kinerja perdagangan yang efektif.

Prinsip Strategi

Strategi ini beroperasi berdasarkan komponen inti berikut:

  1. Bollinger Bands untuk menentukan rentang volatilitas harga, mempertimbangkan membeli di band bawah dan menjual di band atas
  2. RSI untuk mengkonfirmasi kondisi overbought/oversold, mengkonfirmasi oversold di bawah 25 dan overbought di atas 75
  3. Modul DCA secara dinamis menghitung ukuran posisi berdasarkan ekuitas akun untuk manajemen modal adaptif
  4. Modul mengambil keuntungan menetapkan target keuntungan 5% untuk penutupan posisi otomatis
  5. Pemantauan kondisi pasar menghitung perubahan pasar 90 hari untuk menilai tren keseluruhan
  6. Pelacakan keuntungan kumulatif mencatat keuntungan/kerugian setiap perdagangan untuk evaluasi kinerja strategi

Keuntungan Strategi

  1. Validasi silang beberapa indikator teknis meningkatkan keandalan sinyal
  2. Manajemen posisi dinamis menghindari risiko posisi tetap
  3. Kondisi mengambil keuntungan yang wajar memastikan keuntungan yang tepat waktu
  4. Kemampuan pemantauan tren pasar membantu dalam memahami gambaran besar
  5. Sistem pelacakan keuntungan yang komprehensif memfasilitasi analisis strategi
  6. Sistem peringatan yang dikonfigurasi dengan baik menyediakan peluang perdagangan real-time

Risiko Strategi

  1. Pasar yang bergolak dapat memicu sinyal yang sering meningkatkan biaya perdagangan
  2. Indikator RSI mungkin tertinggal di pasar tren
  3. Persentase tetap mengambil keuntungan mungkin keluar terlalu awal dalam tren yang kuat
  4. Strategi DCA dapat menyebabkan penarikan yang signifikan dalam tren penurunan yang berkepanjangan Rekomendasi manajemen risiko:
  • Atur batas posisi maksimum
  • Mengatur parameter secara dinamis berdasarkan volatilitas pasar
  • Tambahkan filter tren
  • Menerapkan strategi mengambil keuntungan bertingkat

Arah Optimasi Strategi

  1. Optimasi Parameter Dinamis:
  • Parameter Bollinger Bands menyesuaikan dengan volatilitas
  • Batas RSI bervariasi dengan siklus pasar
  • Alokasi DCA disesuaikan dengan ukuran rekening
  1. Peningkatan sistem sinyal:
  • Tambahkan konfirmasi volume
  • Sertakan analisis garis tren
  • Mengintegrasikan penyangkalan silang indikator teknis tambahan
  1. Peningkatan Kontrol Risiko:
  • Mengimplementasikan stop-loss dinamis
  • Tambahkan kontrol penarikan maksimum
  • Tetapkan batas kerugian harian

Ringkasan

Strategi ini membangun sistem perdagangan yang komprehensif melalui analisis teknis dan metode manajemen uang yang dikombinasikan. Kekuatannya terletak pada konfirmasi sinyal ganda dan manajemen risiko yang menyeluruh, meskipun masih membutuhkan pengujian dan pengoptimalan yang luas dalam perdagangan langsung. Melalui peningkatan terus-menerus dalam pengaturan parameter dan indikator tambahan, strategi ini menunjukkan janji untuk kinerja yang stabil dalam perdagangan aktual.


/*backtest
start: 2023-11-27 00:00:00
end: 2024-11-26 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined BB RSI with Cumulative Profit, Market Change, and Futures Strategy (DCA)", shorttitle="BB RSI Combined DCA Strategy", overlay=true)

// Input Parameters
length = input.int(20, title="BB Length")  // Adjusted BB length
mult = input.float(2.5, title="BB Multiplier")  // Adjusted BB multiplier
rsiLength = input.int(14, title="RSI Length")  // Adjusted RSI length
rsiBuyLevel = input.int(25, title="RSI Buy Level")  // Adjusted RSI Buy Level
rsiSellLevel = input.int(75, title="RSI Sell Level")  // Adjusted RSI Sell Level
dcaPositionSizePercent = input.float(1, title="DCA Position Size (%)", tooltip="Percentage of equity to use in each DCA step")
takeProfitPercentage = input.float(5, title="Take Profit (%)", tooltip="Take profit percentage for DCA strategy")

// Calculate DCA position size
equity = strategy.equity  // Account equity
dcaPositionSize = (equity * dcaPositionSizePercent) / 100  // DCA position size as percentage of equity

// Bollinger Bands Calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// RSI Calculation
rsi = ta.rsi(close, rsiLength)

// Plotting Bollinger Bands and RSI levels
plot(upper, color=color.red, title="Bollinger Upper")
plot(lower, color=color.green, title="Bollinger Lower")
hline(rsiBuyLevel, "RSI Buy Level", color=color.green)
hline(rsiSellLevel, "RSI Sell Level", color=color.red)

// Buy and Sell Signals
buySignal = (rsi < rsiBuyLevel and close <= lower)
sellSignal = (rsi > rsiSellLevel and close >= upper)

// DCA Strategy: Enter Long or Short based on signals with calculated position size
if (buySignal)
    strategy.entry("DCA Buy", strategy.long)

if (sellSignal)
    strategy.entry("DCA Sell", strategy.short)

// Take Profit Logic
if (strategy.position_size > 0)  // If long
    strategy.exit("Take Profit Long", from_entry="DCA Buy", limit=close * (1 + takeProfitPercentage / 100))

if (strategy.position_size < 0)  // If short
    strategy.exit("Take Profit Short", from_entry="DCA Sell", limit=close * (1 - takeProfitPercentage / 100))

// Plot Buy/Sell Signals on the chart
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white)

// Alerts for Buy/Sell Signals
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected")

// Cumulative Profit Calculation
var float buyPrice = na
var float profit = na
var float cumulativeProfit = 0.0  // Cumulative profit tracker

if (buySignal)
    buyPrice := close
if (sellSignal and not na(buyPrice))
    profit := (close - buyPrice) / buyPrice * 100
    cumulativeProfit := cumulativeProfit + profit  // Update cumulative profit
    label.new(bar_index, high, text="P: " + str.tostring(profit, "#.##") + "%", color=color.blue, style=label.style_label_down)
    buyPrice := na  // Reset buyPrice after sell

// Plot cumulative profit on the chart
var label cumulativeLabel = na
if (not na(cumulativeProfit))
    if not na(cumulativeLabel)
        label.delete(cumulativeLabel)
    cumulativeLabel := label.new(bar_index, high + 10, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "%", color=color.purple, style=label.style_label_up)

// Market Change over 3 months Calculation
threeMonthsBars = 3 * 30 * 24  // Approximation of 3 months in bars (assuming 1 hour per bar)
priceThreeMonthsAgo = request.security(syminfo.tickerid, "D", close[threeMonthsBars])
marketChange = (close - priceThreeMonthsAgo) / priceThreeMonthsAgo * 100

// Plot market change over 3 months
var label marketChangeLabel = na
if (not na(marketChange))
    if not na(marketChangeLabel)
        label.delete(marketChangeLabel)
    marketChangeLabel := label.new(bar_index, high + 20, text="Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.orange, style=label.style_label_up)

// Both labels (cumulative profit and market change) are displayed simultaneously
var label infoLabel = na
if (not na(cumulativeProfit) and not na(marketChange))
    if not na(infoLabel)
        label.delete(infoLabel)
    infoLabel := label.new(bar_index, high + 30, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "% | Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.purple, style=label.style_label_upper_right)


Berkaitan

Lebih banyak