Chiến lược sử dụng nhiều dải trung bình động


Ngày tạo: 2023-12-18 12:29:19 sửa đổi lần cuối: 2023-12-18 12:29:19
sao chép: 1 Số nhấp chuột: 807
1
tập trung vào
1621
Người theo dõi

Chiến lược sử dụng nhiều dải trung bình động

Tổng quan

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.

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

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.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. 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ả.

  2. 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.

  3. 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.

  4. 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.

Phân tích rủi ro

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

  1. 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ả.

  2. 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.

  3. 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:

  1. 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á.

  2. 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.

  3. 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.

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

Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Tóm tắt

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ố.

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