Stochastic Momentum Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 23.10.2023
Tags:

img

Übersicht

Die Momentum Breakout-Strategie verwendet hauptsächlich den Stochastic-Oszillator-Indikator, um die Markttrendrichtung zu bestimmen, kombiniert mit dem ADX-Indikator, um die Trendstärke zu beurteilen, um Handelssignale zu generieren.

Strategie Logik

Die Strategie beruht auf zwei technischen Indikatoren:

  1. Stochastischer Oszillator: wird verwendet, um die Markttrendrichtung zu bestimmen. Der Stochastische Oszillatorwert liegt zwischen 0 und 100. Ein Wert zwischen 45 und 55, wenn der Zeitraum 14 ist, bedeutet keinen klaren Trend. Ein Stochastischer über 55 ist ein Aufwärtssignal und unter 45 ist ein Bärensignal.

  2. ADX-Indikator: wird verwendet, um die Trendstärke zu beurteilen.

Die Strategie beurteilt zunächst, ob es einen klaren Aufwärtstrend oder Abwärtstrend gibt, basierend auf dem Wert des Stochastischen Oszillators. Wenn der Stochastische Wert über 55 liegt, signalisiert er einen Aufwärtstrend. Wenn er unter 45 liegt, signalisiert er einen Abwärtstrend.

Es überprüft dann, ob der ADX über 20 liegt, um einen starken Trend zu bestätigen. Wenn der ADX über 20 liegt, bedeutet dies, dass der Trend stark genug für den Trendhandel ist. Wenn der ADX unter 20 liegt, gilt der Trend als nicht offensichtlich und es werden keine Handelssignale generiert.

Durch die Kombination des Stochastic-Oszillators und des ADX werden Handelssignale erzeugt, wenn beide folgenden Bedingungen erfüllt sind:

  1. Stochastischer Wert über 55, was einen Aufwärtstrend signalisiert.
  2. ADX über 20, was bestätigt, dass der Aufwärtstrend stark ist.

Verkaufssignale werden erzeugt, wenn beide Bedingungen erfüllt sind:

  1. Stochastischer Wert unter 45, ein Abwärtstrend.
  2. ADX über 20, was bestätigt, dass der Abwärtstrend stark ist.

Mit diesen Regeln bildet die Strategie ein mittelfristig-langfristiges Trendfolgensystem.

Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Durch die Kombination von Stochastic und ADX kann die Markttrendrichtung und -stärke effektiv ermittelt und die wichtigsten Trends erfasst werden.

  2. Abzugskontrolle: Nur wenn der Trend klar ist, kann der Handel dazu beitragen, unnötige Whipsaws zu kontrollieren.

  3. Parameter-Tuning: Die Perioden von Stochastic und ADX können für verschiedene Märkte optimiert werden.

  4. Einfachheit: Die Gesamtlogik ist einfach und intuitiv und besteht aus zwei gemeinsamen technischen Indikatoren.

  5. Universalität: Die Strategie kann mit Parameter-Tuning auf verschiedene Märkte angewendet werden.

Risiken

Einige Risiken der Strategie:

  1. Fehlende Ausbruchpunkte: Als Trend-nachfolgende Indikatoren können Stochastic und ADX potenzielle Trendumkehrpunkte und frühe Ausbruchstransaktionen übersehen.

  2. Trendumkehrrisiken: Sie können den Trend fälschlicherweise als Ende eines Trends beurteilen und Chancen verpassen, rechtzeitig auszusteigen, was zu verstärkten Verlusten führt.

  3. Schwierigkeiten bei der Optimierung von Parametern: Die Parameter müssen für verschiedene Märkte abgestimmt werden, was einige Schwierigkeiten mit sich bringt.

  4. Whipsaws: Es kann mehrere ungültige Signale in Bereichsmärkten ohne klaren Trend erzeugen.

  5. Divergenz: Wenn der Kurstrend mit dem Stochastic-Oszillator-Trend in Konflikt steht, tritt eine Divergenz auf, die zu Verlustgeschäften führen kann.

Die Risiken könnten durch:

  1. Hinzufügen anderer Indikatoren zur Ermittlung lokaler Trends und potenzieller Ausbruchpunkte.

  2. Einbeziehung von Trendumkehrsignalen, um rechtzeitig auszusteigen, wenn sich Trends wesentlich umkehren.

  3. Maschinelles Lernen zur automatischen Optimierung von Parametern.

  4. Erhöhung des ADX-Schwellenwerts, um schwache Trendsignale in unterschiedlichen Märkten zu filtern.

  5. Anwendung zusätzlicher Indikatoren zur Bestätigung der Stochastischen Signale und Vermeidung von Divergenzgeschäften.

