
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!
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.
El uso de la cruz de pendiente genera señales que permiten un seguimiento eficaz de las tendencias.
Ajuste de la combinación de parámetros del ciclo EMA para adaptarse a diferentes entornos del mercado
Los filtros de tendencias evitan ser engañados por los movimientos de la oscilación
El filtro de frecuencia de oscilación puede filtrar señales falsas
Las reglas son sencillas, claras y fáciles de entender
Se puede usar en varios marcos de tiempo
En situaciones de gran agitación puede ocurrir con frecuencia Open y Close
Los parámetros de la EMA de ciclo incorrectos pueden haber perdido el punto de inflexión de la tendencia
La combinación de parámetros deberá adaptarse adecuadamente a los cambios en el entorno del mercado
Al igual que en el sistema MA, los pérdidas pueden revertirse al final de una gran tendencia
Intentar diferentes parámetros de combinación de EMA para encontrar el mejor
Parámetros de selección según las características de las diferentes monedas y el entorno del mercado
Se puede considerar la inclusión de estrategias de control de riesgo de stop loss
Se puede considerar el ajuste dinámico de los parámetros del ciclo de la EMA
Prueba con diferentes parámetros de valoración de la tasa de fluctuación
Prueba de eficacia en diferentes marcos de tiempo
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.
/*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)