Esta estrategia se basa en la adaptación de las medias móviles de Ehlers MESA, y diseñó una estrategia de negociación de tendencias que sigue a dos cruces de medias. Hacer más cuando se cruza la línea lenta en la línea rápida y dejar de lado cuando se cruza la línea lenta bajo la línea rápida, es una estrategia típica de cruce de medias móviles duales.
El núcleo de esta estrategia es el cálculo de dos medias móviles adaptadas: la línea MAMA y la línea FAMA. De ellas, la fórmula de cálculo de la línea MAMA es la siguiente:
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. Alpha se ajusta dinámicamente según la diferencia de fase para lograr parámetros de suavizado adaptativos.
La fórmula para calcular la línea FAMA es la siguiente:
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
La línea FAMA es la línea de suavizado de ondas de baja penetración de la línea MAMA.
La estrategia se basa en la comparación de la relación entre la magnitud de las líneas MAMA y FAMA para determinar si se encuentra en una tendencia ascendente o descendente y así generar una señal de negociación.
La estrategia tiene las siguientes ventajas:
Utilizando una media móvil adaptativa, los parámetros se ajustan automáticamente según los cambios en el mercado, sin necesidad de establecer parámetros fijos manualmente.
Se añade una línea FAMA de filtrado de baja permeabilidad que permite filtrar falsas brechas.
El diseño de la media móvil doble permite seguir las tendencias de la línea media.
La lógica de la estrategia es simple y clara, fácil de entender y modificar.
La visualización de los indicadores es intuitiva y permite ver claramente las señales de negociación.
La estrategia también tiene sus riesgos:
Las estrategias de doble línea de cruce son propensas a generar múltiples señales de negociación, por lo que se recomienda un control adecuado del intervalo y la retirada.
El cálculo de las líneas MAMA y FAMA es complejo, y la configuración incorrecta de los parámetros puede causar distorsiones en las curvas.
Los parámetros de adaptación pueden conducir a una optimización excesiva, que requiere verificación en combinación con otros indicadores técnicos.
La intersección de dos líneas tiene un retraso en el tiempo y puede perder el punto de cambio de tendencia.
Se debe prestar atención al riesgo de pérdidas por brechas falsas.
La estrategia puede ser optimizada en las siguientes direcciones:
Optimice la configuración de los parámetros para encontrar la mejor combinación de parámetros de restricción rápida y lenta.
Aumentar las estrategias de stop loss y controlar rigurosamente el stop loss individual.
En combinación con otras señales de filtración de indicadores, como MACD, RSI, etc., para evitar falsas rupturas.
Aumentar los indicadores de tendencia y evitar el comercio en contra.
Optimizar el ritmo de entrada, ajustar los requerimientos de espacio en el cruce de dos líneas y reducir la frecuencia excesiva de las transacciones.
Optimización de la estrategia de frenado, tomando diferentes métodos de frenado según la intensidad de la tendencia.
Prueba la diferencia en la configuración de los parámetros de las diferentes variedades para encontrar la combinación óptima de parámetros.
Esta estrategia general es una estrategia típica de seguimiento de tendencias, que utiliza el promedio móvil adaptado de Ehlers MESA para construir un indicador visual y generar señales de negociación de manera bidireccional. La estrategia tiene ventajas como la adaptación automática de los parámetros, la falsa ruptura de la onda de fluctuación y la visualización, pero también existe el riesgo de retrasos en el tiempo y múltiples operaciones.
/*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)