
Strategi ini adalah sistem perdagangan kuantitatif bertingkat berdasarkan divergensi tren Bollinger Band dan perubahan bandwidth dinamis. Strategi ini membangun kerangka kerja pengambilan keputusan perdagangan yang lengkap dengan memantau perubahan dinamis dalam lebar Bollinger Band, terobosan harga, dan koordinasi rata-rata pergerakan EMA200. Strategi ini mengadopsi mekanisme pelacakan volatilitas adaptif, yang secara efektif dapat menangkap titik balik dalam tren pasar.
Inti dari strategi ini didasarkan pada elemen-elemen kunci berikut:
Strategi ini membangun sistem perdagangan yang kuat melalui divergensi tren Bollinger Band dan perubahan bandwidth yang dinamis. Strategi ini berkinerja baik di pasar yang sedang tren, tetapi masih perlu ditingkatkan di pasar yang volatil dan optimalisasi parameter. Secara keseluruhan, strategi ini memiliki nilai praktis yang baik dan ruang untuk diperluas.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("BBDIV_Strategy", overlay=true)
// Inputs for Bollinger Bands
length = input.int(20, title="BB Length")
mult = input.float(2.0, title="BB Multiplier")
// Calculate Bollinger Bands
basis = ta.sma(close, length)
deviation = mult * ta.stdev(close, length)
upperBB = basis + deviation
lowerBB = basis - deviation
// Calculate Bollinger Band width
bb_width = upperBB - lowerBB
prev_width = ta.valuewhen(not na(bb_width[1]), bb_width[1], 0)
prev_prev_width = ta.valuewhen(not na(bb_width[2]), bb_width[2], 0)
// Determine BB state
bb_state = bb_width > prev_width and prev_width > prev_prev_width ? 1 : bb_width < prev_width and prev_width < prev_prev_width ? -1 : 0
// Assign colors based on BB state
bb_color = bb_state == 1 ? color.green : bb_state == -1 ? color.red : color.gray
// Highlight candles closed outside BB
candle_size = high - low
highlight_color = (candle_size > bb_width / 2 and close > upperBB) ? color.new(color.green, 50) : (candle_size > bb_width / 2 and close < lowerBB) ? color.new(color.red, 50) : na
bgcolor(highlight_color, title="Highlight Candles")
// Plot Bollinger Bands
plot(upperBB, title="Upper BB", color=bb_color, linewidth=2, style=plot.style_line)
plot(lowerBB, title="Lower BB", color=bb_color, linewidth=2, style=plot.style_line)
plot(basis, title="Middle BB", color=color.blue, linewidth=1, style=plot.style_line)
// Calculate EMA 200
ema200 = ta.ema(close, 200)
// Plot EMA 200
plot(ema200, title="EMA 200", color=color.orange, linewidth=2, style=plot.style_line)
// Strategy logic
enter_long = highlight_color == color.new(color.green, 50)
exit_long = highlight_color == color.new(color.red, 50)
if (enter_long)
strategy.entry("Buy", strategy.long)
if (exit_long)
strategy.close("Buy")
// Display profit at close
if (exit_long)
var float entry_price = na
var float close_price = na
var float profit = na
if (strategy.opentrades > 0)
entry_price := strategy.opentrades.entry_price(strategy.opentrades - 1)
close_price := close
profit := (close_price - entry_price) * 100 / entry_price * 2 * 10 // Assuming 1 pip = 0.01 for XAUUSD
label.new(bar_index, high + (candle_size * 2), str.tostring(profit, format.mintick) + " USD", style=label.style_label_up, color=color.green)