Bollinger Band Moving Average Pair Strategy


Tarikh penciptaan: 2023-11-24 15:32:57 Akhirnya diubah suai: 2023-11-24 15:32:57
Salin: 0 Bilangan klik: 706
1
fokus pada
1617
Pengikut

Bollinger Band Moving Average Pair Strategy

Gambaran keseluruhan

Strategi perdagangan pasangan Brin-Band-Moving-Line adalah strategi pengesanan trend yang berjalan mengikut harga pasaran. Ia menggunakan persilangan Brin-Band dan Moving-Moving-Line sebagai isyarat perdagangan, mewujudkan strategi kuantitatif yang dapat mengenal pasti trend pasaran secara automatik, dan berkerjasama dengan peraturan Stop-Loss untuk berdagang.

Prinsip Strategi

Strategi ini berdagang berdasarkan isyarat silang indikator Bollinger Bands dan Moving Average Line Indicators. Secara khusus, ia menggunakan 7 purata bergerak yang berkisar antara 5 dan 200 hari. Ia menghasilkan isyarat beli apabila harga menembusi Bollinger Bands dari bawah ke atas dan turun ke bawah. Ia menghasilkan isyarat jual apabila harga menembusi Bollinger Bands dari atas ke bawah.

Di samping itu, strategi ini juga memperkenalkan indikator penghakiman multi-kawasan moveToFract. Ia menilai pergerakan pasaran semasa ke atas atau ke bawah dengan mengira urutan purata bergerak jangka pendek dan jangka panjang, untuk mengelakkan isyarat yang salah dalam keadaan yang bergolak.

Analisis kelebihan

  1. Fleksibiliti konfigurasi, anda boleh menyesuaikan kombinasi parameter untuk menyesuaikan diri dengan keadaan pasaran yang berbeza
  2. Gabungan dua penunjuk yang berbeza sebagai penapis dapat mengurangkan isyarat yang salah
  3. Indikator trend boleh mengelakkan pasaran bergolak daripada melakukan operasi terbalik.
  4. Tetapan Tracking Stop Loss untuk Maksimumkan Keuntungan

Analisis risiko

  1. Parameter harus diselaraskan dengan baik untuk menyesuaikan diri dengan kitaran yang berbeza untuk mengelakkan perdagangan berlebihan
  2. Tracking Stop Loss boleh meningkatkan kerugian dalam kejatuhan pantas
  3. Pastikan anda mempunyai dana yang mencukupi, atau anda tidak boleh menanggung risiko kerugian berturut-turut

Arah pengoptimuman

  1. Menambah kefahaman tentang penyambungan emas dan penyambungan emas untuk lebih baik
  2. Parameter yang berbeza dari pelbagai jenis, yang boleh dipertimbangkan sebagai parameter terbaik untuk latihan pembelajaran mesin
  3. Indeks Fluktuasi dan Pengendalian Angin

ringkaskan

Strategi ini secara keseluruhan adalah strategi pengesanan trend yang sangat praktikal. Ia menggunakan cross-indikator untuk membuat keputusan, dan menambahkan modul penilaian trend, yang dapat menghapuskan isyarat yang salah. Setelah memasang hentian hentian, anda dapat mengikuti tren dengan baik untuk berdagang dan memperoleh keuntungan yang lebih baik. Dengan menyesuaikan kombinasi parameter dan menambahkan lebih banyak penapis, strategi ini dapat dioptimumkan lebih lanjut, sesuai dengan lebih banyak keadaan pasaran, dengan ruang dan prospek aplikasi yang besar.

Kod 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 )