Una estrategia de cruce de impulso basada en una media móvil exponencial

El autor:¿ Qué pasa?, Fecha: 2024-01-23 14:18:26
Las etiquetas:

img

Resumen general

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.

Principios de estrategia

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.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de líneas EMA para determinar la dirección de la tendencia puede rastrear los movimientos del mercado de manera efectiva
  2. La combinación de líneas EMA de diferentes períodos puede captar oportunidades de negociación a medio plazo
  3. El filtrado de señales por valores extremos puede eliminar algo de ruido y evitar perder oportunidades comerciales
  4. La lógica es simple y clara, fácil de entender y modificar
  5. Los parámetros pueden ajustarse para diferentes productos y preferencias comerciales, mostrando una gran adaptabilidad

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. Las líneas de la EMA tienen un efecto de retraso y pueden no dar lugar a inversiones de tendencia a corto plazo.
  2. El filtro de ruido es imperfecto, pueden ocurrir algunos intercambios incorrectos
  3. Los parámetros deben ajustarse adecuadamente para adaptarse a los diferentes entornos del mercado

Los riesgos pueden mitigarse mediante:

  1. Añadir otros indicadores para la confirmación de la señal para evitar problemas de retraso en la línea de la EMA
  2. Optimización de las condiciones de filtración de valores extremos para mejorar la fiabilidad de la señal
  3. Ajuste de parámetros basados en los resultados de las pruebas de retroceso para optimizar la estrategia

Direcciones para mejorar

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Incorporar otros indicadores técnicos como MACD y KD para mejorar la precisión de la señal
  2. Optimizar los parámetros de la línea EMA para adaptarse mejor a productos específicos
  3. Refinar los parámetros de valor extremo para juzgar mejor las fluctuaciones de precios
  4. Añadir mecanismos de stop loss para controlar la pérdida máxima por operación
  5. Prueba de la estrategia en diferentes productos para evaluar la adaptabilidad

Resumen de las actividades

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)



Más.