Chiến lược băng trung bình di chuyển

Tác giả:ChaoZhang, Ngày: 2023-12-18 12:29:19
Tags:

img

Tổng quan

Chiến lược băng trung bình chuyển động là một chiến lược theo xu hướng dựa trên nhiều đường trung bình chuyển động. Nó theo dõi các đường trung bình chuyển động nhanh và chậm đồng thời và tạo ra tín hiệu giao dịch khi giá vượt qua đường băng trung bình chuyển động. Chiến lược kết hợp xác định xu hướng và các chỉ số mua quá mức / bán quá mức, có thể nắm bắt hiệu quả xu hướng trung và dài hạn.

Chiến lược logic

Chiến lược này sử dụng 5 đường trung bình di chuyển nhanh (5-, 8-, 13-, 20 và 30 ngày) và 4 đường trung bình di chuyển chậm (45, 70-, 105 và 150 ngày). Các đường nhanh tạo thành một dải băng trung bình di chuyển bên trong và các đường chậm tạo thành một dải băng trung bình di chuyển bên ngoài. Một tín hiệu mua được tạo ra khi giá vượt qua dải băng bên trong, và một tín hiệu bán được tạo ra khi giá vượt qua dải băng bên trong. Để lọc những đứt gãy sai, nó đòi hỏi giá phải vượt qua dải băng bên trong trong trong 3 ngọn nến liên tiếp, và hầu hết các đường trung bình di chuyển nhanh cũng xuyên qua đồng bộ trước khi tạo ra các tín hiệu giao dịch.

Ngoài ra, chiến lược cũng đánh giá xu hướng dài hạn. Nó chỉ xem xét việc tạo tín hiệu mua khi giá vượt trên đường trung bình động 200 ngày. Ngược lại, nó chỉ xem xét việc tạo tín hiệu bán khi giá vượt dưới đường trung bình động 200 ngày. Bằng cách xác định xu hướng dài hạn, nó ngăn ngừa bị mắc kẹt trong quá trình hợp nhất.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Thiết kế trung bình chuyển động đa có thể xác định chính xác hướng xu hướng. Sự kết hợp giữa các ruy băng trung bình chuyển động bên trong và bên ngoài với các đường nhanh và chậm hoạt động tốt trong việc xác định xu hướng trung hạn đến dài hạn.

  2. Cơ chế phá vỡ liên tiếp có thể lọc hiệu quả các phá vỡ sai. Trong khi đó, yêu cầu hầu hết các đường trung bình chuyển động nhanh nhất để phá vỡ đảm bảo xu hướng đang thay đổi.

  3. Việc đánh giá xu hướng dài hạn tránh bị mắc kẹt trong quá trình củng cố. Sử dụng đường 200 ngày để xác định cho phép mở các vị trí chỉ khi xu hướng bắt đầu đảo ngược.

  4. Cân bằng theo xu hướng và điều kiện mua quá mức / bán quá mức.

Phân tích rủi ro

Những rủi ro chính của chiến lược này bao gồm:

  1. Nguy cơ thoát thất bại: Khi các sự thoát sai xảy ra, chiến lược không thể tránh hoàn toàn tổn thất.

  2. Rủi ro mất mát trong xu hướng dao động: Khi thị trường dao động trong thời gian dài, điểm dừng lỗ có thể thường xuyên đạt được, dẫn đến tổn thất lớn hơn.

  3. Rủi ro tối ưu hóa tham số: Cài đặt không chính xác các tham số trung bình động cũng có thể dẫn đến lỗi trong tín hiệu giao dịch, dẫn đến tổn thất lớn hơn.

Các giải pháp tương ứng là:

  1. Mở rộng các điểm dừng lỗ một cách thích hợp để cung cấp cho giá đủ không gian để di chuyển.

  2. Thêm các chỉ số đánh giá xu hướng để tránh thiết lập các vị trí không có hướng trong quá trình hợp nhất.

  3. Sử dụng các phương pháp kiểm tra lại lịch sử và tối ưu hóa tham số để chọn các kết hợp tham số tốt nhất.

Hướng dẫn tối ưu hóa

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

  1. Tối ưu hóa các tham số trung bình động để chọn các số chu kỳ tốt nhất. Chạy các thử nghiệm ngược của các trung bình động với các số chu kỳ khác nhau để tìm kết hợp tham số tối ưu.

  2. Thêm các chỉ số đánh giá xu hướng để lọc. chẳng hạn như RSI cho quá mua / quá bán, Bollinger Bands cho các kênh đột phá vv. Tránh thiết lập các vị trí mù quáng khi xu hướng không rõ ràng.

  3. Sử dụng các đường trung bình động thích nghi. Tối ưu hóa các thông số đường trung bình động theo động theo các điều kiện thị trường thay đổi và biến động, để chúng phù hợp hơn với tình trạng thị trường hiện tại.

  4. Kết hợp các mô hình học máy để đánh giá xác suất xu hướng. Thiết lập các mô hình xác suất để đánh giá cơ hội đột phá thành công, hỗ trợ hệ thống quyết định đánh giá thời gian nhập cảnh lý tưởng.

  5. Tối ưu hóa các chiến lược dừng lỗ để theo dõi giá tốt hơn. chẳng hạn như dừng lỗ sau hoặc kích thước vị trí động dừng lỗ để làm cho đường dừng lỗ thông minh hơn.

Tóm lại

Chiến lược băng trung bình chuyển động là một trong những chiến lược theo xu hướng phổ biến hơn. Nó kết hợp các đường nhanh và chậm để đánh giá xu hướng trung hạn và dài hạn, và thiết lập các cơ chế đột phá liên tiếp để quyết định các mục nhập. Chiến lược cân bằng các điều kiện theo xu hướng và mua quá mức / bán quá mức. Với tối ưu hóa tham số và nâng cao chỉ số, hiệu suất của nó có thể được cải thiện hơn nữa. Nó phù hợp với các nhà đầu tư nắm giữ các vị trí trung hạn và dài hạn.


//@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)



Thêm nữa