Stratégie de cassure de la double EMA Golden Cross


Date de création: 2023-12-20 16:34:58 Dernière modification: 2023-12-20 16:34:58
Copier: 1 Nombre de clics: 719
1
Suivre
1621
Abonnés

Stratégie de cassure de la double EMA Golden Cross

Aperçu

Cette stratégie est une stratégie de suivi de tendance basée sur les moyennes mobiles indicielles à 5 minutes et 34 minutes (EMA) pour effectuer des opérations de croisement d’or et de croisement de mort. Lorsque la ligne rapide traverse la ligne lente par le bas, ouvrez une position longue; lorsque la ligne rapide traverse la ligne lente par le haut et le bas, ouvrez une position vide.

Principe de stratégie

  1. La ligne rapide EMA5 et la ligne lente EMA34 constituent le signal de négociation. L’EMA5 réagit aux changements récents de prix, l’EMA34 aux changements intermédiaires de prix.
  2. Lorsque la ligne rapide traverse la ligne lente, elle est croisée pour l’or, ce qui indique que le cours à court terme est meilleur que le cours à moyen terme, et que vous avez plus de titres.
  3. Lorsque la ligne rapide passe sous la ligne lente, la croix de la mort indique que la situation à court terme est pire que la situation à moyen terme, et que vous avez un billet d’avion.
  4. Le stop loss est utilisé pour bloquer les bénéfices et contrôler les risques.

Analyse des avantages

  1. Le filtre double EMA est utilisé pour filtrer les faux-débordements et éviter les pièges.
  2. Suivre les tendances à moyen terme et améliorer les opportunités de profit
  3. Le réglage de l’arrêt de la perte d’arrêt permet de contrôler efficacement le risque.

Analyse des risques

  1. Les doubles EMA sont rétrogrades et risquent de manquer des opportunités de négociation à court terme.
  2. Le risque d’augmentation des pertes est trop élevé.
  3. Les points d’arrêt sont trop petits et ne permettent pas de maximiser les gains.

Direction d’optimisation

  1. Optimiser les paramètres EMA pour trouver la meilleure combinaison de paramètres
  2. Optimiser le point de rupture de l’arrêt de la bride, pour la fixation d’une bride plus douce.
  3. L’ajout de filtres pour d’autres indicateurs, tels que MACD, KDJ, etc., améliore la précision du signal.

Résumer

Cette stratégie génère des signaux de négociation par des doubles croisements d’or et de mort sur les moyennes mobiles EMA, et met en place des stop-loss pour contrôler le risque. C’est une stratégie de suivi de tendance à moyen terme simple et efficace. L’optimisation des paramètres de stop-loss et l’introduction de signaux de filtrage sur d’autres indicateurs peuvent renforcer encore la rentabilité stable de la stratégie.

Code source de la stratégie
/*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)