Verfolgung der Preisausbruchsstrategie für hohe und niedrige Preise


Erstellungsdatum: 2023-12-22 12:59:43 zuletzt geändert: 2023-12-22 12:59:43
Kopie: 1 Klicks: 606
1
konzentrieren Sie sich auf
1623
Anhänger

Verfolgung der Preisausbruchsstrategie für hohe und niedrige Preise

Überblick

Eine Breakout-Hoch-Low-Strategie ist eine Trend-Tracking-Strategie, bei der der Preis die Höhe oder den Tiefpunkt der vorherigen K-Linie überschreitet. Es kombiniert den Moving Average, um die Richtung des Trends zu bestimmen, tritt am Breakoutpunkt ein und setzt dann einen Stop-Loss oder einen Tracking-Stop-Loss ein, um Gewinne zu erzielen.

Strategieprinzip

Die Strategie basiert auf folgenden Kriterien:

  1. Beurteilen Sie die K-Linie als rot oder grün, um zu bestimmen, ob die K-Linie steigt oder fällt
  2. Beurteilen, ob die aktuelle K-Linie die Höhe oder Tiefe der vorherigen K-Linie überschreitet
  3. Die Verwendung von Fast Moving Averages und Slow Moving Averages zur Bestimmung der Trends
  4. Wenn die oberen K-Linien die Höhen der vorherigen unteren K-Linien überschreiten, machen Sie mehr; wenn die unteren K-Linien die Tiefen der oberen K-Linien überschreiten, machen Sie weniger
  5. Die Ausgleichsbedingungen sind Stop-Loss oder Tracking-Stop-Trigger; es kann auch eingestellt werden, dass der Stop-Loss sofort erfolgt, wenn eine umgekehrte K-Linie auftritt.

Die Strategie kombiniert gleichzeitig eine zweite umgekehrte K-Leitung, um falsche Durchbrüche zu filtern und die Zuverlässigkeit des Durchbruchssignals zu gewährleisten.

Analyse der Stärken

  • Strategische Orientierung ist klar, Durchbruch ist einfach
  • Die Kombination mit einem doppelten Moving Average sorgt dafür, dass die großen Trends richtig beurteilt werden.
  • Stop-loss-Tracking hilft, mehr Gewinne zu sichern
  • Ein umgekehrter K-Linie-Mechanismus hilft, die Jagd auf die Höhe zu vermeiden.

Risikoanalyse

  • Versagtes Durchbrechen könnte zu operativen Verlusten führen
  • Die Gefahr von False-Breaks bei Erschütterungen ist größer
  • Der Doppel-Moving-Average kann zu Fehleinschätzungen führen

Maßnahmen zur Risikokontrolle:

  1. Wählen Sie einen Index oder einen Mainstream-Markt, um ein hohes Risiko für einzelne Aktien zu vermeiden
  2. Optimierung der Moving Average-Parameter zur Verbesserung der Genauigkeit der Beurteilung
  3. Erhöhung der Stop-Loss-Marge, um die Einzelschadenkontrolle sicherzustellen

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Verschiedene Kombinationen von Moving Average Parametern testen
  2. Tests mit anderen Indikatoren zur Kombinationsbeurteilung
  3. Optimierung der Positionseröffnung und Stop-Loss-Parameter
  4. Erhöhung der quantitativen Auswahlregeln für die Auswahl der Qualitätsmarken
  5. Optimierung der Parameteradaptivität in Kombination mit maschinellen Lernalgorithmen

Zusammenfassen

Die Breakout-Strategie ist insgesamt eine ausgereiftere Trendverfolgungsstrategie, die unter der Unterstützung von Moving Average-Urteilen ein gewisses Maß an Trends erfasst. Die Stop-Loss- und Tracking-Stop-Mechanismen helfen auch, Gewinne zu sichern. Durch kontinuierliches Testen und Optimieren können die Parameter-Einstellungen und die Wirkung der Strategie verbessert werden.

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