Sistem strategi rata-rata biaya dinamis berdasarkan Bollinger Bands dan RSI

BB RSI DCA SMA TP
Tanggal Pembuatan: 2024-11-27 16:37:12 Akhirnya memodifikasi: 2024-11-27 16:37:12
menyalin: 0 Jumlah klik: 466
1
fokus pada
1617
Pengikut

Sistem strategi rata-rata biaya dinamis berdasarkan Bollinger Bands dan RSI

Ringkasan

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan Bollinger Bands, Relatively Strong Indicator (RSI) dan Dynamic Cost Average (DCA). Strategi ini menggunakan aturan manajemen dana untuk melakukan operasi posisi secara otomatis dalam fluktuasi pasar, sekaligus melakukan penilaian sinyal jual beli dalam kombinasi dengan indikator teknis, untuk melakukan transaksi yang dapat dikontrol risiko. Sistem ini juga menyertakan logika stop-loss dan fitur pelacakan keuntungan kumulatif, yang dapat secara efektif memantau dan mengelola kinerja perdagangan.

Prinsip Strategi

Strategi ini terutama didasarkan pada komponen inti berikut:

  1. Indikator Brin-Band digunakan untuk menentukan kisaran fluktuasi harga, mempertimbangkan untuk membeli ketika harga menyentuh rel bawah, mempertimbangkan untuk menjual ketika menyentuh rel atas
  2. Indikator RSI digunakan untuk mengkonfirmasi pasar overbought dan oversold, RSI di bawah 25 mengkonfirmasi oversold, di atas 75 mengkonfirmasi oversold
  3. Modul DCA mengkalkulasi jumlah setiap kali Anda membuat posisi berdasarkan dinamika hak dan kepentingan akun, untuk mengimplementasikan manajemen adaptif dana
  4. Modul Stop-loss menetapkan target keuntungan 5%, mencapai target keuntungan perlindungan posisi kosong otomatis
  5. Modul pemantauan kondisi pasar menghitung perubahan pasar selama 90 hari untuk membantu menentukan tren keseluruhan
  6. Modul pelacakan keuntungan akumulasi mencatat kerugian dan kerugian dari setiap transaksi untuk membantu menilai kinerja strategi

Keunggulan Strategis

  1. Meningkatkan reliabilitas sinyal dengan cross-validasi multi-indikator teknis
  2. Mengadopsi manajemen posisi dinamis untuk menghindari risiko dari posisi tetap
  3. Menetapkan kondisi stop loss yang wajar dan mengunci keuntungan tepat waktu
  4. Dengan fitur pemantauan tren pasar, Anda dapat mengamati situasi secara keseluruhan.
  5. Sistem pelacakan keuntungan yang baik untuk menganalisis kinerja strategi
  6. Fitur peringatan yang lengkap, mengingatkan peluang perdagangan secara real time

Risiko Strategis

  1. Pasar yang bergejolak dapat sering memicu sinyal yang menyebabkan peningkatan biaya transaksi.
  2. Indeks RSI mungkin tertinggal di pasar tren
  3. Stopper Persentase Tetap Mungkin Keluar Lebih Awal di Pasar Berkecenderungan
  4. Strategi DCA di pasar yang turun secara sepihak dapat menyebabkan penurunan yang lebih besar Langkah-langkah berikut direkomendasikan untuk mengelola risiko:
  • Tetapkan batas maksimum
  • Parameter yang disesuaikan dengan dinamika fluktuasi pasar
  • Tambahkan filter tren
  • Menerapkan strategi penghentian bertahap

Arah optimasi strategi

  1. Optimasi dinamis parameter:
  • Parameter pita Brin dapat disesuaikan dengan fluktuasi
  • RSI terendah dapat berubah seiring siklus pasar
  • Proporsi dana DCA dapat disesuaikan dengan ukuran akun
  1. Sistem sinyal diperkuat:
  • Konfirmasi peningkatan volume
  • Menambahkan analisis garis tren
  • Tergabung dengan lebih banyak indikator teknis cross-verifikasi
  1. Pengendalian risiko:
  • Membuat Stop Loss Dinamis
  • Tambahkan kontrol mundur maksimum
  • Tetapkan batas kerugian harian

Meringkaskan

Strategi ini membangun sistem perdagangan yang lebih lengkap dengan menggunakan analisis teknis dan metode manajemen dana secara komprehensif. Strategi ini memiliki keunggulan dalam pengakuan sinyal ganda dan manajemen risiko yang baik, tetapi masih perlu diuji dan dioptimalkan secara menyeluruh di pasar. Dengan terus meningkatkan pengaturan parameter dan menambahkan indikator tambahan, strategi ini diharapkan untuk mencapai kinerja yang stabil dalam perdagangan nyata.

Kode Sumber Strategi
/*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)