Chiến lược giao dịch dựa trên các chỉ báo EMA và MAMA


Ngày tạo: 2023-10-31 14:20:56 sửa đổi lần cuối: 2023-10-31 14:20:56
sao chép: 0 Số nhấp chuột: 817
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch dựa trên các chỉ báo EMA và MAMA

Tổng quan

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.

Nguyên tắc chiến lược

  1. Tính toán EMA nhanh và EMA chậm, phản ánh xu hướng thị trường ngắn hạn và dài hạn
  2. Tính các đường MAMA và FAMA, tương ứng với đường trung bình di chuyển tự điều chỉnh
  3. Khi EMA nhanh vượt qua EMA chậm, nó tạo ra một tín hiệu mua
  4. Khi EMA nhanh vượt qua EMA chậm, tạo ra một tín hiệu bán
  5. Khi MAMA đeo FAMA, nó tạo ra một tín hiệu mua
  6. Khi MAMA đi qua FAMA, nó tạo ra một tín hiệu bán
  7. MAMA và FAMA giao nhau có thể được sử dụng để xác nhận tín hiệu giao nhau của EMA hoặc bắt đầu một xu hướng chuyển hướng

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:

  1. Tính toán biến đổi Hilbert của giá và trích xuất thông tin pha của tín hiệu
  2. Tính chu kỳ của tín hiệu theo thông tin pha p
  3. Tính trọng số α dựa trên giá trị p
  4. MAMA và FAMA được tính theo trọng số α

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:

  • EMA làm nhiều hơn
  • EMA trống rỗng
  • MAMA mặc FAMA làm nhiều hơn
  • MAMA mặc FAMA để làm việc

Phân tích lợi thế

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:

  • Có thể làm mượt dữ liệu giá thành, giảm tiếng ồn
  • Có thể theo dõi xu hướng thị trường và có một chút chậm trễ
  • Các tham số linh hoạt, có thể điều chỉnh độ nhạy đối với xu hướng ngắn hạn và dài hạn

Những ưu điểm của MAMA:

  • Các tham số tự điều chỉnh, không cần phải thiết lập chu kỳ nhân tạo
  • Phản ứng nhanh chóng, bắt kịp sự thay đổi xu hướng
  • Xác định chính xác vùng hỗ trợ và kháng cự

Những lợi ích của việc sử dụng cả hai:

  • EMA đánh giá xu hướng chính
  • MAMA xác nhận tín hiệu và bắt đầu chuyển hướng
  • Tăng độ chính xác và tỷ lệ thắng

Phân tích rủi ro

Chiến lược này có những rủi ro:

  • EMA và MAMA đều là các chỉ số xác nhận muộn, điểm Entry hơi trễ, có thể mang lại rủi ro trượt
  • Trong các cơn động đất lớn, EMA và MAMA giao nhau thường xuyên, tạo ra nhiều nắp và nắp trống
  • Các tham số EMA và MAMA được thiết lập không chính xác, có thể bỏ lỡ xu hướng hoặc tạo ra tín hiệu sai

Phản ứng:

  • Sử dụng Stop Loss để kiểm soát lỗ
  • Chọn các tham số hợp lý, tránh quá nhạy cảm
  • Sử dụng kết hợp với các chỉ số khác, xác nhận tín hiệu

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa bằng cách:

  • Tối ưu hóa các tham số chu kỳ EMA để phù hợp hơn với các đặc điểm của các giống khác nhau
  • Điều chỉnh độ nhạy của tham số MAMA α, tối ưu hóa tốc độ bắt chuyển
  • Thêm các bộ lọc cho các chỉ số khác như MACD, RSI, v.v. để tránh tín hiệu giả
  • Tăng các chiến lược dừng lỗ để kiểm soát rủi ro
  • Phản hồi tối ưu hóa, chọn các tham số tốt nhất
  • Tăng tự động dừng để tối đa hóa lợi nhuận

Tóm tắt

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.

Mã nguồn chiến lược
/*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)