Basierend auf der Handelsstrategie des doppelten gleitenden Durchschnitts


Erstellungsdatum: 2023-12-27 16:07:49 zuletzt geändert: 2023-12-27 16:07:49
Kopie: 2 Klicks: 681
1
konzentrieren Sie sich auf
1623
Anhänger

Basierend auf der Handelsstrategie des doppelten gleitenden Durchschnitts

Überblick

Die Strategie basiert auf einem Goldkreuz und einem Todkreuz eines gleitenden Durchschnitts, um ein Kauf- und Verkaufssignal zu erzeugen. Insbesondere verwendet die Strategie gleichzeitig einen 5-Tage-Indikator-Gleitenden Durchschnitt ((EMA) und einen 34-Tage-Doppel-Indikator-Gleitenden Durchschnitt ((DEMA)). Ein Kaufsignal wird erzeugt, wenn ein kurzfristiger 5-Tage-EMA ein langes 34-Tage-DEMA von unten durchquert; ein Verkaufsignal wird erzeugt, wenn ein kurzfristiger 5-Tage-EMA ein langes 34-Tage-DEMA von oben durchquert.

Strategieprinzip

  1. Berechnung der 5-Tage-EMA und der 34-Tage-DEMA
  2. Wenn der kurzfristige 5-Tage-EMA den langfristigen 34-Tage-DEMA von unten durchquert, wird ein Kaufsignal erzeugt
  3. Wenn ein kurzfristiger 5-Tage-EMA einen langfristigen 34-Tage-DEMA von oben nach unten durchquert, wird ein Verkaufssignal erzeugt
  4. Die Option, nur in einem bestimmten Zeitraum zu handeln
  5. Sie können die Verwendung von Tracking Stop Loss auswählen

Die Strategie kombiniert die beiden Faktoren Trendverfolgung und Durchschnittslinie-Kreuzung, um eine stabile Wirkung zu erzielen. Der Moving Average als Trendverfolgungsindikator kann die Markttrends effektiv identifizieren. Die Kombination von EMA und DEMA kann die Preisdaten effektiv ausgleichen, um Handelssignale zu erzeugen.

Analyse der Stärken

  1. Die Strategie ist einfach, klar und verständlich
  2. Die Verwendung von Moving Average-Kombinationen, die sowohl eine Trendbeurteilung als auch eine glatte Verarbeitung der Preisdaten berücksichtigen
  3. Kurz- und langfristige Durchschnittslinien, die an wichtigen Marktwendepunkten vorzeitig ein Handelssignal geben
  4. Die Länge der Mittellinie kann durch Parameter optimiert werden, um sie an verschiedene Sorten und Perioden anzupassen
  5. Die Integration von zwei Faktoren kann die Strategie-Stabilität verbessern

Risikoanalyse

  1. Bei Erdbeben kann es zu mehr Fehlsignalen kommen
  2. Fehlende Durchschnittslänge kann zu Signallager führen
  3. Unzureichende Handelszeiten und Stop-Loss-Einstellungen können die strategischen Erträge beeinträchtigen

Diese Risiken können durch Anpassung der Länge der Durchschnittslinie, Optimierung der Handelszeit und der Einrichtung eines angemessenen Stop-Loss-Systems verringert werden.

Optimierungsrichtung

  1. Anpassung der Parameter für die Länge der Mittellinie an die verschiedenen Handelsarten und -zyklen
  2. Optimierung der Handelszeitparameter, um in den hauptsächlich aktiven Zeiträumen zu handeln
  3. Vergleiche der Vor- und Nachteile von Fixed Stop und Tracking Stop
  4. Test der Auswirkungen von unterschiedlichen Pricing-Methoden auf Strategien

Zusammenfassen

Die Strategie erzeugt Handelssignale durch die doppelte Gleichschleife, kombiniert mit Trendverfolgung und Datenbearbeitung, und ist eine einfache und praktische Trendverfolgungsstrategie. Durch Parameterabschaltung und Regelmäßigkeitsoptimierung kann sie an verschiedene Sorten und Handelszyklen angepasst werden, um bei großen Trendänderungen vorzeitig Handelssignale zu geben und falsche Signale zu vermeiden.

Strategiequellcode
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",false]]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', shorttitle='S', overlay=true)
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
USE_TRAILINGSTOP = input(title='Use Trailing Stop?', type=bool, defval=true)
trade_session = input(title='Trade Session:',  defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?gray:na)
trade_size = input(title='Trade Size:', type=float, defval=1)
tp = input(title='Take profit in pips:', type=float, defval=55.0) * (syminfo.mintick*10)
sl = input(title='Stop loss in pips:', type=float, defval=22.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:', defval=5)
ma_length01 = input(title='DEMA length:',  defval=34)
price = input(title='Price source:', defval=open)

//  ||--- NO LAG EMA, Credit LazyBear:  ---||
f_LB_zlema(_src, _length)=>
    _ema1=ema(_src, _length)
    _ema2=ema(_ema1, _length)
    _d=_ema1-_ema2
    _zlema=_ema1+_d
//  ||-------------------------------------||

ma00 = f_LB_zlema(price, ma_length00)
ma01 = f_LB_zlema(price, ma_length01)
plot(title='M0', series=ma00, color=black)
plot(title='M1', series=ma01, color=black)

isnewbuy = change(strategy.position_size)>0 and change(strategy.opentrades)>0
isnewsel = change(strategy.position_size)<0 and change(strategy.opentrades)>0

buy_entry_price = isnewbuy ? price : buy_entry_price[1]
sel_entry_price = isnewsel ? price : sel_entry_price[1]
plot(title='BE', series=buy_entry_price, style=circles, color=strategy.position_size <= 0 ? na : aqua)
plot(title='SE', series=sel_entry_price, style=circles, color=strategy.position_size >= 0 ? na : aqua)
buy_appex = na(buy_appex[1]) ? price : isnewbuy ? high : high >= buy_appex[1] ? high : buy_appex[1]
sel_appex = na(sel_appex[1]) ? price : isnewsel ? low : low <= sel_appex[1] ? low : sel_appex[1]
plot(title='BA', series=buy_appex, style=circles, color=strategy.position_size <= 0 ? na : teal)
plot(title='SA', series=sel_appex, style=circles, color=strategy.position_size >= 0 ? na : teal)
buy_ts = buy_appex - sl
sel_ts = sel_appex + sl
plot(title='Bts', series=buy_ts, style=circles, color=strategy.position_size <= 0 ? na : red)
plot(title='Sts', series=sel_ts, style=circles, color=strategy.position_size >= 0 ? na : red)

buy_cond1 = crossover(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
buy_cond0 = crossover(price, ma00) and ma00 > ma01 and (USE_TRADESESSION ? istradingsession : true)
buy_entry = buy_cond1 or buy_cond0
buy_close = (not USE_TRAILINGSTOP ? low <= buy_entry_price - sl: low <= buy_ts) or high>=buy_entry_price+tp//high>=last_traded_price + tp or low<=last_traded_price - sl //high >= hh or 
sel_cond1 = crossunder(ma00, ma01) and (USE_TRADESESSION ? istradingsession : true)
sel_cond0 = crossunder(price, ma00) and ma00 < ma01 and (USE_TRADESESSION ? istradingsession : true)
sel_entry = sel_cond1 or sel_cond0
sel_close = (not USE_TRAILINGSTOP ? high >= sel_entry_price + sl : high >= sel_ts) or low<=sel_entry_price-tp//low<=last_traded_price - tp or high>=last_traded_price + sl //low <= ll or 

strategy.entry('buy', long=strategy.long, qty=trade_size, comment='buy', when=buy_entry)
strategy.close('buy', when=buy_close)
strategy.entry('sell', long=strategy.short, qty=trade_size, comment='sell', when=sel_entry)
strategy.close('sell', when=sel_close)