High-Low Breakout Backtesting-Strategie


Erstellungsdatum: 2023-11-27 15:37:13 zuletzt geändert: 2023-11-27 15:37:13
Kopie: 0 Klicks: 689
1
konzentrieren Sie sich auf
1617
Anhänger

High-Low Breakout Backtesting-Strategie

Überblick

Die High-Low-Breakout-Retracing-Strategie ist eine Trend-Tracking-Strategie, die die historischen Höhen und Tiefen der Aktien nutzt, um zu beurteilen, ob die Preise diese hohen und niedrigen Punkte überschritten haben. Sie erzeugt ein Kaufsignal, indem sie die Höchst- und Tiefstpreise eines bestimmten Zeitraums berechnet, wenn der Preis des aktuellen Zeitraums den Höchstpreis des letzten Zeitraums überschreitet; wenn der Preis unter dem Tiefstpreis des letzten Zeitraums fällt, erzeugt sie einen Verkauf.

Strategieprinzip

Die Kernlogik dieser Strategie ist die Berechnung von Höchst- und Tiefstpreisen für einen bestimmten Zeitraum (die Standard-K-Linie von 50 Punkten). Bei der Berechnung von Höchst- und Tiefstpreisen kann die Wahl zwischen Schlusskurs oder Höchst- und Tiefstpreisen (die Standard-K-Linie von Höchst- und Tiefstpreisen) getroffen werden. Dann wird entschieden, ob der Schlusskurs oder der Höchstpreis für die aktuelle K-Linie den Höchstpreis für den letzten bestimmten Zeitraum übersteigt, und wenn dies der Fall ist, wird ein Kaufsignal erzeugt.

Wenn ein Kaufsignal erzeugt wird, kauft die Strategie zu diesem Preis und setzt einen Stop-Loss- und einen Stop-Price-Preis. Wenn der Preis den Stop-Loss-Preis berührt, wird die Strategie ausgeschaltet; wenn der Preis den Stop-Price berührt, wird die Strategie ausgeschaltet. Die Logik des Verkaufssignals ist ähnlich.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Logik der Strategie ist einfach, leicht zu verstehen und umzusetzen.
  2. Das ist die Möglichkeit, die Trend-Eigenschaften der Aktienpreise zu erfassen und mit den Preis-Trends zu arbeiten.
  3. Die richtige Kombination von Strategieparametern kann durch Anpassung des Parameters Finding angepasst werden.
  4. Gefährdungs- und Stoppmechanismen sind eingebaut, um das Risiko zu kontrollieren.
  5. Die visuelle Darstellung erleichtert die Anpassung der Parameter und die Analyse der Ergebnisse.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Es ist leicht zu mehrfachen und übermäßigen Transaktionen.
  2. Wenn die Preise schwanken, wird häufig eine Position eröffnet.
  3. Wenn die Indikatorparameter nicht aktuell sind, könnte eine große Trendchance verpasst werden.
  4. Es wird nicht berücksichtigt, wie häufig und wie stark die Aktienpreise schwanken.
  5. Das Signal wird nicht in Verbindung mit anderen Indikatoren überprüft.

Um diese Risiken zu kontrollieren, können Optimierungen in folgenden Bereichen vorgenommen werden:

  1. Die Stop-Loss-Marge soll entsprechend reduziert und die Haltedauer erhöht werden.
  2. Es ist wichtig, die Bedingungen für die Eröffnung von Positionen zu erhöhen, um die häufige Eröffnung von Positionen zu vermeiden.
  3. Optimierung der Parameter, um die optimale Kombination von Parametern zu finden.
  4. In Kombination mit anderen Indikatoren filtert das Signal.

Optimierungsrichtung

Diese Strategie kann optimiert werden in folgenden Bereichen:

  1. Parameteroptimierung. Die Optimierung von Parametern kann durch systematischere Prüfung verschiedener Parameterkombinationen erreicht werden.

  2. In Kombination mit anderen Indikatoren kann ein Filtersignal erzeugt werden. Zum Beispiel kann ein Kaufsignal in Kombination mit einem Moving Average-Indikator erzeugt werden, nur wenn der Preis den Höchstpreis überschreitet und den langfristigen Moving Average über den kurzfristigen Moving Average durchbricht.

  3. Berücksichtigung der Schwankungsfrequenz der Aktienpreise. Zum Beispiel kann der ATR-Indikator verwendet werden, um die Breakout-Werte bei erhöhter Aktienpreisschwankung angemessen zu lockern.

  4. Unterscheidung zwischen Trend- und Schwankungsmärkten. In einer Phase, in der ein Trend sichtbar ist, sollten die Parameter entsprechend gelockert werden, um den Trend zu verfolgen. In einem Schwankungsmarkt sollten die Parameter entsprechend gestärkt werden.

  5. Erhöhung der Positionsmanagement-Mechanismen, z. B. die Einstellung von Positionen, wenn die Verluste einen bestimmten Prozentsatz erreichen.

Zusammenfassen

Insgesamt ist die Hoch-Low-Breakout-Retracing-Strategie eine einfache und praktische Trendverfolgungsstrategie. Sie entscheidet über die Handelssignale, indem sie beurteilt, ob der Preis die Höchst- und Tiefstpreise eines bestimmten Zeitraums überschritten hat. Die Strategie hat die Vorteile der Einfachheit, des Trendverfolgens und der parametrischen Optimierung, aber auch die Gefahr, dass sie zu viel gehandelt wird und nicht in der Lage ist, einen schwankenden Markt zu behandeln.

Strategiequellcode
/*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)