
Ini adalah strategi perdagangan yang didasarkan pada Bollinger Bands Average Return Principle, yang menghasilkan keuntungan berturut-turut melalui beberapa level stop loss. Strategi ini melakukan perdagangan ketika harga kembali setelah penembusan Bollinger Bands, dan menyiapkan 5 tingkat stop loss yang berbeda untuk mengurangi posisi secara bertahap.
Strategi ini didasarkan pada indikator Bollinger Bands dengan 20 siklus, menggunakan 2 kali standar deviasi sebagai area fluktuasi. Ketika harga dari bawah menembus tren bawah dan ditutup di dalam zona, memicu sinyal multi; Ketika harga dari atas menembus tren atas dan ditutup di dalam zona, memicu sinyal kosong. Setelah masuk, strategi ini menggunakan mekanisme stop-loss 5-tahap, yang mengatur stop-loss pada posisi 0,5%, 1%, 1%, 2% dan 2,5%, masing-masing stop-loss, setiap stop-loss melonggarkan 20% dari posisi.
Strategi ini menangkap peluang mean reversion melalui indikator Brin Belt dan mengelola risiko dengan stop loss dan stop loss dinamis multi-level. Keunggulan strategi ini adalah manajemen posisi yang fleksibel dan mekanisme pengendalian risiko, tetapi perlu memperhatikan kesesuaian dengan lingkungan pasar saat digunakan. Dengan menambahkan indikator penyaringan tambahan dan mengoptimalkan parameter stop loss, stabilitas dan profitabilitas strategi dapat ditingkatkan lebih lanjut.
/*backtest
start: 2025-02-19 10:00:00
end: 2025-02-20 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"BNB_USDT"}]
*/
//@version=5
strategy("Bollinger Band Reentry Strategy", overlay=true)
// Inputs
bbLength = input.int(20, title="Bollinger Band Length")
bbMult = input.float(2.0, title="Bollinger Band Multiplier")
stopLossPerc = input.float(1.0, title="Stop Loss (%)") / 100
tp1Perc = input.float(0.5, title="Take Profit 1 (%)") / 100
tp2Perc = input.float(1.0, title="Take Profit 2 (%)") / 100
tp3Perc = input.float(1.5, title="Take Profit 3 (%)") / 100
tp4Perc = input.float(2.0, title="Take Profit 4 (%)") / 100
tp5Perc = input.float(2.5, title="Take Profit 5 (%)") / 100
allowAddToPosition = input.bool(true, title="Allow Adding to Position")
customSession = input.timeframe("0930-1600", title="Custom Trading Session")
// Calculate Bollinger Bands
basis = ta.sma(close, bbLength)
dev = ta.stdev(close, bbLength)
upperBB = basis + bbMult * dev
lowerBB = basis - bbMult * dev
// Plot Bollinger Bands
plot(upperBB, color=color.red, title="Upper Bollinger Band")
plot(lowerBB, color=color.green, title="Lower Bollinger Band")
plot(basis, color=color.blue, title="Bollinger Band Basis")
// Entry Conditions
longCondition = (ta.crossover(close, lowerBB) or (low < lowerBB and close > lowerBB)) and time(timeframe.period, customSession)
shortCondition = (ta.crossunder(close, upperBB) or (high > upperBB and close < upperBB)) and time(timeframe.period, customSession)
// Execute Trades
if (longCondition)
strategy.entry("Long", strategy.long, when=allowAddToPosition or strategy.position_size == 0)
if (shortCondition)
strategy.entry("Short", strategy.short, when=allowAddToPosition or strategy.position_size == 0)
// Take-Profit and Stop-Loss Levels for Long Trades
if (strategy.position_size > 0)
strategy.exit("TP1", "Long", limit=strategy.position_avg_price * (1 + tp1Perc), qty=strategy.position_size * 0.2) // Take 20% profit
strategy.exit("TP2", "Long", limit=strategy.position_avg_price * (1 + tp2Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP3", "Long", limit=strategy.position_avg_price * (1 + tp3Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP4", "Long", limit=strategy.position_avg_price * (1 + tp4Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP5", "Long", limit=upperBB, qty=strategy.position_size * 0.2) // Take final 20% at opposite band
strategy.exit("Stop Loss", "Long", stop=strategy.position_avg_price * (1 - stopLossPerc))
// Take-Profit and Stop-Loss Levels for Short Trades
if (strategy.position_size < 0)
strategy.exit("TP1", "Short", limit=strategy.position_avg_price * (1 - tp1Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP2", "Short", limit=strategy.position_avg_price * (1 - tp2Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP3", "Short", limit=strategy.position_avg_price * (1 - tp3Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP4", "Short", limit=strategy.position_avg_price * (1 - tp4Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP5", "Short", limit=lowerBB, qty=strategy.position_size * 0.2)
strategy.exit("Stop Loss", "Short", stop=strategy.position_avg_price * (1 + stopLossPerc))
// Alerts
alertcondition(longCondition, title="Long Signal", message="Price closed inside Bollinger Band from below.")
alertcondition(shortCondition, title="Short Signal", message="Price closed inside Bollinger Band from above.")