Strategie für den Rücktest mit hohem und niedrigem Brecher

Schriftsteller:ChaoZhang, Datum: 2023-11-27 15:37:13
Tags:

img

Übersicht

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.

Strategie Logik

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.

Analyse der Vorteile

Diese High-Low-Breaker-Backtest-Strategie hat folgende Vorteile:

  1. Die Logik ist einfach und leicht zu verstehen/umzusetzen.
  2. Es kann einige tendenzielle Merkmale der Aktienkurse erfassen.
  3. Parameter können optimiert werden, um die besten Parameterkombinationen zu finden.
  4. Eingebaute Stop-Loss- und Take-Profit-Kontrollen für das Risiko.
  5. Visualisierungen erleichtern die Einstellung von Parametern und die Analyse der Ergebnisse erheblich.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Anfällig für mehrfache Flip-Flop-Trades und Überhandelungen.
  2. Häufiges Öffnen von Positionen bei Kursschwankungen.
  3. Verpassen wichtiger Trendchancen, wenn die Parameter nicht ordnungsgemäß festgelegt werden.
  4. Ohne Berücksichtigung der Häufigkeit und Größe der Preisschwankungen.
  5. Keine Signalvalidierung mit anderen Indikatoren.

Die folgenden Aspekte können dazu beitragen, diese Risiken zu mindern:

  1. Verringern Sie die Stoppverlustdistanz, um die Wartezeit zu verlängern.
  2. Mehr Eintrittskriterien hinzufügen, um häufige Eintritte zu vermeiden.
  3. Optimieren Sie die Parameter, um optimale Kombinationen zu finden.
  4. Zusätzliche Filterbedingungen mit anderen Indikatoren.

Optimierungsrichtlinien

Diese Strategie kann wie folgt verbessert werden:

  1. Optimierung der Parameter unter Verwendung systematischerer Tests.
  2. Hinzufügen von Signalfiltern mit anderen Indikatoren, z. B. gleitenden Durchschnitten.
  3. Bei der Anpassung der Ausfallschwellenwerte wird die Preisvolatilität unter Verwendung von ATR berücksichtigt.
  4. Unterscheidung zwischen Trends und Schwingungsmärkten zur Anpassung der Parameter.
  5. Verstärkung der Positionsgrößenordnung, z. B. Einstellung der Eröffnung neuer Positionen nach erheblichem Verlust.

Zusammenfassung

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)


Mehr