Sumber dimuat naik... memuat...

Sistem Strategi Purata Kos Dinamik Berdasarkan Bollinger Bands dan RSI

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

img

Ringkasan

Strategi ini adalah sistem dagangan kuantitatif yang menggabungkan Bollinger Bands, Indeks Kekuatan Relatif (RSI), dan Purata Kos Dinamik (DCA). Strategi ini melaksanakan pembinaan kedudukan automatik melalui peraturan pengurusan wang yang ditubuhkan semasa turun naik pasaran, sambil mengintegrasikan penunjuk teknikal untuk penentuan isyarat beli / jual untuk mencapai pelaksanaan risiko terkawal. Sistem ini juga merangkumi logik mengambil keuntungan dan fungsi penjejakan keuntungan kumulatif untuk pemantauan dan pengurusan prestasi dagangan yang berkesan.

Prinsip Strategi

Strategi ini beroperasi berdasarkan komponen teras berikut:

  1. Bollinger Bands untuk menentukan julat turun naik harga, mempertimbangkan membeli di band bawah dan menjual di band atas
  2. RSI untuk mengesahkan keadaan overbought/oversold, mengesahkan oversold di bawah 25 dan overbought di atas 75
  3. Modul DCA secara dinamik mengira saiz kedudukan berdasarkan ekuiti akaun untuk pengurusan modal adaptif
  4. Modul mengambil keuntungan menetapkan sasaran keuntungan 5% untuk penutupan kedudukan automatik
  5. Pemantauan keadaan pasaran mengira perubahan pasaran 90 hari untuk menilai trend keseluruhan
  6. Pengesanan keuntungan kumulatif mencatat keuntungan/kerugian setiap perdagangan untuk penilaian prestasi strategi

Kelebihan Strategi

  1. Penanda teknikal berbilang penanda silang meningkatkan kebolehpercayaan isyarat
  2. Pengurusan kedudukan dinamik mengelakkan risiko kedudukan tetap
  3. Syarat keuntungan yang munasabah memastikan keuntungan tepat pada masanya
  4. Keupayaan pemantauan trend pasaran membantu dalam pemahaman gambaran besar
  5. Sistem pengesanan keuntungan yang komprehensif memudahkan analisis strategi
  6. Sistem amaran yang dikonfigurasi dengan baik menyediakan peluang perdagangan masa nyata

Risiko Strategi

  1. Pasaran yang bergelombang boleh mencetuskan isyarat yang kerap meningkatkan kos dagangan
  2. Indikator RSI mungkin tertinggal di pasaran trend
  3. Keuntungan peratusan tetap mungkin keluar terlalu awal dalam trend yang kuat
  4. Strategi DCA boleh menyebabkan pengeluaran yang ketara dalam trend menurun yang berpanjangan Cadangan pengurusan risiko:
  • Tetapkan had kedudukan maksimum
  • Sesuaikan parameter secara dinamik berdasarkan turun naik pasaran
  • Tambah penapis trend
  • Melaksanakan strategi mengambil keuntungan bertahap

Arahan Pengoptimuman Strategi

  1. Parameter Optimum Dinamik:
  • Parameter Bollinger Bands menyesuaikan diri dengan turun naik
  • Sempadan RSI berbeza dengan kitaran pasaran
  • Peruntukan DCA disesuaikan dengan saiz akaun
  1. Peningkatan Sistem Isyarat:
  • Tambah pengesahan jumlah
  • Sertakan analisis trendline
  • Mengintegrasikan pengesahan silang penunjuk teknikal tambahan
  1. Peningkatan Kawalan Risiko:
  • Melaksanakan stop-loss dinamik
  • Tambah kawalan pengeluaran maksimum
  • Tetapkan had kerugian harian

Ringkasan

Strategi ini membina sistem perdagangan yang komprehensif melalui gabungan analisis teknikal dan kaedah pengurusan wang. Kekuatannya terletak pada pengesahan isyarat berbilang dan pengurusan risiko yang menyeluruh, walaupun ia masih memerlukan ujian dan pengoptimuman yang luas dalam perdagangan langsung. Melalui peningkatan berterusan dalam tetapan parameter dan penunjuk tambahan, strategi menunjukkan janji untuk prestasi yang stabil dalam perdagangan sebenar.


/*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 lanjut