Cette stratégie détermine la direction de la tendance en fonction du croisement des lignes EMA avec différentes périodes et génère des signaux longs et courts en conséquence. Elle utilise principalement deux moyennes mobiles - EMA à 10 jours et EMA à 20 jours. Lorsque l'EMA à 10 jours traverse en dessous de l'EMA à 20 jours, un signal court est déclenché. Lorsque l'EMA à 10 jours traverse au-dessus de l'EMA à 20 jours, un signal long est déclenché. Cette stratégie appartient aux stratégies de trading à moyen terme.
La stratégie utilise deux lignes EMA, y compris l'EMA de 10 jours et l'EMA de 20 jours. Les lignes EMA peuvent refléter efficacement la tendance des prix. Lorsque la ligne EMA à court terme traverse au-dessus de la ligne EMA à long terme, cela indique que la tendance des prix passe de la baisse à la hausse, ce qui est un signal long. Lorsque la ligne EMA à court terme traverse en dessous de la ligne EMA à long terme, cela indique que la tendance des prix passe de la hausse à la baisse, ce qui est un signal court.
La stratégie combine également les valeurs maximales et minimales des fluctuations de prix pour filtrer certains signaux de trading. Les signaux de trading ne sont déclenchés qu'après que les fluctuations de prix aient atteint un certain degré. Cela peut filtrer certains faux signaux dans une certaine mesure.
Plus précisément, en suivant le moment où les valeurs maximales et minimales sont atteintes, la stratégie juge si une tendance de prix s'est formée.
La stratégie présente les avantages suivants:
Cette stratégie comporte également certains risques:
Les risques peuvent être atténués par:
La stratégie peut être encore optimisée dans les aspects suivants:
En résumé, cette stratégie de croisement EMA est une stratégie simple et pratique de suivi des tendances. Elle utilise des lignes EMA pour déterminer la direction de la tendance principale, combinée à un filtrage des fluctuations de prix pour prendre des décisions de trading.
/*backtest start: 2024-01-15 00:00:00 end: 2024-01-22 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("PierceMAStrat", overlay=true) lenMA0 = input(title="Length 0",defval=2) lenMA1=input(title="Length 1",defval=10) lenMA2=input(title="Length 2", defval=20) lenMA3 = input(title = "Length3", defval =50) emaLen0 = ema(close, lenMA0) emaLen1 = ema(close, lenMA1) emaLen2 = ema(close, lenMA2) emaLen3 = ema(close, lenMA3) ascent = if emaLen1[1] < emaLen1[0] true else false descent = if emaLen1[1] > emaLen1[0] true else false TimeSinceAscensionStart = if ascent == true barssince(descent == true) else 0 StartUp = if TimeSinceAscensionStart < 1 true else false StartDown = if TimeSinceAscensionStart < 1 false else true AscentBarCounter = barssince(StartUp == true) DescentBarCounter = barssince(StartDown == true) MaxAscent = if AscentBarCounter[1] > AscentBarCounter[0] and AscentBarCounter[1] > 10 true else false MaxDescent = if DescentBarCounter[1] > DescentBarCounter[0] and DescentBarCounter[1] > 5 true else false longCond = if crossover(emaLen1, emaLen2) and barssince(MaxDescent == true) > 3 true else false shortCond = if crossunder(emaLen1, emaLen2) and barssince(MaxAscent == true) > 3 true else false //longCond = (crossover(emaLen1, emaLen2) and (emaLen2 > emaLen3)) //shortCond = crossunder(emaLen1, emaLen2) and (emaLen2 < emaLen3) if longCond == true strategy.entry("LONG", strategy.long) if shortCond == true strategy.entry("SHORT", strategy.short) plotshape(series=MaxAscent, title="MaximaReached", style=shape.triangledown, location=location.abovebar, color=green, text="MaximaReached", size=size.small) plotshape(series=MaxDescent, title="MinimaReached", style=shape.triangleup, location=location.belowbar, color=red, text="MinimaReached", size=size.small) //plotshape(series=StartUp, title="StartUp", style=shape.triangleup, location=location.belowbar, color=red, text="StartUp", size=size.tiny) //plotshape(series=StartDown, title="StartDown", style=shape.triangleup, location=location.belowbar, color=green, text="StartDown", size=size.tiny) //plotshape(series=(crossover(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=green, text="GBXO", size=size.small) //plotshape(series=(crossover(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=orange, text="RBXO", size=size.small) //plotshape(series=(crossover(emaLen1, emaLen2)), title="GRXOVER", style=shape.triangledown, location=location.abovebar, color=teal, text="GRXO", size=size.small) //plotshape(series=(crossunder(emaLen1, emaLen2)), title="GRXUNDER", style=shape.triangledown, location=location.abovebar, color=purple, text="GRXU", size=size.small) //plotshape(series=(crossunder(emaLen1, emaLen3)), title="GBXOVER", style=shape.triangleup, location=location.belowbar, color=yellow, text="GBXU", size=size.small) //plotshape(series=(crossunder(emaLen2, emaLen3)), title="RBXOVER", style=shape.triangledown, location=location.abovebar, color=yellow, text="RBXU", size=size.small) //plotshape(convergence, color=lime, style=shape.arrowup, text="CROSS") plot(emaLen1, color=green, transp=0, linewidth=2) plot(emaLen2, color=red, transp=30, linewidth=2) plot(emaLen3, color=blue, transp=30, linewidth=2)