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.
Calcular la EMA rápida y la EMA lenta, que reflejan las tendencias a corto y a largo plazo del mercado, respectivamente.
Calcule las líneas MAMA y FAMA, que son promedios móviles adaptativos.
Cuando la EMA rápida cruza por encima de la EMA lenta, se genera una señal de compra.
Cuando la EMA rápida cruza por debajo de la EMA lenta, se genera una señal de venta.
Cuando MAMA cruza por encima de FAMA, se genera una señal de compra.
Cuando MAMA cruza por debajo de FAMA, se genera una señal de venta.
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:
Calcular la transformación de Hilbert del precio y extraer información de fase de la señal.
Calcular la frecuencia instantánea p basándose en la información de fase.
Calcular el factor de ponderación α basándose en el valor p.
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:
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:
Ventajas del MAMA:
Ventajas de combinarlas:
Los principales riesgos de esta estrategia:
Soluciones:
La estrategia se puede optimizar en los siguientes aspectos:
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)