
Esta estrategia se basa en el cruce de las líneas medias de EMA de diferentes períodos para determinar la dirección de la tendencia y, en consecuencia, para establecer señales de compras más cortas. Se utilizan principalmente 2 líneas medias, las líneas de 10 días y 20 días, respectivamente.
La estrategia utiliza dos líneas medias de EMA, incluidas las líneas de 10 y 20 días. La línea media de EMA refleja muy bien la dirección de la tendencia de los precios. Cuando la línea de EMA a corto plazo cruza la línea de EMA a largo plazo de abajo hacia arriba, indica que el movimiento de los precios se ha movido hacia arriba y hacia abajo, y se considera una señal de falta.
Esta estrategia combina al mismo tiempo los valores máximos y mínimos de la oscilación para filtrar una parte de la señal de negociación. La señal de negociación se emite solo después de que la oscilación de los precios alcanza un cierto alcance. Esto puede filtrar hasta cierto punto algunas señales falsas.
En concreto, la estrategia determina si se ha formado una tendencia de precios al rastrear la llegada de los máximos y mínimos de los precios. La verdadera señal de negociación solo se emite después de que los máximos o mínimos alcanzan un cierto tiempo.
La estrategia tiene las siguientes ventajas:
La estrategia también tiene sus riesgos:
El riesgo puede reducirse de la siguiente manera:
La estrategia puede ser optimizada aún más en las siguientes direcciones:
La estrategia de cruce de EMA es una estrategia de seguimiento de tendencias sencilla y práctica en su conjunto. Utiliza la media EMA para determinar la dirección de la tendencia general y, a continuación, combina las señales de filtración de la fluctuación de los precios para formar decisiones de negociación. La estrategia es fácil de entender y ajustar los parámetros y puede adaptarse a la negociación de líneas cortas y medias.
/*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)