Handelsstrategie für den doppelten exponentiellen gleitenden Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2024-01-30 15:44:11
Tags:

img

Übersicht

Die Strategie trägt den Namen Double Exponential Moving Average RSI Trading Strategy. Sie verwendet die doppelte EMA und den Relative Strength Index (RSI) als Haupthandelsindikatoren zur Implementierung des automatisierten Handels.

Strategieprinzip

Die Strategie berechnet zunächst den doppelten exponentiellen gleitenden Durchschnitt (MA) des Preises, berechnet dann den RSI basierend auf MA und berechnet weiter den exponentiellen gleitenden Durchschnitt des RSI (Smooth). Es erzeugt Kaufsignale, wenn der RSI über seinen gleitenden Durchschnitt geht, und Verkaufssignale, wenn der RSI unter seinen gleitenden Durchschnitt geht. Optional setzt die Strategie auch Parameter für die maximale Anzahl von Trades pro Tag, Handelsgröße als Prozentsatz des Eigenkapitals, Handelszeit, Gewinn und Stop-Loss in Punkten und Trailing-Stop in Punkten zur Risikokontrolle.

Stärken der Strategie

  1. Die doppelte EMA reagiert schneller auf Preisänderungen und filtert Lärm aus.
  2. Die Berechnung des RSI auf der Grundlage des MA macht ihn stabiler und verhindert falsche Trades.
  3. Der gleitende Durchschnitt des RSI hilft, Handelssignale zu bestätigen und falsche Ausbrüche zu vermeiden.
  4. Die Festlegung der maximalen Anzahl der Geschäfte pro Tag hilft, das tägliche Risiko zu kontrollieren.
  5. Die Festlegung der Handelsgröße als Prozentsatz des Eigenkapitals vermeidet einen übergroßen Einzelhandelsverlust.
  6. Die Einstellung der Handelszeit der Sitzung vermeidet wichtige Zeitknoten und kontrolliert das Liquiditätsrisiko.
  7. Gewinn und Stop-Loss in Punkten helfen, den Gewinn und Verlust des einzelnen Handels zu begrenzen.
  8. Ein Stopp in Punkten hilft, flüssige Gewinne zu erzielen und Abzüge zu reduzieren.

Strategische Risiken

  1. Die doppelte EMA reagiert langsamer auf Marktereignisse und verpasst kurzfristige Handelsmöglichkeiten.
  2. Der RSI ist anfällig für die Bildung falscher Todes-/Goldkreuzsignale, die für einen umsichtigen Handel mit anderen Indikatoren bestätigt werden müssen.
  3. Der festgelegte Anteil an Eigenkapital kann sich nicht an die unterschiedlichen Marktvolatilitäten anpassen, was zu einer unzureichenden Auslastung der Fonds führt.
  4. Festgelegte Stop-Loss-/Gewinnziele passen sich nicht an verschiedene Produkte und Marktbedingungen an, es besteht das Risiko eines vorzeitigen Ausstiegs.
  5. Ein Trailing-Stopp wird zu oft in unruhigen Märkten ausgelöst.

Gegenmaßnahmen:

  1. Verkürzung der MA-Perioden zur Verbesserung der Empfindlichkeit.
  2. Fügen Sie andere Indikatoren wie Lautstärke zu Filtersignalen hinzu.
  3. Dynamische Anpassung der Handelsgröße.
  4. Anpassung der Stop-Loss-/Gewinnziele an die Marktvolatilität.
  5. Entspannen Sie die hinteren Stop-Loss-Punkte entsprechend.

Optimierungsrichtlinien

  1. Versuche verschiedene Kombinationen von kurz-/langfristigen Doppel-EMA, um optimale Parameter zu finden.
  2. Test-RSI-Periodenparameter zur Verbesserung der Zuverlässigkeit des Todes-/Goldkreuzsignals.
  3. Fügen Sie Indikatoren wie Lautstärke, Bollinger Bands hinzu, um Signallärm zu filtern.
  4. Dynamische Anpassung der Handelsgröße und der Stop-Loss-/Gewinnziele anhand des täglichen Schlusskurses, der Volatilität usw.
  5. Optimierung der Trailing Stop-Mechanismen für verschiedene Produkte und Marktumgebungen.

Zusammenfassung

Die Strategie verfügt über klare mechanische Regeln und eine hohe Zuverlässigkeit insgesamt, geeignet für mittel- bis langfristige Trending-Produkte.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]DemaRSI V0', shorttitle='D', overlay=false, initial_capital=100000, currency=currency.USD)
src = input(close)
ma_length = input(21)
rsi_length = input(4)
rsi_smooth = input(4)

ma = ema(ema(src, ma_length), ma_length)
marsi = rsi(ma, rsi_length)
smooth = ema(marsi, rsi_smooth)
plot(title='M', series=marsi, color=black)
plot(title='S', series=smooth, color=red)
hline(0)
hline(50)
hline(100)

max_order_per_day = input(6)
// strategy.risk.max_intraday_filled_orders(max_order_per_day)
trade_size_as_equity_factor = input(false)
trade_size = input(type=float, defval=10000.00) * (trade_size_as_equity_factor ? strategy.equity : 1)
take_profit_in_points = input(100000)
stop_loss_in_points = input(100000)
trail_in_points = input(150)

USE_SESSION = input(true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_SESSION ? true : not na(time('1', trade_session))

buy_entry = istradingsession and crossover(marsi, smooth)
sel_entry = istradingsession and crossunder(marsi, smooth)

strategy.entry('buy', long=true, qty=1, when=buy_entry)
strategy.entry('sel', long=false, qty=1, when=sel_entry)

strategy.exit('buy.Exit', from_entry='buy', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.exit('sel.Exit', from_entry='sel', profit=take_profit_in_points, loss=stop_loss_in_points, trail_points=trail_in_points, trail_offset=trail_in_points)
strategy.close_all(when=not istradingsession)

Mehr