Broken High/Low-Strategie

Schriftsteller:ChaoZhang, Datum: 22.12.2023
Tags:

img

Übersicht

Die Broken High/Low-Strategie ist eine Trend-folgende Strategie, die Preis-Breakouts über das Hoch oder Tief der vorherigen Kerze hinweg verfolgt.

Strategie Logik

Die wichtigsten Bedingungen für die Ein- und Ausstiegsmöglichkeiten, die in dieser Strategie festgelegt werden, sind:

  1. Identifizieren Sie, ob die Kerze ist grün oder rot, um festzustellen, ob es sich um eine Up-Kandle oder Down-Kandle
  2. Überprüfen Sie, ob die aktuelle Kerze die hohe oder niedrige der vorherigen Kerze bricht
  3. Verwenden Sie schnelle und langsame gleitende Durchschnitte, um die Trendrichtung zu definieren
  4. Gehen Sie lang, wenn eine Aufwärtskerze über dem Höchststand einer vorherigen Abwärtskerze bricht, gehen Sie kurz, wenn eine Abwärtskerze unter dem Tiefstand einer vorherigen Aufwärtskerze bricht
  5. Ausgangszustände werden durch Stop-Loss oder Trailing-Stop ausgelöst; kann auch sofort aussteigen, wenn eine Umkehrkerze erscheint

Die Strategie verwendet auch Filter auf der Grundlage der zweiten Umkehrkerze, um falsche Ausbrüche zu vermeiden und die Signalzuverlässigkeit zu gewährleisten.

Analyse der Vorteile

  • Klarer strategischer Ansatz, leicht verständliche Ausbruchsoperationen
  • Gewährleistet eine korrekte Beurteilung des Trends durch Kombination zweier gleitender Durchschnitte
  • Ein Trailing-Stop hilft, mehr Gewinne zu erzielen.
  • Umkehr-Kandle-Filter helfen zu vermeiden, Höhen zu jagen und Tiefs zu töten

Risikoanalyse

  • Ein fehlgeschlagener Ausbruch kann zu Verlusten bei kurzfristigen Operationen führen.
  • Größeres Risiko eines falschen Ausbruchs auf den Märkten mit Bandbreite
  • Doppel gleitende Durchschnitte können sich verzögern, was zu Urteilsfehlern führt

Risikokontrollmaßnahmen:

  1. Auswahl von Indizes oder wichtigen Referenzwerten, um ein hohes Risiko für einzelne Bestände zu vermeiden
  2. Optimierung der gleitenden Durchschnittsparameter zur Verbesserung der Urteilsgenauigkeit
  3. Ein angemessener Ausbau des Stop-Loss-Bereichs zur Kontrolle von Einzelverlusten

Optimierungsrichtlinien

Diese Strategie kann in folgenden Aspekten optimiert werden:

  1. Verschiedene Kombinationen von gleitenden Durchschnittsparametern prüfen
  2. Prüfung mit anderen technischen Indikatoren für die Kombinationsbeurteilung
  3. Optimierung der Eingangs- und Stop-Loss-Parameter
  4. Hinzufügen von quantitativen Filterregeln zur Auswahl hochwertiger Basiswerte
  5. Einbeziehung von Algorithmen des maschinellen Lernens für die adaptive Parameteroptimierung

Zusammenfassung

Die Broken High/Low-Strategie ist insgesamt eine ausgereifte Trendfolgestrategie. Mit Hilfe von gleitenden Durchschnitten für Hilfsurteile kann sie einen gewissen Grad an Trends erfassen. Die Stop-Loss- und Trailing-Stop-Mechanismen helfen auch, Gewinne zu erzielen. Durch kontinuierliches Testen und Optimieren können die Parameter und Leistung dieser Strategie hervorragender werden.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Broken High/Low Strategy", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity)

useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy')
trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy')

fastMALength = input(5 , 'Fast MA length', group = 'Trend strength')
fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength')

slowMALength = input(10, 'Slow MA length', group = 'Trend strength')
slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength')

ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength')

useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy')
secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength')

longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings')
shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings')

fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength)
slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength)

FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters')
FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters')
FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters')
ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters')
ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters')
ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters')
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>time>=start and time<=finish?true:false
afterStartDate = time >= start and time<=finish?true:false
closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters')

trailStopMA = ta.ema(close, trailStopMALength)

isGreenCandle = close > open
isRedCandle = close < open
isBrokenHigh = close > open[1]
isPriorCandleRed = close[1] < open[1]
isPriorPriorCandleRed = close[2] < open[2]
isPriorPriorCandleGreen = close[2] > open[2]
isPriorCandleGreen = close[1] > open[1]
isBrokenLow = close < open[1]

isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh
isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow

isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false
isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false

longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled
longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA)
longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition

shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled
shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA)
shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition

if (longOpenCondition)
    strategy.entry("Long Entry", strategy.long)

if (longCloseCondition)
    strategy.close('Long Entry', 'Long Exit')

if (shortOpenCondition)
    strategy.entry("Short Entry", strategy.long)

if (shortCloseCondition)
    strategy.close('Short Entry', 'Short Exit')

if (closeTradesEOD and hour >= 14 and minute >= 30)
    strategy.close_all("EOD")

plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red)
plot(fastMA)
plot(ignoreSlowMA ? na : slowMA, linewidth = 4)

Mehr