Strategi Perdagangan Pasangan Rata-rata Pergerakan Bollinger Band


Tanggal Pembuatan: 2023-11-24 15:32:57 Akhirnya memodifikasi: 2023-11-24 15:32:57
menyalin: 0 Jumlah klik: 706
1
fokus pada
1617
Pengikut

Strategi Perdagangan Pasangan Rata-rata Pergerakan Bollinger Band

Ringkasan

Bollinger Bands Equity Pairing Trading Strategy adalah strategi pelacakan tren yang berjalan dengan harga pasar. Ini menggunakan persilangan Bollinger Bands dan Moving Equity Line sebagai sinyal perdagangan, untuk mewujudkan strategi kuantitatif yang dapat secara otomatis mengidentifikasi tren pasar dan bermitra dengan aturan stop loss untuk perdagangan.

Prinsip Strategi

Strategi ini terutama didasarkan pada sinyal silang indikator Bollinger Bands dan Moving Average Indicators. Secara khusus, ia menggunakan 7 rata-rata bergerak dengan durasi antara 5 dan 200 hari. Ini menghasilkan sinyal beli ketika harga menerobos Bollinger Bands dan turun dari bawah ke atas.

Selain itu, strategi ini juga memperkenalkan indikator penilaian multi-halangan dari moveToFract. Indikator ini menilai apakah tren pasar saat ini naik atau turun dengan menghitung urutan rata-rata bergerak jangka pendek dan jangka panjang, sehingga menghindari sinyal yang salah dalam situasi yang bergolak. Akhirnya, dengan kombinasi aturan stop-loss yang dapat dikonfigurasi, ini membentuk strategi perdagangan pelacakan tren yang lebih lengkap.

Analisis Keunggulan

  1. Fleksibilitas konfigurasi, kombinasi parameter yang dapat disesuaikan untuk menyesuaikan dengan lingkungan pasar yang berbeda
  2. Kombinasi dua indikator yang berbeda sebagai filter dapat mengurangi sinyal yang salah
  3. Indikator penilaian tren dapat menghindari pasar yang bergoyang untuk melakukan operasi terbalik
  4. Tracking Stop Loss Setup untuk Maksimalkan Keuntungan

Analisis risiko

  1. Parameter harus disesuaikan sesuai dengan siklus yang berbeda untuk menghindari overtrading
  2. Tracking stop loss dapat memperluas kerugian dalam penurunan cepat
  3. Anda harus memastikan bahwa Anda memiliki cukup dana atau Anda tidak dapat menanggung risiko kerugian berkelanjutan.

Arah optimasi

  1. Penambahan penilaian cross-over emas, cross-over mati, dapat lebih dioptimalkan.
  2. Parameter yang berbeda-beda dari varietas yang berbeda dapat dianggap sebagai parameter terbaik untuk pelatihan pembelajaran mesin.
  3. Indeks Volatilitas dan Pengendalian Angin

Meringkaskan

Strategi ini secara keseluruhan merupakan strategi pelacakan tren yang sangat praktis. Strategi ini menggunakan indikator silang untuk membuat keputusan, dan menambahkan modul penilaian tren, yang dapat secara efektif menyingkirkan sinyal yang salah. Setelah konfigurasi stop loss, Anda dapat sepenuhnya melacak tren untuk berdagang, mendapatkan keuntungan yang lebih baik. Dengan menyesuaikan portofolio parameter dan menambahkan lebih banyak filter, strategi ini dapat dioptimalkan lebih lanjut, disesuaikan dengan lebih banyak lingkungan pasar, dan memiliki banyak ruang untuk perbaikan dan prospek aplikasi.

Kode Sumber Strategi
/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HeWhoMustNotBeNamed

//@version=4
strategy("BuyTheDip", overlay=true, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
exitType = input(title="Exit Strategy", defval="Signal", options=["Signal", "TrailingStop", "Both"])
LookbackPeriod = input(30, minval=10,step=10)

BBStdDev = input(2, minval=1, maxval=10, step=0.5)
BBLength = input(60, minval=5, step=5)

atrLength = input(22)
atrMult = input(6)

tradeDirection = input(title="Trade Direction", defval=strategy.direction.all, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)
includePartiallyAligned = true
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

f_getTrailingStop(atr, atrMult)=>
    stop = close - atrMult*atr
    stop := strategy.position_size > 0 ? max(stop, stop[1]) : stop
    stop

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0
    upwardScore := close > ma5? upwardScore+1:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0
    
inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)

exitBySignal = exitType == "Signal" or exitType == "Both"
exitByTrailingStop = exitType == "TrailingStop" or exitType == "Both"
maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
atr = atr(atrLength)

trailingStop = f_getTrailingStop(atr, atrMult)
maAligned = highest(maAlignment,LookbackPeriod)
[middle, upper, lower] = bb(close, BBLength, BBStdDev)

buyCondition = maAligned == 1 and (crossover(close, lower) or crossover(close, middle))
buyExitCondition = crossunder(close, upper)

strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=buyExitCondition and exitBySignal)
strategy.exit("ExitBuy", "Buy", stop = trailingStop, when=exitByTrailingStop )