Die High Low Breaker Backtest-Strategie ist eine Trend-folgende Strategie, die die historischen Höhen und Tiefen einer Aktie verwendet, um festzustellen, ob der Preis aus diesen hohen-niedrigen Bereichen ausbricht. Sie berechnet den höchsten Preis und den niedrigsten Preis über einen bestimmten Zeitraum und erzeugt Kaufsignale, wenn der Preis des aktuellen Zeitraums den höchsten Preis über einen letzten Zeitraum überschreitet, und Verkaufssignale, wenn der Preis unter den niedrigsten Preis über einen letzten Zeitraum bricht. Als eine Art Trend-folgende Strategie kann sie einige Trendmerkmale der Aktienkurse erfassen und hat praktischen Wert für den Live-Handel.
Die Kernlogik dieser Strategie besteht darin, den höchsten Preis und den niedrigsten Preis über eine bestimmte Anzahl von Bars (Standard 50 Bars) zu berechnen. Bei der Berechnung der höchsten/niedrigsten Preise erlaubt es die Verwendung von Schlusspreisen oder tatsächlichen hohen/niedrigen Preisen (Standard, um hohe/niedrige Preise zu verwenden). Dann wird überprüft, ob der aktuelle Schlusspreis oder der hohe Preis des aktuellen Bars den höchsten Preis über den letzten Zeitraum überschreitet. Wenn ja und es mehr als eine Mindestanzahl von Bars (Standard 30 Bars) seit der letzten höchsten Preisbar ist, erzeugt es ein Kaufsignal. Ebenso erzeugt es ein Verkaufssignal, wenn der aktuelle Schlusspreis oder der niedrigste Preis des aktuellen Bars den niedrigsten Preis über den letzten Zeitraum überschreitet und eine Mindestanzahl von Bars seit dem letzten niedrigsten Preis überschritten ist.
Nach der Erzeugung von Kaufsignalen tritt die Strategie zu diesem Preis in Long-Positionen ein, wobei ein Stop-Loss-Preis und ein Take-Profit-Preis festgelegt werden.
Diese High-Low-Breaker-Backtest-Strategie hat folgende Vorteile:
Diese Strategie birgt auch einige Risiken:
Die folgenden Aspekte können dazu beitragen, diese Risiken zu mindern:
Diese Strategie kann wie folgt verbessert werden:
Zusammenfassend ist die High Low Breaker Backtest Strategie eine einfache und praktische Trend-Folge-Strategie. Sie erzeugt Handelssignale basierend auf dem Preisbruch periodischer höchster/niedrigster Preise. Die Strategie hat Vorteile wie Einfachheit, Trend-Folge und Parameteroptimierbarkeit, aber auch Risiken wie Über-Handel und Unfähigkeit, schwankende Märkte zu handhaben. Weitere Optimierungen können um Parameter, Signalfilter, Positionsgrößen usw. herum durchgeführt werden, um ihre Leistung zu verbessern.
/*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)