Estrategia de negociación basada en los indicadores EMA y MAMA

El autor:¿ Qué pasa?, Fecha: 2023-10-31 14:20:56
Las etiquetas:

img

Resumen general

Esta estrategia se basa en los indicadores EMA (Exponential Moving Average) y MAMA (MESA Adaptive Moving Average) para determinar la dirección de la tendencia y generar señales comerciales de acuerdo con sus cruces.

Estrategia lógica

  1. Calcular la EMA rápida y la EMA lenta, que reflejan las tendencias a corto y a largo plazo del mercado, respectivamente.

  2. Calcule las líneas MAMA y FAMA, que son promedios móviles adaptativos.

  3. Cuando la EMA rápida cruza por encima de la EMA lenta, se genera una señal de compra.

  4. Cuando la EMA rápida cruza por debajo de la EMA lenta, se genera una señal de venta.

  5. Cuando MAMA cruza por encima de FAMA, se genera una señal de compra.

  6. Cuando MAMA cruza por debajo de FAMA, se genera una señal de venta.

  7. Los cruces de MAMA y FAMA se pueden utilizar para confirmar las señales de EMA o proporcionar una detección temprana de cambios de tendencia.

Específicamente, la estrategia calcula primero la EMA rápida (fl) y la EMA lenta (sl), que reflejan las tendencias a corto y a largo plazo respectivamente.

Luego calcula MAMA y FAMA basándose en la fórmula de John Ehlers:

  1. Calcular la transformación de Hilbert del precio y extraer información de fase de la señal.

  2. Calcular la frecuencia instantánea p basándose en la información de fase.

  3. Calcular el factor de ponderación α basándose en el valor p.

  4. Calcular MAMA y FAMA basándose en α.

Por último, las señales de negociación se generan basándose en los cruces EMA y MAMA/FAMA:

  • Long cuando la EMA cruza por encima
  • Corto cuando la EMA se cruza por debajo
  • Largo cuando MAMA cruza sobre FAMA
  • Corto cuando MAMA cruza debajo de FAMA

Análisis de ventajas

Esta estrategia combina las ventajas de los indicadores EMA y MAMA para mejorar la precisión de las señales de negociación.

Ventajas de la EMA:

  • Evaluación de los precios y reducción del ruido
  • Seguir las tendencias bien con un poco de retraso
  • Parámetros flexibles para ajustar la sensibilidad

Ventajas del MAMA:

  • Parámetros adaptativos, sin necesidad de ajuste manual del período
  • Respuesta rápida a la captura de la tendencia cambia temprano
  • Identificar con precisión soporte y resistencia

Ventajas de combinarlas:

  • El EMA determina la tendencia general
  • MAMA verifica las señales y detecta los giros temprano
  • Mejora de la precisión y la tasa de ganancia de las señales

Análisis de riesgos

Los principales riesgos de esta estrategia:

  • EMA y MAMA son indicadores rezagados, las señales de entrada pueden tener algún retraso y deslizamiento
  • Los cruces frecuentes en diferentes mercados que causan problemas
  • La configuración incorrecta de los parámetros conduce a tendencias perdidas o señales falsas

Soluciones:

  • Utilizar el stop loss para controlar la pérdida
  • Escoge parámetros razonables, evita ser demasiado sensible
  • Combinar con otros indicadores para confirmar señales

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  • Optimizar los períodos de EMA basados en las características del símbolo
  • Sensibilidad MAMA alfa para capturar mejor los giros
  • Añadir otros filtros como MACD, RSI para evitar señales falsas
  • Añadir un stop loss al control de los riesgos
  • Prueba de retroceso para encontrar parámetros óptimos
  • Automatizar la toma de ganancias para maximizar las ganancias

Resumen de las actividades

Esta estrategia integra las fortalezas de los indicadores EMA y MAMA para seguir la tendencia y capturar los giros a tiempo. Con la optimización de parámetros y el control de riesgos, puede lograr una mejor tasa de ganancia y rentabilidad.


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

//@version=2
strategy("EMAMA strategy", overlay=true)
//This entire strategy is courtesy of LazyBear for programming the original EMAMA system, I simply added a strategy element to everything to round things out. 

src=input(hl2, title="Source")
fl=input(.5, title="Fast Limit")
sl=input(.05, title="Slow Limit")
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]))
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)
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)

longCondition = crossover(mama, fama)
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(mama, fama)
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

Más.