Chiến lược này dựa trên các chỉ số EMA (Exponential Moving Average) và MAMA (MESA Adaptive Moving Average) để xác định hướng xu hướng và tạo ra các tín hiệu giao dịch theo đường chéo 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 chuyển hướng của thị trường. Sử dụng cả hai có thể cải thiện hiệu suất của chiến lược.
Tính toán EMA nhanh và EMA chậm, phản ánh xu hướng ngắn hạn và dài hạn của thị trường tương ứng.
Tính toán các đường MAMA và FAMA, đó là các đường trung bình động thích nghi.
Khi EMA nhanh vượt qua EMA chậm, một tín hiệu mua được tạo ra.
Khi EMA nhanh vượt qua dưới EMA chậm, một tín hiệu bán được tạo ra.
Khi MAMA vượt qua FAMA, một tín hiệu mua được tạo ra.
Khi MAMA vượt qua dưới FAMA, một tín hiệu bán được tạo ra.
Crossover của MAMA và FAMA có thể được sử dụng để xác nhận tín hiệu EMA hoặc cung cấp phát hiện sớm các biến động xu hướng.
Cụ thể, chiến lược đầu tiên 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 tương ứng.
Sau đó nó tính toán MAMA và FAMA dựa trên công thức của John Ehlers:
Tính toán biến thể Hilbert của giá cả và chiết xuất thông tin pha của tín hiệu.
Tính toán tần số tức thời p dựa trên thông tin pha.
Tính toán hệ số trọng số α dựa trên giá trị p.
Tính toán MAMA và FAMA dựa trên α.
Cuối cùng, các tín hiệu giao dịch được tạo ra dựa trên EMA và MAMA/FAMA chéo:
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:
Ưu điểm của MAMA:
Ưu điểm của việc kết hợp chúng:
Những rủi ro chính của chiến lược này:
Giải pháp:
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược này tích hợp các điểm mạnh của các chỉ số EMA và MAMA để theo dõi xu hướng và nắm bắt các lượt kịp thời. Với tối ưu hóa tham số và kiểm soát rủi ro, nó có thể đạt được tỷ lệ thắng và lợi nhuận cải thiện. Nhưng người dùng vẫn nên thận trọng dựa trên sở thích rủi ro cá nhân.
/*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)