
La estrategia se basa en dos indicadores, EMA (medios móviles de índice) y MAMA (medios móviles adaptativos de MESA), para juzgar las tendencias de los mercados y generar señales de negociación en función de su intersección. La EMA se utiliza a menudo para determinar la dirección de las tendencias del mercado, mientras que la MAMA puede capturar con mayor precisión los puntos de inflexión del mercado, que en combinación pueden mejorar el rendimiento de la estrategia.
En concreto, la estrategia calcula primero el EMA rápido (fl) y el EMA lento (sl), que reflejan las tendencias a corto y largo plazo respectivamente.
Luego se calculan MAMA y FAMA según la fórmula de John Ehlers:
Por último, la estrategia genera una señal de negociación basada en la intersección de EMA y MAMA/FAMA:
La estrategia combina las ventajas de los indicadores EMA y MAMA para mejorar la precisión de las señales de negociación.
Las ventajas de la EMA:
Las ventajas de MAMA:
Las ventajas de usar ambas cosas:
El principal riesgo de esta estrategia es:
Respuesta:
La estrategia se puede optimizar en los siguientes aspectos:
La estrategia integra las ventajas de los dos indicadores EMA y MAMA, y es capaz de capturar los giros de tendencia de forma dinámica y oportuna. Es una estrategia de tipo de tendencia de seguimiento fiable. A través de la optimización de los parámetros y el control del riesgo, se puede mejorar la ganancia y la rentabilidad de la estrategia.
/*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)