
Chiến lược này dựa trên hai chỉ số EMA (trung bình di chuyển chỉ số) và MAMA (trung bình di chuyển thích ứng của MESA) để đánh giá xu hướng thị trường và tạo ra tín hiệu giao dịch dựa trên tình trạng giao thoa của chúng. EMA thường được sử dụng để đánh giá hướng xu hướng thị trường, trong khi MAMA có thể nắm bắt chính xác hơn các điểm biến đổi thị trường, và việc sử dụng cả hai cùng nhau có thể cải thiện hiệu suất của chiến lược.
Cụ thể, chiến lược này tính toán EMA nhanh (fl) và EMA chậm (sl) để phản ánh xu hướng ngắn hạn và dài hạn.
Sau đó tính MAMA và FAMA theo công thức của John Ehlers:
Cuối cùng, chiến lược tạo ra tín hiệu giao dịch dựa trên sự giao thoa của EMA và MAMA/FAMA:
Chiến lược này kết hợp các lợi thế của chỉ số EMA và MAMA để cải thiện độ chính xác của tín hiệu giao dịch.
Ưu điểm của EMA:
Những ưu điểm của MAMA:
Những lợi ích của việc sử dụng cả hai:
Chiến lược này có những rủi ro:
Phản ứng:
Chiến lược này có thể được tối ưu hóa bằng cách:
Chiến lược này tích hợp lợi thế của hai chỉ số EMA và MAMA, có thể bắt được sự biến đổi xu hướng một cách trật tự và kịp thời, là một chiến lược theo dõi xu hướng đáng tin cậy. Bằng cách tối ưu hóa tham số và kiểm soát rủi ro, chiến lược có thể tăng tỷ lệ thắng và lợi nhuận. Tuy nhiên, người dùng vẫn cần thận trọng hoạt động theo sở thích rủi ro của riêng mình.
/*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)