Strategi Ujian Kembali Pemutus Tinggi Rendah

Penulis:ChaoZhang, Tarikh: 2023-11-27 15:37:13
Tag:

img

Ringkasan

Strategi High Low Breaker Backtest adalah strategi mengikuti trend yang menggunakan tahap tertinggi dan terendah sejarah saham untuk menentukan sama ada harga keluar dari julat tinggi-rendah ini. Ia mengira harga tertinggi dan harga terendah dalam tempoh tertentu, dan menghasilkan isyarat beli apabila harga tempoh semasa melebihi harga tertinggi dalam tempoh baru-baru ini, dan isyarat jual apabila harga memecahkan di bawah harga terendah dalam tempoh baru-baru ini. Sebagai jenis strategi mengikuti trend, ia dapat menangkap beberapa ciri trend harga saham dan mempunyai nilai praktikal untuk perdagangan langsung.

Logika Strategi

Logik teras strategi ini adalah untuk mengira harga tertinggi dan harga terendah dalam beberapa bar (default 50 bar). Apabila mengira harga tertinggi/terendah, ia membolehkan menggunakan harga dekat atau harga tinggi/rendah sebenar (default untuk menggunakan harga tinggi/rendah). Kemudian ia memeriksa sama ada harga penutupan bar semasa atau harga tinggi melebihi harga tertinggi dalam tempoh terakhir. Jika ya dan ia telah lebih daripada bilangan bar minimum (default 30 bar) sejak bar harga tertinggi terakhir, ia menghasilkan isyarat beli. Begitu juga, jika harga penutupan bar semasa atau harga rendah memecahkan harga terendah dalam tempoh baru-baru ini dan bilangan bar minimum sejak harga terendah terakhir, ia menghasilkan isyarat jual.

Apabila menghasilkan isyarat beli, strategi memasuki kedudukan panjang pada harga itu, dengan harga stop loss dan mengambil keuntungan ditetapkan. Ia keluar dari kedudukan dengan stop loss apabila harga stop loss disentuh, dan keluar dengan mengambil keuntungan apabila harga mengambil keuntungan disentuh. Logik untuk isyarat jual adalah sama.

Analisis Kelebihan

Strategi backtest pemutus rendah yang tinggi ini mempunyai kelebihan berikut:

  1. Logiknya mudah dan mudah difahami / dilaksanakan.
  2. Ia boleh menangkap beberapa ciri trend harga saham.
  3. Parameter boleh dioptimumkan untuk mencari kombinasi parameter terbaik.
  4. Terbina dalam stop loss dan mengambil keuntungan kawalan risiko.
  5. Visualisasi memudahkan penyesuaian parameter dan analisis hasil.

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko:

  1. Kecenderungan untuk pelbagai perdagangan flip-flop dan over-dagang.
  2. Pembukaan kedudukan yang kerap apabila harga berayun.
  3. Melewatkan peluang trend utama jika parameter tidak ditetapkan dengan betul.
  4. Tanpa mengambil kira kekerapan dan magnitud turun naik harga.
  5. Tiada pengesahan isyarat dengan penunjuk lain.

Aspek berikut boleh membantu mengurangkan risiko ini:

  1. Kurangkan jarak stop loss untuk meningkatkan masa tahan.
  2. Tambah lebih banyak kriteria kemasukan untuk mengelakkan kemasukan yang kerap.
  3. Mengoptimumkan parameter untuk mencari kombinasi yang optimum.
  4. Tambah keadaan penapis dengan penunjuk lain.

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dengan cara berikut:

  1. Pengoptimuman parameter menggunakan ujian yang lebih sistematik.
  2. Tambah penapis isyarat dengan penunjuk lain seperti purata bergerak.
  3. Pertimbangkan turun naik harga menggunakan ATR untuk menyesuaikan ambang pecah.
  4. Membezakan trend vs pasaran berayun untuk menyesuaikan parameter.
  5. Mempertingkatkan peraturan saiz kedudukan e.g. berhenti membuka kedudukan baru selepas kerugian yang ketara.

