Strategie für eine doppelte EMA-Überschreitende Entwicklung

Schriftsteller:ChaoZhang, Datum: 29.12.2023
Tags:

img

Übersicht

Diese Strategie verwendet das goldene Kreuz und das Todeskreuz von doppelten EMA-Indikatoren, um die aktuelle Trendrichtung zu bestimmen, und kombiniert den RSI-Indikator, um zu vermeiden, dass Kauf- und Verkaufsmöglichkeiten verpasst werden.

Strategieprinzip

  1. Berechnen Sie die 10- und 20-Perioden-EMA-Linien mit den Bezeichnungen ma00 bzw. ma01.
  2. Ein Kaufsignal wird erzeugt, wenn ma00 über ma01 steigt.
  3. Ein Verkaufssignal wird erzeugt, wenn ma00 unter ma01 fällt.
  4. Gleichzeitig wird, wenn der Preis über ma00 steigt, wenn ma00 über ma01 liegt, auch ein Kaufsignal generiert.
  5. Wenn der Preis unter ma00 fällt, wenn ma00 unter ma01 fällt, wird ebenfalls ein Verkaufssignal erzeugt.
  6. Durch eine solche doppelte Validierung kann vermieden werden, dass einige Kauf- und Verkaufspunkte fehlen.
  7. Festlegen von Stop-Loss- und Take-Profit-Preisen zur Risikokontrolle

Analyse der Vorteile

  1. Die Verwendung einer doppelten EMA zur Bestimmung kann falsche Ausbrüche effektiv filtern
  2. Doppelbedingte Validierung vermeidet fehlende Aufträge
  3. Die Einstellung von Stop-Loss und Take-Profit ist für das Risikomanagement von Vorteil

Risikoanalyse

  1. Die doppelte EMA-Strategie gehört zur Trend-Tracking-Strategie. Häufige Käufe und Verkäufe in seitlichen Märkten können leicht einen Stop-Loss erreichen
  2. Es kann keine genauen Trendumkehrpunkte ermitteln, die zu Verlusten führen können.
  3. Falsche Einstellungen des Stop-Loss-Punkts können Verluste verstärken

Optimierungsrichtlinien

  1. EMA-Zyklen können ordnungsgemäß optimiert werden, um die beste Parameterkombination zu finden
  2. Weitere Indikatoren können hinzugefügt werden, um die Stabilität der Strategie zu verbessern
  3. Dynamische Stopps können eingestellt werden, um Stopp-Loss-Punkte in Echtzeit anhand von Marktschwankungen anzupassen

/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title='[STRATEGY][RS]MicuRobert EMA cross V1', shorttitle='S', overlay=true, pyramiding=0, initial_capital=100000)
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?color.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=11.0) * (syminfo.mintick*10)
ma_length00 = input(title='EMA length:',  defval=10)
ma_length01 = input(title='DEMA length:',  defval=20)
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 ? false : 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 ? false : 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)

//What i add .!
pos = iff(ma01 < ma00 , 1,
	    iff(ma01 > ma00 , -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue)
plot(ma00, color=red, title="MA")
plot(ma01, color=blue, title="EMA")

Mehr