Estrategia de seguimiento de tendencia de cruce de pendiente de media móvil


Fecha de creación: 2023-10-17 17:02:30 Última modificación: 2023-10-17 17:02:30
Copiar: 0 Número de Visitas: 848
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia de cruce de pendiente de media móvil

Descripción general

La estrategia utiliza el cruce de la pendiente de dos EMA de diferentes longitudes para generar una señal de seguimiento de tendencia. Por defecto, se usan EMA de 130 y 400 longitudes, y la combinación de estos dos parámetros funciona bien.

Hacer más cuando la línea rápida EMA se inclina por encima de la línea lenta EMA y el precio es superior a 200 ciclos de EMA; hacer vacío cuando la línea rápida EMA se inclina por debajo de la línea lenta EMA y el precio es inferior a 200 ciclos de EMA.

La dirección de la pendiente es opuesta a la de la cruz.

Esta estrategia funciona mejor con Bitcoin y altcoins con alta liquidez y valor de mercado, pero también funciona bien con activos con mayor volatilidad, especialmente cuando estos activos suelen estar en tendencia.

El marco de tiempo ideal es de 4 horas.

También se incluye un filtro de fluctuación opcional, que abre una posición solo cuando la diferencia entre las dos pendientes es mayor que un umbral específico, con el fin de evitar que el ruido de la oscilación horizontal del precio sea mucho mayor que la señal.

El resultado es increíble, ¡disfruta!

Principio de estrategia

El núcleo de la estrategia es comparar la inclinación de dos EMA de diferentes longitudes.

Primero se calculan los EMA de longitudes 130 y 400, luego se calculan sus respectivas pendientes, y luego se obtiene una curva de pendiente suavizada para los EMA de longitudes 3 de sus respectivas pendientes.

Cuando la línea rápida atraviesa la línea lenta por encima de la pendiente EMA se genera una señal de compra; cuando la línea rápida atraviesa la pendiente EMA por debajo de la pendiente EMA se genera una señal de venta.

Para filtrar las oscilaciones, se puede elegir un EMA de 200 ciclos como filtro de tendencia, y solo se considera una señal de más si el precio es superior a ese EMA, y una señal de menos si es inferior.

Además, también se puede elegir un filtro de fluctuación que genera una señal solo cuando la diferencia entre las dos pendientes es mayor que el umbral predeterminado, para filtrar el cruce de pendientes pero la fluctuación insuficiente.

Cuando la inclinación se cruza de forma inversa, se elimina la posición y se detiene la pérdida.

Análisis de las ventajas

  1. El uso de la cruz de pendiente genera señales que permiten un seguimiento eficaz de las tendencias.

  2. Ajuste de la combinación de parámetros del ciclo EMA para adaptarse a diferentes entornos del mercado

  3. Los filtros de tendencias evitan ser engañados por los movimientos de la oscilación

  4. El filtro de frecuencia de oscilación puede filtrar señales falsas

  5. Las reglas son sencillas, claras y fáciles de entender

  6. Se puede usar en varios marcos de tiempo

Análisis de riesgos

  1. En situaciones de gran agitación puede ocurrir con frecuencia Open y Close

  2. Los parámetros de la EMA de ciclo incorrectos pueden haber perdido el punto de inflexión de la tendencia

  3. La combinación de parámetros deberá adaptarse adecuadamente a los cambios en el entorno del mercado

  4. Al igual que en el sistema MA, los pérdidas pueden revertirse al final de una gran tendencia

Dirección de optimización

  1. Intentar diferentes parámetros de combinación de EMA para encontrar el mejor

  2. Parámetros de selección según las características de las diferentes monedas y el entorno del mercado

  3. Se puede considerar la inclusión de estrategias de control de riesgo de stop loss

  4. Se puede considerar el ajuste dinámico de los parámetros del ciclo de la EMA

  5. Prueba con diferentes parámetros de valoración de la tasa de fluctuación

  6. Prueba de eficacia en diferentes marcos de tiempo

Resumir

La idea general de la estrategia es clara y fácil de entender, utiliza el cruce de la inclinación de la EMA para generar señales que permiten un seguimiento eficaz de la tendencia; los filtros de tendencia y los filtros de fluctuación complementarios reducen el ruido comercial. La combinación de parámetros de los EMA se puede adaptar a diferentes entornos del mercado ajustando el ciclo. En general, es una estrategia de seguimiento de tendencias sencilla y práctica que vale la pena probar y optimizar en el mundo real.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)

//definizione input

start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)

average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")

smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")

trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])

volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")

//variabili

m1 = if average == "EMA" 
    ema(close,len1)
else
    sma(close,len1)

m2=if average == "EMA" 
    ema(close,len2)
else
    sma(close,len2)

slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2

e1=if smoothingavg == "EMA" 
    ema(slp1,smoothingavglen)
else
    sma(slp1,smoothingavglen)

e2=if smoothingavg == "EMA" 
    ema(slp2,smoothingavglen)
else
    sma(slp2,smoothingavglen)

plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)

//variabili accessorie e condizioni

TrendConditionL=if trendfiltertype =="EMA"
    close>ema(close,trendfilterperiod)
else
    close>sma(close,trendfilterperiod)
    
TrendConditionS=if trendfiltertype =="EMA"
    close<ema(close,trendfilterperiod)
else
    close<sma(close,trendfilterperiod)
    
VolatilityCondition = abs(e1-e2) > volatilitydelta

ConditionEntryL= if trendfilter == true
    if volatilityfilter == true
        e1>e2 and TrendConditionL and VolatilityCondition
    else
        e1>e2 and TrendConditionL
else
    if volatilityfilter == true
        e1>e2 and VolatilityCondition
    else 
        e1>e2

ConditionEntryS= if trendfilter == true
    if volatilityfilter == true
        e1<e2 and TrendConditionS and VolatilityCondition
    else 
        e1<e2 and TrendConditionS
else
    if volatilityfilter == true
        e1<e2 and VolatilityCondition
    else
        e1<e2

ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)

if true
    if ConditionExitS
        if strategy.position_size < 0
            strategy.close("SLPShort")

if true
    if ConditionExitL
        if strategy.position_size > 0
            strategy.close("SLPLong")

if true
    if ConditionEntryL
        strategy.entry ("SLPLong",long=true)
        
if true
    if ConditionEntryS 
        strategy.entry("SLPShort",long=false)