Doppelte EMA-Goldene Kreuz-Durchbruchstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-20 16:34:58
Tags:

img

Übersicht

Diese Strategie ist eine Trendfolgestrategie, die auf Goldenkreuz- und Todeskreuzoperationen der 5-minütigen und 34-minütigen exponentiellen gleitenden Durchschnittslinien (EMA) basiert. Sie geht lang, wenn die schnelle EMA die langsame EMA von unten überschreitet, und geht kurz, wenn die schnelle EMA die langsame EMA von oben überschreitet.

Strategieprinzip

  1. Der schnelle EMA5 und der langsame EMA34 bilden Handelssignale.
  2. Wenn der EMA5 den EMA34 überschreitet, ist dies ein goldenes Kreuz, das anzeigt, dass der kurzfristige Trend besser ist als der mittelfristige Trend, also halten Sie eine Longposition.
  3. Wenn der EMA5 unter den EMA34 fällt, ist dies ein Todeskreuz, was darauf hindeutet, dass der kurzfristige Trend schlechter ist als der mittelfristige Trend.
  4. Setzen Sie Stop-Profit und Stop-Loss, um Gewinne zu erzielen und Risiken zu kontrollieren.

Analyse der Vorteile

  1. Die doppelte EMA filtert falsche Ausbrüche und verhindert, dass man gefangen wird.
  2. Die mittelfristigen Trends zu verfolgen erhöht die Gewinnchancen.
  3. Die Einstellung von Stop-Profit und Stop-Loss kontrolliert die Risiken wirksam.

Risikoanalyse

  1. Die doppelte EMA hat eine Nachlaufwirkung und kann kurzfristige Handelsmöglichkeiten verpassen.
  2. Eine zu große Stop-Loss-Einstellung erhöht das Verlustrisiko.
  3. Wenn man den Stop-Profit zu eng festlegt, verliert man Chancen, den Gewinn zu maximieren.

Optimierungsrichtlinien

  1. Optimieren Sie die EMA-Parameter, um die beste Parameterkombination zu finden.
  2. Optimieren Sie Stop-Profit- und Stop-Loss-Punkte, um größere Gewinne zu erzielen.
  3. Hinzufügen anderer Indikatoren wie MACD, KDJ, um Signale zu filtern und die Genauigkeit zu verbessern.

Zusammenfassung

Diese Strategie erzeugt Handelssignale aus goldenen Kreuzungen und Todeskreuzungen der doppelten EMA-Linien und setzt Stop-Profit und Stop-Loss fest, um Risiken zu kontrollieren.


/*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"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]MicuRobert EMA cross V2', 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?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