Stratégie de percée à double EMA Golden Cross

Auteur:ChaoZhang est là., Date: 2023-12-20 16h34 et 58 min
Les étiquettes:

img

Résumé

Cette stratégie est une stratégie de tendance basée sur les opérations de croix dorée et de croix de mort des lignes des moyennes mobiles exponentielles (EMA) de 5 minutes et 34 minutes. Elle va long lorsque l'EMA rapide traverse l'EMA lente de bas en bas, et court lorsque l'EMA rapide traverse l'EMA lente de haut en bas. Elle définit également le stop profit et le stop loss pour contrôler les risques.

Principe de stratégie

  1. L'EMA5 rapide et l'EMA34 lent forment des signaux de négociation.
  2. Lorsque l'EMA5 franchit l'EMA34, il s'agit d'une croix dorée, ce qui indique que la tendance à court terme est meilleure que la tendance à moyen terme.
  3. Lorsque l'EMA5 dépasse l'EMA34, il s'agit d'une croix de la mort, ce qui indique que la tendance à court terme est pire que la tendance à moyen terme.
  4. Définir le stop profit et le stop loss pour verrouiller les bénéfices et contrôler les risques.

Analyse des avantages

  1. Utiliser une double EMA filtre les fausses fuites et évite d'être pris au piège.
  2. Suivre les tendances à moyen terme augmente les possibilités de profit.
  3. La mise en place d'un stop profit et d'un stop loss permet de contrôler efficacement les risques.

Analyse des risques

  1. La double EMA a un effet de retard et peut manquer des opportunités de négociation à court terme.
  2. Un stop-loss trop large augmente les risques de perte.
  3. Un stop profit trop serré fait perdre les opportunités de maximiser les profits.

Directions d'optimisation

  1. Optimiser les paramètres EMA pour trouver la meilleure combinaison de paramètres.
  2. Optimisez les points d'arrêt des profits et des pertes pour obtenir des profits plus élevés.
  3. Ajouter d'autres indicateurs comme MACD, KDJ pour filtrer les signaux et améliorer la précision.

Résumé

Cette stratégie génère des signaux de trading à partir de croix dorées et de croix de mort des lignes EMA doubles, et définit un stop profit et un stop loss pour contrôler les risques.


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

Plus de