Le double EMA Crossover est un système de trading basé sur deux moyennes mobiles exponentielles (EMA). Il utilise deux EMA avec des périodes différentes pour déterminer la direction de la tendance actuelle et générer des signaux de trading en conséquence.
Le noyau de ce système repose sur deux EMA, une EMA plus rapide et une EMA plus lente. Lorsque l'EMA rapide est au-dessus de l'EMA lente, il est considéré comme haussier. Lorsque l'EMA rapide est en dessous de l'EMA lente, il est considéré comme baissier.
En fonction de la relation entre les prix et les deux EMA, les barres peuvent être classées en différentes zones de négociation:
Lorsque l'EMA rapide est au-dessus de l'EMA lente et que le prix est au-dessus de l'EMA rapide (G1), il s'agit d'une zone d'achat forte, une position longue peut être prise ici.
Lorsque l'EMA rapide est inférieure à l'EMA lente et que le prix est inférieur à l'EMA rapide (R1), il s'agit d'une zone de vente forte, une position courte peut être prise ici.
Lorsque les deux EMA se croisent, les zones d'avertissement (jaune) et de transition (orange) sont déterminées en fonction de la relation des prix avec les deux EMA.
Les signaux de trading sont générés lorsque le prix se déplace à travers différentes zones. Dans les zones fortes G1 et R1, les signaux peuvent être pris directement. Dans les zones d'avertissement et de transition, une confirmation supplémentaire de l'indicateur est requise.
Les lectures de survente et de surachat du StochRSI peuvent fournir des signaux d'achat et de vente supplémentaires.
Une logique simple et claire, facile à comprendre et à mettre en œuvre
Capture efficacement les tendances à moyen et long terme
Distingue les zones fortes des zones d'alerte/de transition, produisant des signaux commerciaux fiables
L'inclusion de StochRSI améliore encore le calendrier d'entrée et de sortie
En tant que système purement de suivi de tendance, les performances peuvent être affectées sur les marchés qui ne sont pas en tendance
Des paramètres de période EMA inappropriés peuvent provoquer de faux signaux
Les zones d'alerte et de transition comportent des risques commerciaux plus élevés et doivent être traitées avec prudence
L'absence de stop loss peut entraîner des pertes accentuées
Les risques peuvent être réduits par:
Sélection d'instruments présentant une forte tendance et interruption de la négociation lorsque la tendance est faible
Optimisation des périodes EMA pour minimiser les faux signaux
Introduction d'indicateurs supplémentaires de confirmation dans les zones d'alerte ou de transition
Mise en œuvre d'un stop loss pour contrôler les pertes par transaction
Le système peut être encore amélioré dans les domaines suivants:
Incorporer plus d'indicateurs comme MACD, KDJ pour la confirmation du signal
Ajouter des filtres tels que l'expansion du volume dans les zones de négociation pour améliorer le taux de réussite des échanges
Ajustez dynamiquement les périodes EMA en fonction des conditions du marché pour des paramètres optimisés
Mettre en œuvre des stratégies de stop loss pour sortir des transactions à certains pourcentages de perte
Optimiser la taille des positions et la gestion des fonds
Testez et ajustez les paramètres de différents instruments pour trouver les meilleures configurations
En introduisant plus de confirmation de signal, d'optimisation des paramètres dynamiques, d'arrêt de perte et d'une bonne gestion de l'argent, la robustesse du système peut être améliorée et les risques réduits pour de meilleurs résultats.
Le double EMA Crossover est un système de suivi des tendances basé sur la comparaison de deux EMA. Il identifie différentes zones de trading basées sur la relation des prix avec les EMA pour déterminer la direction de la tendance et générer des signaux de trading.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-25 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Vvaz_ //base-on CDC ActionZone By Piriya a simple 2EMA and is most suitable for use with medium volatility market //@version=4 strategy(title="Vin's Playzone" ,shorttitle="VPz", overlay=true, margin_long=4, margin_short=2) //variable srcf = input(title="Source",type=input.source,defval=close) tffix = input(title="Fixed Timeframe",type=input.bool,defval=true) tfn = input(title="Timeframe in",type=input.resolution,defval="D") ema1 = input(title="Fast EMA",type=input.integer,defval=12) ema2 = input(title="Slow EMA",type=input.integer,defval=26) ema3 = input(title="EMA 100",type=input.bool,defval=true) smooter =input(title="Smoothing period (1 = no smoothing)",type=input.integer,defval=2) fillbar =input(title="Fill Bar Color",type=input.bool,defval=true) emasw = input(title="Show EMA",type=input.bool,defval=true) bssw = input(title="Show Buy-Sell signal",type=input.bool,defval=true) plotmm = input(title="Show Buy-Sell Momentum",type=input.bool,defval=true) plotmmsm = input(title="RSI Smoothing",type=input.integer,defval=0,minval=0,maxval=2) //math xcross =ema(srcf,smooter) efast = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema1), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema1) eslow = tffix ? ema(security(syminfo.tickerid,tfn,ema(srcf,ema2), gaps = barmerge.gaps_off,lookahead = barmerge.lookahead_on),smooter) :ema(xcross,ema2) ema3x = ema(xcross,100) //Zone Bull = efast > eslow Bear = efast < eslow G1 = Bull and xcross > efast //buy G2 = Bear and xcross > efast and xcross > eslow //pre-buy1 G3 = Bear and xcross > efast and xcross < eslow //pre-buy2 R1 = Bear and xcross < efast //sell R2 = Bull and xcross < efast and xcross < eslow //pre-sell1 R3 = Bull and xcross < efast and xcross > eslow //pre-sell2 //color bcl = G1 ? color.green : G2 ? color.yellow : G3 ? color.orange :R1 ? color.red :R2 ? color.orange : R3 ? color.yellow : color.black barcolor(color=fillbar ? bcl : na ) //plots line1 = plot(ema3 ? ema3x : na ,"EMA100",color=color.white) line2 = plot(emasw ? efast : na ,"Fast EMA",color=color.green) line3 = plot(emasw ? eslow : na ,"Slow EMA",color=color.red) fillcl = Bull ? color.green : Bear ? color.red : color.black fill(line2,line3,fillcl) //actions buywhen = G1 and G1[1]==0 sellwhen = R1 and R1[1]==0 bullish = barssince(buywhen) < barssince(sellwhen) bearish = barssince(sellwhen) < barssince(buywhen) buy = bearish[1] and buywhen sell = bullish[1] and sellwhen bullbearcl = bullish ? color.green : bearish ? color.red : color.black //plot trend plotshape(bssw ? buy : na ,style=shape.arrowup,title="BUY",location=location.belowbar,color=color.green) plotshape( bssw ? sell : na ,style=shape.arrowdown ,title="Sell",location=location.abovebar,color=color.red) // Momentum Signal using StochRSI smoothK = input(5,"StochRSI smooth K",type=input.integer,minval=1) smoothD = input(4,"StochRSI smooth D",type=input.integer,minval=1) RSIlen = input(14,"RSI length",type=input.integer,minval=1) STOlen = input(14,"Stochastic length",type=input.integer,minval=1) SRsrc = input(close,"Source for StochasticRSI",type=input.source) OSlel = input(20,"Oversold Threshold",type=input.float,minval=0.00) OBlel = input(80,"Oversold Threshold",type=input.float,minval=0.00) rsil = rsi(SRsrc,RSIlen) K = sma(stoch(rsil,rsil,rsil,STOlen),smoothK) D = sma(K,smoothD) buymore = iff( bullish ,iff(D < OSlel and crossover(K,D), 2, iff(D > OSlel and crossover(K,D), 1,0)),0) sellmore = iff( bearish,iff(D > OBlel and crossunder(K,D), 2, iff(D < OBlel and crossunder(K,D), 1,0)),0) //plot momentum plotshape(plotmm ? buymore > plotmmsm ? buymore : na : na ,"Buy More!" ,style=shape.triangleup,location=location.belowbar,color=color.green) plotshape(plotmm ? sellmore > plotmmsm ? sellmore : na : na ,"Sell More!" ,style=shape.triangledown,location=location.abovebar,color=color.red) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2009, title = "From Year", minval = 2009) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" //stratgy excuter strategy.entry("Long",true,when=window() and buy or buymore) strategy.close("Long",when=window() and sell or sellmore,comment="TP Long") strategy.entry("Short",false,when=window() and sell or sellmore) strategy.close("Short",when=window() and buy or buymore,comment="TP Short")