Zweifelhafter gleitender Durchschnittswert

Schriftsteller:ChaoZhang, Datum: 2023-12-27 16:07:49
Tags:

img

Übersicht

Diese Strategie erzeugt Kauf- und Verkaufssignale basierend auf dem goldenen Kreuz und dem Todeskreuz von gleitenden Durchschnitten. Insbesondere verwendet sie einen 5-tägigen exponentiellen gleitenden Durchschnitt (EMA) und einen 34-tägigen doppelten exponentiellen gleitenden Durchschnitt (DEMA). Wenn die kurzfristige 5-tägige EMA über die langfristige 34-tägige DEMA überschreitet, wird ein Kaufsignal erzeugt. Wenn die kurzfristige 5-tägige EMA unter die langfristige 34-tägige DEMA überschreitet, wird ein Verkaufssignal erzeugt.

Strategie Logik

  1. Berechnen Sie den 5-Tage-EMA und den 34-Tage-DEMA
  2. Erzeugen Sie ein Kaufsignal, wenn der kurzfristige 5-tägige EMA über den langfristigen 34-tägigen DEMA geht
  3. Erzeugen Sie ein Verkaufssignal, wenn der kurzfristige 5-Tage-EMA unter den langfristigen 34-Tage-DEMA fällt
  4. Option, nur während bestimmter Handelssessions zu handeln
  5. Option zur Verwendung von Trailing Stop Loss

Diese Strategie kombiniert sowohl Trendfolgende als auch gleitende Durchschnitts-Crossover-Faktoren für eine stabile Performance. Gleitende Durchschnitte als Trendfolgende Indikator können Markttrends effektiv identifizieren; Die Kombination von EMA und DEMA kann die Preisdaten effektiv glätten, um Handelssignale zu generieren; Die Crossovers zwischen kurzfristigen und langfristigen gleitenden Durchschnitten können frühzeitige Handelssignale liefern, wenn sich ein großer Trend ändert.

Analyse der Vorteile

  1. Einfache und klare Strategielogik, leicht zu verstehen und umzusetzen
  2. Die Kombination von gleitenden Durchschnitten berücksichtigt sowohl die Beurteilung des Trends als auch die Glättung der Preisdaten
  3. Crossovers zwischen kurzfristigen und langfristigen gleitenden Durchschnitten können zu wichtigen Wendepunkten frühe Signale geben
  4. Parameter können optimiert werden, um gleitende Durchschnittslängen für verschiedene Produkte und Zeitrahmen anzupassen
  5. Die Integration zweier Faktoren kann die Strategie stabiler machen

Risikoanalyse

  1. Es können mehr falsche Signale auf verschiedenen Märkten auftreten.
  2. Unpassende gleitende Durchschnittslängen können zu Signalverzögerungen führen
  3. Fehlende Handelszeiten und Stopp-Loss-Einstellungen können die Rentabilität der Strategie beeinträchtigen

Diese Risiken können durch Anpassung der gleitenden Durchschnittslängen, Optimierung der Handelszeiten und Festlegung eines angemessenen Stop-Loss reduziert werden.

Optimierungsrichtlinien

  1. Anpassung der gleitenden Durchschnittslänge für verschiedene Handelsprodukte und Zeitrahmen
  2. Optimieren Sie die Parameter der Handelssitzung für den Handel während der aktivsten Perioden
  3. Vergleichen Sie den festen Stop-Loss mit dem anhaltenden Stop-Loss
  4. Prüfung der Auswirkungen verschiedener Preisquellenoptionen auf die Strategie

Schlussfolgerung

Diese Strategie erzeugt Handelssignale durch doppelte gleitende Durchschnitts-Crossovers, kombiniert mit Trend-Folgen und Daten-Glattungstechniken. Es ist eine einfache und praktische Trend-Folgen-Strategie. Durch Parameter-Tuning und Logikverfeinerung kann sie sich an verschiedene Produkte und Zeitrahmen anpassen, frühe Signale bei großen Trendänderungen liefern und falsche Signale vermeiden. Es lohnt sich zu empfehlen und anzuwenden.


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

Mehr