Ringkasan

Ringkasnya, High Low Breaker Backtest Strategy adalah strategi trend berikut yang mudah dan praktikal. Ia menjana isyarat perdagangan berdasarkan harga pecah harga tertinggi / terendah berkala. Strategi ini mempunyai kelebihan seperti kesederhanaan, trend-mengikuti, dan parameter pengoptimuman, tetapi juga risiko seperti over-dagang dan ketidakupayaan untuk mengendalikan pasaran berayun. pengoptimuman lanjut boleh dilakukan di sekitar parameter, penapis isyarat, saiz kedudukan dan lain-lain untuk meningkatkan prestasi.


/*backtest
start: 2023-11-25 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("High/Low Breaker Backtest 1.0", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=700)

// Strategy Settings
takeProfitPercentageLong = input(.1, title='Take Profit Percentage Long', type=float)/100
stopLossPercentageLong = input(0.15, title='Stop Loss Percentage Long', type=float)/100
takeProfitPercentageShort = input(.1, title='Take Profit Percentage Short', type=float)/100
stopLossPercentageShort = input(0.15, title='Stop Loss Percentage Short', type=float)/100


candlesBack = input(title="Number of candles back",  defval=50)
useHighAndLows =  input(true, title="Use high and lows (uncheck to use close)", defval=true)
lastBarsBackMinimum =  input(title="Number of candles back to ignore for last high/low",  defval=30)
showHighsAndLows = input(true, title="Show high/low lines", defval=true)

getIndexOfLowestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] <= current
            index := i
            current := series[i]
    index

getIndexOfHighestInSeries(series, period) => 
    index = 0
    current = series
    for i = 1 to period
        if series[i] >= current
            index := i
            current := series[i]
    index

indexOfHighestInRange = getIndexOfHighestInSeries(useHighAndLows ? high : close, candlesBack)
indexOfLowestInRange = getIndexOfLowestInSeries(useHighAndLows ? low : close, candlesBack)

max = useHighAndLows ? high[indexOfHighestInRange] : close[indexOfHighestInRange]
min = useHighAndLows ? low[indexOfLowestInRange] : close[indexOfLowestInRange]

barsSinceLastHigh = indexOfHighestInRange
barsSinceLastLow = indexOfLowestInRange

isNewHigh = (useHighAndLows ? high > max[1] : close > max[1]) and (barsSinceLastHigh[1] + 1 > lastBarsBackMinimum)
isNewLow = (useHighAndLows ? low < min[1] : close < min[1]) and (barsSinceLastLow[1] + 1 > lastBarsBackMinimum)

alertcondition(condition=isNewHigh, title="New High", message="Last High Broken")
alertcondition(condition=isNewLow, title="New Low", message="Last Low Broken")

if high > max 
    max := high
    barsSinceLastHigh := 0

if low < min
    min := low
    barsSinceLastLow := 0 

plot( showHighsAndLows ? max : na, color=red, style=line, title="High", linewidth=3)
plot( showHighsAndLows ? min : na, color=green, style=line, title="Low", linewidth=3)

// Strategy Entry/Exit Logic
goLong =isNewHigh
longStopLevel = strategy.position_avg_price * (1 - stopLossPercentageLong)
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentageLong)

goShort = isNewLow
shortStopLevel = strategy.position_avg_price * (1 + stopLossPercentageShort)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentageShort)

strategy.entry("Long", strategy.long, when=goLong)
strategy.exit("Long Exit", "Long", stop=longStopLevel, limit=longTakeProfitLevel)

strategy.entry("Short", strategy.short, when=goShort)
strategy.exit("Short Exit", "Short", stop=shortStopLevel, limit=shortTakeProfitLevel)
        
plot(goShort ? shortStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goShort ? shortTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)
plot(goLong ? longStopLevel : na, color=yellow, style=linebr, linewidth=2)
plot(goLong ? longTakeProfitLevel : na, color=blue, style=linebr, linewidth=2)


Lebih lanjut