Esta estrategia determina la dirección de la tendencia basada en el cruce de las líneas EMA con diferentes períodos y genera señales largas y cortas en consecuencia. Utiliza principalmente dos promedios móviles: EMA de 10 días y EMA de 20 días. Cuando la EMA de 10 días cruza por debajo de la EMA de 20 días, se activa una señal corta. Cuando la EMA de 10 días cruza por encima de la EMA de 20 días, se activa una señal larga. Esta estrategia pertenece a las estrategias comerciales a mediano plazo.
La estrategia utiliza dos líneas EMA, incluyendo la EMA de 10 días y la EMA de 20 días. Las líneas EMA pueden reflejar la tendencia de los precios de manera efectiva. Cuando la línea EMA a corto plazo cruza por encima de la línea EMA a largo plazo, indica que la tendencia de precios está cambiando de caída a subida, que es una señal larga. Cuando la línea EMA a corto plazo cruza por debajo de la línea EMA a largo plazo, indica que la tendencia de precios está cambiando de alza a caída, que es una señal corta.
La estrategia también combina los valores máximos y mínimos de las fluctuaciones de precios para filtrar algunas señales comerciales. Las señales comerciales solo se activan después de que las fluctuaciones de precios alcancen un cierto grado. Esto puede filtrar algunas señales falsas hasta cierto punto.
Específicamente, al rastrear el momento en que se alcanzan los valores máximos y mínimos, la estrategia juzga si se ha formado una tendencia de precios.
La estrategia tiene las siguientes ventajas:
También hay algunos riesgos con esta estrategia:
Los riesgos pueden mitigarse mediante:
La estrategia se puede optimizar aún más en los siguientes aspectos:
En resumen, esta estrategia de cruce de EMA es una estrategia de seguimiento de tendencias simple y práctica. Utiliza líneas EMA para determinar la dirección de la tendencia principal, combinadas con el filtrado de la fluctuación de precios para tomar decisiones comerciales. Es fácil de entender y ajustar los parámetros, adaptable a la negociación a mediano plazo. Con nuevas optimizaciones, esto puede convertirse en una estrategia cuantitativa valiosa para mantener a largo plazo.
/*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)