Sistem strategi purata kos dinamik berdasarkan Bollinger Bands dan RSI

BB RSI DCA SMA TP
Tarikh penciptaan: 2024-11-27 16:37:12 Akhirnya diubah suai: 2024-11-27 16:37:12
Salin: 0 Bilangan klik: 466
1
fokus pada
1617
Pengikut

Sistem strategi purata kos dinamik berdasarkan Bollinger Bands dan RSI

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif yang menggabungkan Bollinger Bands, indikator RSI yang agak kuat, dan purata kos dinamik. Strategi ini menggunakan peraturan pengurusan dana untuk melaksanakan operasi pembentukan gudang secara automatik dalam pergerakan pasaran, sambil menggabungkan petunjuk teknikal untuk membuat keputusan tentang isyarat jual beli, untuk melaksanakan perdagangan yang dapat dikawal risiko. Sistem ini juga mengandungi logik hentian dan fungsi penjejakan keuntungan kumulatif, yang dapat memantau dan menguruskan prestasi perdagangan dengan berkesan.

Prinsip Strategi

Strategi ini terutamanya berdasarkan komponen teras berikut:

  1. Indeks Brin-Band digunakan untuk menilai pergerakan harga, mempertimbangkan untuk membeli apabila harga menyentuh rel bawah dan menjual apabila ia menyentuh rel atas
  2. RSI digunakan untuk mengesahkan keadaan pasaran overbought dan oversold, RSI di bawah 25 mengesahkan oversold, di atas 75 mengesahkan oversold
  3. Modul DCA menganggarkan jumlah setiap penempatan berdasarkan dinamika hak dan kepentingan akaun, mewujudkan pengurusan dana yang sesuai
  4. Modul Stop-loss menetapkan sasaran keuntungan 5% untuk mencapai sasaran perlindungan keuntungan automatik
  5. Modul pemantauan keadaan pasaran mengira perubahan pasaran selama 90 hari untuk membantu menentukan trend keseluruhan
  6. Modul pengesanan keuntungan terkumpul mencatat keuntungan dan kerugian setiap perdagangan untuk menilai prestasi strategi

Kelebihan Strategik

  1. Meningkatkan kebolehpercayaan isyarat dengan menggunakan cross-validasi pelbagai petunjuk teknikal
  2. Menggunakan pengurusan kedudukan dinamik untuk mengelakkan risiko dari kedudukan tetap
  3. Menetapkan syarat-syarat penangguhan yang munasabah untuk mengunci keuntungan
  4. Fungsi Pemantauan Trend Pasaran Untuk Memahami Keadaan
  5. Sistem pemantauan keuntungan yang baik untuk menganalisis prestasi strategi
  6. Fungsi amaran yang sempurna untuk memberi amaran kepada peluang perdagangan dalam masa nyata

Risiko Strategik

  1. Pasaran yang bergolak mungkin sering mencetuskan isyarat yang menyebabkan kos dagangan meningkat
  2. Indeks RSI mungkin ketinggalan dalam pasaran trend
  3. Penangguhan peratusan tetap mungkin keluar terlalu awal dalam pasaran yang kuat
  4. Strategi DCA dalam pasaran yang jatuh secara sepihak mungkin menyebabkan pengunduran yang lebih besar Langkah-langkah berikut disyorkan untuk menguruskan risiko:
  • Tetapkan had pegangan maksimum
  • Parameter penyesuaian dinamik mengikut turun naik pasaran
  • Tambah penapis trend
  • Menerapkan strategi penangguhan bertingkat

Arah pengoptimuman strategi

  1. Pengoptimuman dinamik parameter:
  • Parameter Brin boleh disesuaikan mengikut kadar turun naik
  • RSI terhad boleh berubah mengikut kitaran pasaran
  • Peratusan dana DCA boleh disesuaikan dengan saiz akaun
  1. Sistem isyarat dipertingkat:
  • Tingkatkan pengesahan volum
  • Menambah analisis garisan trend
  • Menerusi lebih banyak penanda aras teknikal
  1. Pengendalian risiko:
  • Mencapai Hentikan Kerosakan Dinamik
  • Tambah kawalan penarikan maksimum
  • Tetapkan had kerugian harian

ringkaskan

Strategi ini membina sistem perdagangan yang lebih lengkap dengan menggunakan analisis teknikal dan kaedah pengurusan wang secara komprehensif. Keunggulan strategi adalah pengiktirafan pelbagai isyarat dan pengurusan risiko yang baik, tetapi masih memerlukan ujian dan pengoptimuman yang mencukupi di lapangan. Dengan terus memperbaiki parameter dan menambah indikator tambahan, strategi ini dijangka dapat mencapai prestasi yang stabil dalam perdagangan sebenar.

Kod 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)