Verbesserungsrichtlinien

Einige Möglichkeiten zur Verbesserung der Strategie:

  1. Optimierung von Stochastischen Parametern wie den Perioden K und D, um Wendepunkte genau zu lokalisieren.

  2. Optimierung der ADX-Periode zur Bestimmung der besten Parameter zur Beurteilung der Trendstärke.

  3. Hinzufügen von Trendumkehrsignalen, wie z. B. Erhöhung der Positionsgröße in stochastischen Überkauf-/Überverkaufszonen mit Stop-Loss.

  4. Kombination anderer Indikatoren wie RSI und MACD, um den Ein- und Ausstieg zeitlich zu optimieren.

  5. Mit maschinellem Lernen finden wir die optimalen Parameterkombinationen.

  6. Einführung von Stop-Loss-Strategien, wie z. B. Bewegung von Stop-Loss oder Umkehrung von Stop-Loss, um Einzelhandelsverluste zu kontrollieren.

  7. Trailing Stop Loss: Hinzufügen von Trailing Stop Loss, um Gewinne zu erzielen, wenn sich der Trend ausdehnt.

  8. Geldmanagement: Optimieren Sie das Risikomanagement, indem Sie die Positionsgröße anhand der ADX-Stärke anpassen.

Zusammenfassung

Zusammenfassend ist diese Momentum-Breakout-Strategie insgesamt ein Trendfolgensystem, das Stochastic zur Bestimmung der Trendrichtung und ADX zur Messung der Stärke verwendet, um eine mittelfristige bis langfristige Handelsstrategie zu bilden. Die Vorteile liegen darin, Trends zu erfassen und Drawdowns mit einer einfachen und intuitiven Logik zu kontrollieren. Die Schwächen sind potenzielle verpasste frühe Breakout-Trades und Trendumkehrrisiken. Wir können es durch Methoden wie Parameter-Tuning, Hinzufügen von Signalen, Implementierung von Stop-Loss optimieren, um die Belohnung / das Risiko zu verbessern und gleichzeitig Risiken zu kontrollieren.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Created by Bitcoinduke
//Original Creator is Jake Bernstein 
// Link: https://school.stockcharts.com/doku.php?id=trading_strategies:stochastic_pop_drop
// Tested: XBTUSD 3h | BTCPERP FTX 3h
//@version=4
// strategy(shorttitle="Stochastic Pop and Drop", title="Pop and Drop", overlay=false, 
//      calc_on_every_tick=false, pyramiding=0, default_qty_type=strategy.cash, 
//      default_qty_value=1000, currency=currency.USD, initial_capital=1000,
//      commission_type=strategy.commission.percent, commission_value=0.075)

upper_threshold_buy = input(55, minval=50, title="Buy Entry/Exit Line")
lower_threshold_sell = input(45, maxval=50, title="Sell Entry/Exit Line")

oscillator_length = input(14, minval=1, title="Stochastic Length - Default 14")
sma_length = input(2, minval=1, title="SMA Length - 3-day (3 by default) simple moving average of stoch")

stoch_oscillator = sma(stoch(close, high, low, oscillator_length), sma_length)

//Upper and Lower Entry Lines
upper_line = upper_threshold_buy
lower_line = lower_threshold_sell

stoch_color = stoch_oscillator >= upper_line ? green : stoch_oscillator <= lower_line ? red : purple

//Charts
plot(stoch_oscillator, title="Stochastic", style=histogram, linewidth=4, color=stoch_color)
upper_threshold = plot(upper_line, title="Upper Line", style=line, linewidth=4, color=green)
lower_threshold = plot(lower_line, title="Lower Line", style=line, linewidth=4, color=red)

// Strategy Logic
LongSignal = stoch_oscillator >= upper_line and not (stoch_oscillator > lower_line and stoch_oscillator < upper_line) ? true : false
ShortSignal = stoch_oscillator <= lower_line and not (stoch_oscillator > lower_line and stoch_oscillator < upper_line) ? true : false

strategy.entry("POP_Short", strategy.short, when=ShortSignal)
strategy.entry("POP_Long", strategy.long, when=LongSignal)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(true, "Custom Backtesting Dates")
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(5, "Backtest Stop Day")
testStopHour = input(0, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END



Mehr