Strategi Stop-Loss Bollinger Band Dinamis


Tanggal Pembuatan: 2024-02-01 10:48:52 Akhirnya memodifikasi: 2024-02-01 10:48:52
menyalin: 0 Jumlah klik: 682
1
fokus pada
1617
Pengikut

Strategi Stop-Loss Bollinger Band Dinamis

Ringkasan

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.

Prinsip

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.

Keunggulan

  1. Menggunakan Brin Belt yang memiliki sifat retrograde yang kuat untuk menangkap tren garis tengah dan panjang;
  2. Untuk itu, saya akan merekomendasikan untuk membuat lebih banyak sinyal kosong yang jelas dan mudah dioperasikan.
  3. Mengatur stop loss dengan titik geser dinamis, mengunci keuntungan maksimal, dan mengendalikan risiko;
  4. Parameter ini dapat disesuaikan dengan pasar dan dapat disesuaikan dengan situasi yang berbeda.

Risiko dan Solusi

  1. Brin bisa melakukan beberapa kali sinyal shorting dalam situasi yang bergoyang, mudah untuk ditargetkan. Solusinya adalah dengan mengatur stop loss yang masuk akal, mengendalikan kerugian tunggal.
  2. Pengaturan parameter yang tidak tepat dapat menyebabkan penurunan tingkat kemenangan. Solusinya adalah mengoptimalkan parameter secara rasional sesuai dengan varietas yang berbeda.

Arah optimasi

  1. Optimalkan parameter moving average untuk menyesuaikan karakteristik varietas;
  2. Ini adalah salah satu cara yang paling efektif untuk meminimalisir dampak negatif dari perubahan iklim.
  3. Ini akan meningkatkan stabilitas strategi, dikombinasikan dengan indikator lain sebagai syarat penyaringan.

Meringkaskan

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.

Kode Sumber Strategi
/*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)