Momentum-Breakout-Strategie für den gleitenden Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2023-11-27 16:25:54
Tags:

img

Übersicht

Die Momentum Breakout Moving Average Strategie ist eine Aktienhandelsstrategie, die bewegliche Durchschnitts-Crossover-Signale mit Momentum-Indikatoren kombiniert. Die Strategie verwendet mehrere technische Indikatoren, darunter Exponential Moving Average (EMA), Simple Moving Average (SMA), Moving Average Convergence Divergence (MACD) und einen modifizierten Relative Strength Index (StockRSI), um Kaufsignale zu generieren, wenn ein langfristiger Aufwärtstrend bestätigt wird. Wenn kurzfristige Momentum-Indikatoren Umkehrsignale zeigen, macht die Strategie Gewinn.

Strategie Logik

Die wichtigsten Bestandteile dieser Strategie sind:

  1. EMA/SMA-Übergang: Eine 9-Perioden-EMA-Schnelllinie überquert eine 21-Perioden-SMA-Slowline, um ein Kaufsignal auszulösen.

  2. MACD-Indikator: Das MACD-Histogramm muss als zusätzliche Bestätigung positiv sein, wenn es mit dem EMA/SMA-Crossover-Signal kombiniert wird.

  3. Der Indikator StockRSI: Die Signale werden ausgelöst, wenn der StockRSI über dem OVERBOUGHT-Niveau (80) oder unter dem OVERSOLD-Niveau (20) liegt.

  4. Bollinger-Bänder: Der Preis muss innerhalb der Bands liegen, wobei das mittlere Band eine 20-Perioden-SMA und die Breite der Bands zwei Standardabweichungen beträgt.

  5. Verlieren lassen und Profit machen: Berechnet auf der Grundlage von ATR für 14 Perioden.

Die Strategie erfordert mindestens 2 der 3 Indikatoren, um Kaufsignale zu geben, der Preis befindet sich innerhalb der Bollinger Bands und der langfristige Trend bleibt bullisch, um das endgültige Kaufsignal zu generieren.

Analyse der Vorteile

Die wichtigsten Stärken dieser Strategie sind:

  1. Ausgezeichnete Rücktests: Mehrere bewährte Indikatoren führen zu einer Überleistung gegenüber Referenz- und Einzelindikatoren.

  2. Optimierte Parameter: Schlüsselparameter wie EMA-Perioden und Bollinger-Bänder sind für eine verbesserte Stabilität optimiert.

  3. Automatische Stop-Loss-/Gewinnnahme: Bollinger-Bänder und ATR ermöglichen eine dynamische Anpassung der Stopps für eine bessere Risikokontrolle.

  4. Einfach umzusetzen: Eine saubere Codestruktur und eine einfache Datenverfügbarkeit führen zu einfachen praktischen Vorgängen.

Risikoanalyse

Trotz der guten Leistung sind die wichtigsten Risiken:

  1. Falsche Signale: Ungewöhnliche Marktschwankungen oder Ausfälle von Indikatoren können falsche Signale erzeugen.

  2. Unzureichende Parameter: Unzulässige Parameter könnten zu einem zu häufigen Handel oder zu einer unzureichenden Empfindlichkeit führen.

  3. Nicht angemessene Stop Loss: Ein zu eng eingestellter Stop-Loss führt in der Regel zu einem vorzeitigen Stop-Out, während ein zu breiter eingestellter Stop-Loss zu übermäßigen Verlusten führen kann.

Zur Bekämpfung der oben genannten Risiken können folgende Maßnahmen ergriffen werden:

  1. Manuelles Eingreifen: In abnormalen Situationen können Signale manuell überprüft, Parameter angepasst oder Strategien vorübergehend eingestellt werden.

  2. Optimierung der Parameter: Mehr wissenschaftliche und objektive Methoden wie genetische Algorithmen können zur systematischen Optimierung eingesetzt werden.

  3. Anpassung an Volatilität: Stop-Loss-Bereiche können auf ein bis dreifache ATR-Rate gesetzt werden, um die Volatilität zu berücksichtigen.

Möglichkeiten zur Verbesserung

Die Strategie kann in folgenden Bereichen weiter verbessert werden:

  1. Stärkere Stopp-Loss-Mechanismen: Nachfolgende Stop-Loss oder Stops auf Basis gleitender Durchschnitte können aufgenommen werden.

  2. Volumenfilter: Hinzufügen von Volumenindikatoren, um falsche Ausbrüche zu vermeiden.

  3. Dynamische Parameter: Automatische Optimierung von Parametern wie gleitenden Durchschnittszeiten und Bandbreite basierend auf sich ändernden Marktbedingungen.

  4. Maschinelles Lernen: LSTM, RNN und andere Algorithmen können eine dynamische Optimierung von Parametern ermöglichen.

Schlussfolgerung

Die Momentum Breakout Moving Average Strategie nutzt die Stärken der Kombination mehrerer technischer Indikatoren und hat eine anständige Rentabilität mit langfristiger und kurzfristiger Bestätigung erzielt.


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

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)

// EMA/MA Crossover
fast_length = 9
slow_length = 21
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal and (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)

// Fractal-based Support and Resistance levels
isFractalHigh = high[2] < high[1] and high[1] > high[0]
isFractalLow = low[2] > low[1] and low[1] < low[0]
resistance = ta.valuewhen(isFractalHigh, high[1], 0)
support = ta.valuewhen(isFractalLow, low[1], 0)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 80
oversold = 20
stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought))

// Buy and sell conditions
mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0)

// Long-term Trend Check
long_term_ma = ta.sma(close, 200)
long_term_bullish = close > long_term_ma
long_term_bearish = close < long_term_ma

// Plot the long-term MA for visual clarity
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)

// Simplified Buy and Sell conditions
buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper)
sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought)


// Potential SL and TP based on volatility
potential_SL = close - volatility
potential_TP = close + 2 * volatility

plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

// ... (rest of your code above)

// State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting
var bool inPosition = false
var tradeCounter = 0
var tradeCounterDelayed = 0 // Declaration of the variable

// Buy logic: Check if tradeCounter is 0 and the buy condition is met
if tradeCounter == 0 and buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    inPosition := true
    tradeCounter := tradeCounter + 1

// Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position
if tradeCounter == 1 and inPosition and sell_condition
    strategy.close("BUY")
    inPosition := false
    tradeCounter := tradeCounter - 1

// Update the delayed trade counter:
tradeCounterDelayed := tradeCounter

// Plotting
bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na)
plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

// ... (rest of your code if any)


Mehr