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.
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.
Strategi backtest pemutus rendah yang tinggi ini mempunyai kelebihan berikut:
Strategi ini juga mempunyai beberapa risiko:
Aspek berikut boleh membantu mengurangkan risiko ini:
Strategi ini boleh ditingkatkan dengan cara berikut:
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)