Basé sur la stratégie de trading de croisement de moyenne mobile double


Date de création: 2023-12-27 16:07:49 Dernière modification: 2023-12-27 16:07:49
Copier: 2 Nombre de clics: 681
1
Suivre
1623
Abonnés

Basé sur la stratégie de trading de croisement de moyenne mobile double

Aperçu

Cette stratégie est basée sur des croisements d’or et de mort sur des moyennes mobiles pour générer des signaux d’achat et de vente. Plus précisément, la stratégie utilise simultanément les moyennes mobiles à 5 jours (EMA) et les moyennes mobiles à 34 jours (DEMA). Un signal d’achat est généré lorsque l’EMA à court terme à 5 jours traverse la DEMA à long terme à 34 jours en bas et un signal de vente lorsque l’EMA à court terme à 5 jours traverse la DEMA à long terme à 34 jours en haut.

Principe de stratégie

  1. Calcul de l’EMA de 5 jours et de la DEMA de 34 jours
  2. Un signal d’achat est généré lorsque l’EMA à court terme de 5 jours traverse la DEMA à long terme de 34 jours par le bas
  3. Un signal de vente est généré lorsque l’EMA à court terme de 5 jours traverse la DEMA à long terme de 34 jours de haut en bas
  4. Vous pouvez choisir d’effectuer des transactions uniquement pendant une période donnée.
  5. Vous pouvez choisir d’utiliser ou non un stop-loss de suivi

Cette stratégie combine à la fois le suivi de la tendance et le croisement de la ligne de moyenne deux facteurs qui ont un effet stable. La moyenne mobile, en tant qu’indicateur de suivi de la tendance, permet d’identifier efficacement les tendances du marché. L’utilisation combinée de l’EMA et de la DEMA permet d’aplanir efficacement les données de prix pour générer des signaux de négociation.

Analyse des avantages

  1. La stratégie est simple, claire et facile à comprendre.
  2. L’utilisation d’une combinaison de moyennes mobiles prend en compte à la fois le jugement sur les tendances et le traitement en douceur des données sur les prix
  3. Le croisement des courts et des longs cours permet de donner des signaux de transaction à l’avance lors de grands retournements de marché
  4. La longueur de la ligne moyenne peut être optimisée par paramètres pour s’adapter à différentes variétés et périodes
  5. L’intégration de deux facteurs peut améliorer la stabilité de la stratégie

Analyse des risques

  1. En cas de tremblement de terre, il peut y avoir plus de faux signaux
  2. Une mauvaise longueur de ligne moyenne peut entraîner un retard de signal
  3. Des horaires de négociation inappropriés et des paramètres de stop-loss peuvent affecter les gains stratégiques

Il est possible de réduire ces risques en ajustant la longueur de la ligne moyenne, en optimisant le temps de négociation et en définissant des arrêts de perte raisonnables.

Direction d’optimisation

  1. Ajustement des paramètres de longueur moyenne pour les variétés et les périodes de transactions
  2. Optimiser les paramètres de temps de négociation pour négocier pendant les périodes les plus actives
  3. Comparer les avantages et les inconvénients des options de stop fixe et de stop suivi
  4. Tester l’impact des différentes méthodes de tarification sur les stratégies

Résumer

Cette stratégie génère un signal de transaction par la croisée de deux lignes homogènes, tout en combinant le suivi de la tendance et le traitement lisse des données. C’est une stratégie de suivi de la tendance simple et pratique.

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"}]
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)