
Strategi ini memanfaatkan tren naik dan turun di Brin Belt untuk melakukan stop loss dinamis. Buat kosong ketika harga menembus tren naik Brin Belt, lakukan lebih banyak ketika harga menembus tren turun, dan atur stop loss dinamis untuk melacak pergerakan harga.
Inti dari strategi ini adalah lintasan atas dan bawah di Brin Belt.*n hari standar buruk, rel bawah sebagai rel tengah-k*n hari standar perbedaan. Ketika harga dari rel bawah rebound ke atas, melakukan lebih banyak; Ketika harga dari rel atas kembali ke bawah, kosong. Pada saat yang sama, strategi pengaturan stop loss, dalam proses operasi harga, secara dinamis menyesuaikan stop loss, dan mengatur stop loss, untuk mengendalikan risiko yang bijaksana.
Strategi ini memanfaatkan sifat regresi dari Brin Belt, dengan stop loss slippage yang dinamis, untuk mendapatkan keuntungan dari tren garis tengah dengan asumsi pengendalian risiko, merupakan strategi kuantitatif yang kuat dan stabil. Dengan optimasi parameter dan optimasi aturan, dapat disesuaikan dengan lebih banyak varietas, untuk mendapatkan keuntungan yang stabil di pasar nyata.
/*backtest
start: 2024-01-24 00:00:00
end: 2024-01-31 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(shorttitle="BB Strategy", title="Bollinger Bands Strategy", overlay=true)
length = input.int(20, minval=1, group = "Bollinger Bands")
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = "Bollinger Bands")
src = input(close, title="Source", group = "Bollinger Bands")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev", group = "Bollinger Bands")
ma(source, length, _type) =>
switch _type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500, group = "Bollinger Bands")
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
lo = input.bool(true, "Long", group = "Strategy")
sh = input.bool(true, "Short", group = "Strategy")
x = input.float(3.0, "Target Multiplier (X)", group = "Strategy", minval = 1.0, step = 0.1)
token = input.string(defval = "", title = "Token", group = "AUTOMATION")
Buy_CE = '{"auth-token":"' + token + '","key":"Value1","value":"' + str.tostring(1) + '"}'
Buy_PE = '{"auth-token":"' + token + '","key":"Value1","value":"' + str.tostring(2) + '"}'
Exit_CE = '{"auth-token":"' + token + '","key":"Value1","value":"' + str.tostring(-1) + '"}'
Exit_PE = '{"auth-token":"' + token + '","key":"Value1","value":"' + str.tostring(-2) + '"}'
Exit_PE_CE = '{"auth-token":"' + token + '","key":"Value1","value":"' + str.tostring(2.5) + '"}'
Exit_CE_PE = '{"auth-token":"' + token + '","key":"Value1","value":"' + str.tostring(1.5) + '"}'
long = high < lower
short = low > upper
var sl_b = 0.0
var tar_b = 0.0
var sl_s = 0.0
var tar_s = 0.0
var static_sl = 0.0
entry = strategy.opentrades.entry_price(strategy.opentrades - 1)
if long and lo and strategy.position_size == 0
strategy.entry("Long", strategy.long, alert_message = Buy_CE, stop = high)
strategy.exit("LX", "Long", profit = (math.abs(high - low) * x)/syminfo.mintick, stop = low, alert_message = Exit_CE)
sl_b := low
tar_b := high + (math.abs(high - low) * x)
static_sl := math.abs(low - high)
if short and sh and strategy.position_size == 0
strategy.entry("Short", strategy.short, alert_message = Buy_PE, stop = low)
strategy.exit("SX", "Short", profit = (math.abs(high - low) * x)/syminfo.mintick, stop = high, alert_message = Exit_PE)
sl_s := high
tar_s := low - (math.abs(high - low) * x)
static_sl := math.abs(high - low)
// if long and strategy.position_size < 0
// strategy.entry("Long", strategy.long, alert_message = Exit_PE_CE, stop = high)
// strategy.exit("LX", "Long", profit = (math.abs(high - low) * x)/syminfo.mintick, stop = low, alert_message = Exit_CE)
// sl_b := low
// tar_b := high + (math.abs(high - low) * x)
// if short and strategy.position_size > 0
// strategy.entry("Short", strategy.short, alert_message = Exit_CE_PE, stop = low)
// strategy.exit("SX", "Short", profit = (math.abs(high - low) * x)/syminfo.mintick, stop = high, alert_message = Exit_PE)
// sl_s := math.max(high[1], high)
// tar_s := low - (math.abs(high - low) * x)
if ta.change(dayofmonth) or (long[1] and not long[2])
strategy.cancel("Long")
if ta.change(dayofmonth) or (short[1] and not short[2])
strategy.cancel("Short")
var count = 1
if strategy.position_size != 0
if strategy.position_size > 0
if close > (entry + (static_sl * count))
strategy.exit("LX", "Long", limit = tar_b, stop = sl_b, alert_message = Exit_CE)
sl_b := entry + (static_sl * (count - 1))
count += 1
else
if close < (entry - (static_sl * count))
strategy.exit("SX", "Short", limit = tar_s, stop = sl_s, alert_message = Exit_PE)
sl_s := entry - (static_sl * (count - 1))
count += 1
// label.new(bar_index, high, str.tostring(static_sl))
if strategy.position_size == 0
count := 1
plot(strategy.position_size > 0 ? sl_b : na, "", color.red, style = plot.style_linebr)
plot(strategy.position_size < 0 ? sl_s : na, "", color.red, style = plot.style_linebr)
plot(strategy.position_size > 0 ? tar_b : na, "", color.green, style = plot.style_linebr)
plot(strategy.position_size < 0 ? tar_s : na, "", color.green, style = plot.style_linebr)