Ehlers MESA Estrategia de negociación de media móvil adaptativa

El autor:¿ Qué pasa?, Fecha: 2023-09-28 15:37:13
Las etiquetas:

Resumen general

Esta estrategia se basa en el Ehlers MESA Adaptive Moving Average y diseñó una estrategia de negociación de tendencia que rastrea los cruces entre dos promedios móviles.

Estrategia lógica

El núcleo de esta estrategia es calcular dos medias móviles adaptativas: la línea MAMA y la línea FAMA.

alpha = fl / dphase
alpha = iff(alpha < sl, sl, iff(alpha > fl, fl, alpha))  
mama = alpha*src + (1 - alpha)*nz(mama[1])

Donde fl es el límite rápido, sl es el límite lento y dphase es la diferencia de fase.

La línea FAMA se calcula como sigue:

fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])

La línea FAMA es un suavizado filtrado de paso bajo de la línea MAMA.

La estrategia compara la relación de magnitud entre las líneas MAMA y FAMA para determinar si el mercado se encuentra actualmente en una tendencia alcista o bajista, y genera señales comerciales basadas en esto.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Utiliza medias móviles adaptativas en las que los parámetros se ajustan automáticamente en función de los cambios del mercado, sin necesidad de parámetros fijos fijados manualmente.

  2. La línea FAMA de filtro de paso bajo puede filtrar las fallas.

  3. El uso de un diseño de media móvil dual puede rastrear las tendencias a medio y largo plazo.

  4. Lógica de estrategia simple y clara que es fácil de entender y modificar.

  5. Indicadores visuales que muestran claramente las señales comerciales.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Las estrategias de cruce de líneas dobles pueden generar señales comerciales excesivas, se recomiendan controles adecuados de reducción y intervalo.

  2. Los cálculos complejos de MAMA y FAMA, los ajustes incorrectos de los parámetros pueden causar distorsiones de la curva.

  3. Los parámetros de adaptación pueden dar lugar a un sobreajuste, por lo que es necesario verificar con otros indicadores técnicos.

  4. Los cruces de doble línea tienen retrasos de tiempo, pueden perder puntos de inflexión de tendencia.

  5. Hay que tener cuidado con los riesgos de pérdida de pérdidas de errores.

Direcciones de optimización

La estrategia se puede optimizar en las siguientes áreas:

  1. Optimizar la configuración de parámetros para encontrar las mejores combinaciones de límite rápido y límite lento.

  2. Añadir estrategias de stop loss para un estricto control por operación de stop loss.

  3. Añadir otros indicadores a las señales de filtro, como MACD, RSI, etc. para evitar fallas.

  4. Añadir indicadores de evaluación de tendencia para evitar operaciones contra tendencia.

  5. Optimizar el ritmo de entrada ajustando los requisitos de cruce para reducir el comercio demasiado frecuente.

  6. Optimice las estrategias de obtención de ganancias de acuerdo con la fuerza de la tendencia.

  7. Prueba las diferencias de parámetros entre los distintos productos para encontrar las combinaciones óptimas de parámetros.

Resumen de las actividades

En general, esta es una tendencia típica después de la estrategia, utilizando los promedios móviles adaptativos de Ehlers MESA para construir un indicador visualizado y generar señales de negociación a través de cruces de líneas duales. La estrategia tiene ventajas como parámetros adaptativos, filtrado de fallas y visualización, pero también riesgos como retrasos de tiempo y comercio excesivo.


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// @author LazyBear 
// 
// List of my public indicators: http://bit.ly/1LQaPK8 
// List of my app-store indicators: http://blog.tradingview.com/?p=970 
//
strategy("Ehlers MESA Adaptive Moving Average [LazyBear with ekoronin fix]", shorttitle="EMAMA_LB (ekoronin fix)", overlay=false, calc_on_every_tick=true, precision=0)
src=input(close, title="Source")
fl=input(.4, title="Fast Limit")
sl=input(.04, title="Slow Limit")
pi = 3.1415926
sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0
dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54)
q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54)
i1 = nz(dt[3])
jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54)
jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54)
i2_ = i1 - jq
q2_ = q1 + jI
i2 = .2*i2_ + .8*nz(i2[1])
q2 = .2*q2_ + .8*nz(q2[1])
re_ = i2*nz(i2[1]) + q2*nz(q2[1])
im_ = i2*nz(q2[1]) - q2*nz(i2[1])
re = .2*re_ + .8*nz(re[1])
im = .2*im_ + .8*nz(im[1])
//p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1]))
p1 = iff(im!=0 and re!=0, 2*pi/atan(im/re), nz(p[1]))
p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1))
p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2))
p = .2*p3 + .8*nz(p3[1])
spp = .33*p + .67*nz(spp[1])
//phase = atan(q1 / i1)
phase = 180/pi * atan(q1 / i1) 
dphase_ = nz(phase[1]) - phase
dphase = iff(dphase_< 1, 1, dphase_)
alpha_ = fl / dphase
alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_))
mama = alpha*src + (1 - alpha)*nz(mama[1])
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
//pa=input(false, title="Mark crossover points")
//plotarrow(pa?(cross(mama, fama)?mama<fama?-1:1:na):na, title="Crossover Markers")
//fr=input(false, title="Fill MAMA/FAMA Region")
//duml=plot(fr?(mama>fama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL")
//mamal=plot(mama, title="MAMA", color=red, linewidth=2)
//famal=plot(fama, title="FAMA", color=green, linewidth=2)
//fill(duml, mamal, red, transp=70, title="NegativeFill")
//fill(duml, famal, green, transp=70, title="PositiveFill")
//ebc=input(false, title="Enable Bar colors")
//bc=mama>fama?lime:red
//barcolor(ebc?bc:na)

longSpike=mama>fama? 1:0
shortSpike=mama<fama? 1:0

plot(longSpike, title = "Mama Long", style=line, linewidth=1, color=yellow)
plot(shortSpike, title = "Mama Short", style=line, linewidth=1, color=red)

//possig = iff(reverse and pos == 1, -1,
//          iff(reverse and pos == -1, 1, pos))	   
if (longSpike) 
    strategy.entry("Long", strategy.long)
if (shortSpike)
    strategy.entry("Short", strategy.short)	


Más.