
Chiến lược moving average band là một chiến lược theo dõi xu hướng dựa trên nhiều đường trung bình di chuyển. Nó đồng thời giám sát đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm, tạo ra tín hiệu giao dịch khi giá vượt qua đường trung bình di chuyển. Chiến lược này kết hợp cùng với sự phán đoán xu hướng và chỉ số bán tháo, có thể nắm bắt hiệu quả xu hướng đường dài giữa.
Chiến lược này sử dụng đồng thời 5 đường trung bình di chuyển nhanh (đường 5, 8, 13, 20, 30 ngày) và 4 đường trung bình di chuyển chậm (đường 45, 70, 105, 150 ngày), đường nhanh tạo thành đường trung bình di chuyển bên trong, đường chậm tạo thành đường trung bình di chuyển bên ngoài. Đường trung bình di chuyển bên trong được tạo ra khi giá vượt qua đường trung bình bên trong.
Ngoài ra, chiến lược này cũng sẽ đánh giá xu hướng dài hạn. Chỉ khi giá nằm trên đường trung bình di chuyển 200 ngày, sẽ được xem xét để tạo ra tín hiệu mua. Ngược lại, chỉ khi giá giảm xuống đường trung bình di chuyển 200 ngày, sẽ được xem xét để tạo ra tín hiệu bán. Bằng cách đánh giá xu hướng dài hạn, bạn có thể tránh bị đè nén trong thời gian điều chỉnh.
Chiến lược này có một số lợi thế:
Thiết kế nhiều đường trung bình di chuyển, có thể xác định chính xác hướng xu hướng. Đường trung bình di chuyển bên trong và bên ngoài kết hợp với đường trung bình nhanh và chậm, nhận ra xu hướng đường dài trung bình có hiệu quả.
Cơ chế phá vỡ liên tục có thể lọc hiệu quả các phá vỡ giả. Đồng thời yêu cầu hầu hết các phá vỡ đường trung bình nhanh để đảm bảo thay đổi xu hướng.
Xác định xu hướng dài hạn, tránh bị đặt trong việc điều chỉnh. Hợp tác với phán quyết đường 200 ngày, chỉ xem xét đặt hàng khi xu hướng biến đổi.
Giao tiếp theo xu hướng và mua bán quá mức. Đường trung bình di động có chức năng theo dõi xu hướng, kết hợp với chỉ số mua bán quá mức để thiết lập điểm dừng lỗ, kiểm soát rủi ro.
Chiến lược này có những rủi ro:
Rủi ro phá vỡ thất bại. Chiến lược này không thể hoàn toàn tránh được sự mất mát khi giá bị phá vỡ giả.
Rủi ro mất mát trong xu hướng chấn động. Khi thị trường bị chấn động lâu dài, điểm dừng có thể bị đánh thường xuyên, dẫn đến tổn thất tăng lên.
Rủi ro tối ưu hóa tham số. Thiết lập tham số trung bình di chuyển không đúng cách cũng có thể dẫn đến tín hiệu giao dịch bị lỗi, do đó làm tăng tổn thất.
Giải pháp tương ứng:
Giảm điểm dừng một cách thích hợp, cho giá đủ chỗ để hoạt động. Hoặc sử dụng phương pháp dừng ljetrail, để đường dừng hoạt động theo giá.
Tăng các chỉ số đánh giá xu hướng, tránh không định hướng trong thời gian chấn động. Ví dụ, lọc các chỉ số như DMI, MACD.
Sử dụng các phương tiện tra cứu lịch sử và tối ưu hóa tham số để chọn các tham số tốt nhất. Các tham số cũng được theo dõi hiệu quả trong đĩa thật và tối ưu hóa động.
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Tối ưu hóa các tham số trung bình di chuyển, chọn số chu kỳ tốt nhất. Bạn có thể tìm thấy các tham số kết hợp tốt nhất bằng cách tra lại các trung bình di chuyển của các số chu kỳ khác nhau.
Thêm các chỉ số đánh giá xu hướng để lọc. Ví dụ: chỉ số RSI đánh giá quá mua quá bán, Brinband đánh giá phá vỡ kênh, v.v.
Sử dụng trung bình di chuyển thích ứng. Tùy thuộc vào sự thay đổi và biến động của thị trường, các tham số trung bình di chuyển được tối ưu hóa trong thời gian thực để phù hợp hơn với tình trạng thị trường hiện tại.
Kết hợp mô hình học máy để xác định xác suất xu hướng. Xây dựng mô hình xác suất để đánh giá xác suất thành công của đột phá, hỗ trợ hệ thống ra quyết định xác định thời gian nhập cảnh.
Tối ưu hóa chiến lược dừng lỗ để dừng lỗ có thể theo dõi giá tốt hơn. Ví dụ như dừng lỗ theo dõi hoặc dừng giảm tự động, để đường dừng lỗ thông minh hơn.
Chiến lược moving average band là một trong những chiến lược theo dõi xu hướng phổ biến hơn. Nó kết hợp cả đường nhanh và đường chậm để xác định xu hướng đường dài trung bình và thiết lập một cơ chế lọc phá vỡ liên tục để quyết định tham gia. Chiến lược này kết hợp theo dõi xu hướng và phán quyết mua bán quá mức, có thể nâng cao hiệu quả sử dụng hơn nữa bằng cách tối ưu hóa tham số và tăng cường chỉ số.
//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)
trima(_src, _len) =>
sma(sma(_src, _len), _len)
hma(_src, _len) =>
wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) +
ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)
ma(_src, _len) =>
hma__1 = hma(_src, _len)
ema_1 = ema(_src, _len)
sma_1 = sma(_src, _len)
wma_1 = wma(_src, _len)
trima__1 = trima(_src, _len)
zlema__1 = zlema(_src, _len)
dema__1 = dema(_src, _len)
tema__1 = tema(_src, _len)
matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 :
matype == "wma" ? wma_1 : matype == "trima" ? trima__1 :
matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1
ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)
maColor(ma, maRef) =>
if change(ma) <= 0 and ma05 < maRef
color.new(color.red, 20)
else
if change(ma) >= 0 and ma05 > maRef
color.new(color.navy, 20)
else
if change(ma) < 0 and ma05 > maRef
color.new(color.red, 20)
else
if change(ma) >= 0 and ma05 < maRef
color.new(color.navy, 20)
else
color.gray
aboveConfirmed(x,maRef)=>
above=true
for i=1 to x
if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
above:=false
above
aboveMost(x,len)=>
above=0
boolean=false
if close[len]>ma05[len]
above:=above+1
if close[len]>ma08[len]
above:=above+1
if close[len]>ma13[len]
above:=above+1
if close[len]>ma20[len]
above:=above+1
if close[len]>ma30[len]
above:=above+1
if close[len]>ma45[len]
above:=above+1
if close[len]>ma70[len]
above:=above+1
if close[len]>ma105[len]
above:=above+1
if close[len]>ma150[len]
above:=above+1
if close[len]>ma200[len]
above:=above+1
if(above>=x)
boolean:=true
boolean
belowMost(x,len)=>
above=0
boolean=false
if close[len]<ma05[len]
above:=above+1
if close[len]<ma08[len]
above:=above+1
if close[len]<ma13[len]
above:=above+1
if close[len]<ma20[len]
above:=above+1
if close[len]<ma30[len]
above:=above+1
if close[len]<ma45[len]
above:=above+1
if close[len]<ma70[len]
above:=above+1
if close[len]<ma105[len]
above:=above+1
if close[len]<ma150[len]
above:=above+1
if close[len]<ma200[len]
above:=above+1
if(above>=x)
boolean:=true
boolean
belowConfirmed(x,maRef)=>
below=true
for i=1 to x
if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
below:=false
below
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)
closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)
isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))
strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)