Cross Timeframe Hull Moving Average Mua bán chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-07 16:54:14
Tags:

img

Tổng quan

Chiến lược này dựa trên chỉ số Hull Moving Average, tính toán Hull MA trên các khung thời gian khác nhau và so sánh xu hướng Hull MA trên các khung thời gian để xác định sự thay đổi xu hướng. Nó tạo ra tín hiệu mua khi Hull MA ngắn hơn vượt qua trên Hull MA dài hơn và bán tín hiệu khi Hull MA ngắn hơn vượt qua dưới thời gian dài hơn.

Chiến lược logic

  1. Các thông số đầu vào: Thời gian MA của thân tàu Thời gian, khung thời gian HMA2 Resolution2, khung thời gian HMA3 Resolution3

  2. Tính toán giá trị HMA của Hull MA

  3. Tính toán giá trị MA của Hull HMA2 trên khung thời gian Resolution2

  4. Tính toán giá trị MA của Hull HMA3 trên khung thời gian Resolution3

  5. So sánh mối quan hệ cường độ giữa HMA, HMA2, HMA3

  6. Tạo tín hiệu mua khi HMA>HMA2>HMA3

  7. Tạo tín hiệu bán khi HMA

  8. Hiển thị các giá trị và tín hiệu MA Hull trên các khung thời gian khác nhau ở phía trên bên trái của biểu đồ

  9. Sử dụng màu sắc để phân biệt xu hướng tăng và giảm

Phân tích lợi thế

  1. Sử dụng nhiều khung thời gian có thể lọc các vụ trốn thoát giả và tránh bẫy.

  2. Các thông số khung thời gian có thể tùy chỉnh, thích nghi với các khoảng thời gian và biến động khác nhau.

  3. Hiển thị tín hiệu thời gian thực, hoạt động trực quan.

  4. Xu hướng MA Hull được hiển thị giúp xác định xu hướng hiện tại.

Phân tích rủi ro

  1. Cài đặt tham số không chính xác có thể gây ra giao dịch quá mức.

  2. Khung thời gian dài hơn Hull MA có tác dụng chậm trễ, có thể bỏ lỡ các điểm chuyển hướng.

  3. Có thể tạo ra tín hiệu sai xung quanh quá trình chuyển đổi bò-gấu.

  4. Các chiến lược thoát hiểm thường bị mắc kẹt bởi những cuộc thoát hiểm giả.

  5. Các khoản hoa hồng giao dịch không được xem xét ảnh hưởng đến lợi nhuận thực tế.

Các rủi ro có thể được giảm bằng cách tối ưu hóa các tham số, kết hợp các chỉ số khác để lọc và cho phép dừng lỗ rộng hơn.

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

  1. Tối ưu hóa thời gian MA Hull thích nghi với các giai đoạn và biến động khác nhau.

  2. Thêm chỉ số âm lượng để tránh sự đột phá sai.

  3. Thêm các dao động để xác định sức mạnh xu hướng.

  4. Kết hợp các mô hình học máy cho thời gian mua / bán.

  5. Kết hợp các chỉ số tâm lý để phát hiện thị trường hype.

  6. Điều chỉnh chiến lược dừng lỗ để quản lý rủi ro tốt hơn.

  7. Tùy chỉnh điều kiện mua/bán với các tín hiệu chỉ số khác.

  8. Thêm các chiến lược giao dịch dựa trên kênh giá hoặc sóng.

Kết luận

Chiến lược này sử dụng Hull MA nhiều khung thời gian để xác định hướng xu hướng bằng cách so sánh độ dốc trung bình động trên các khung thời gian và tạo ra tín hiệu khi xu hướng đảo ngược. Multi-timeframe Hull MA hiệu quả hơn trong việc lọc các đột phá sai hơn MA đơn. Nhưng chiến lược này cũng có những hạn chế trong điều chỉnh tham số, xác định xu hướng vv. tích hợp nhiều chỉ số, tối ưu hóa các tham số, cải thiện stop loss có thể tăng lợi nhuận và kiểm soát rủi ro.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//
strategy("wtfBUYorSELLffs",overlay=true,currency="USD",initial_capital=100000,default_qty_type=strategy.percent_of_equity,default_qty_value=100,commission_type=strategy.commission.percent,commission_value=0.1)
Period=input(title="Hull MA Period",type=input.integer,defval=6,minval=1)
Resolution2=input(title="HMA2 Resolution", type=input.resolution,defval="60")
Resolution3=input(title="HMA3 Resolution", type=input.resolution,defval="240")
Price=input(title="Source of Price",type=input.source,defval=open)
xOffset       = input(40, title="Panel offset (X-Axis)")
yOffset       = input(0, title="Panel offset (y-Axis)")
lightgray = #D3D3D3FF
pnlTextColor = color.silver
pnlColor = color.black
HMA = hma(Price,Period)
HMA2 = security(syminfo.tickerid, Resolution2, HMA,barmerge.gaps_off,barmerge.lookahead_off)
HMA3 = security(syminfo.tickerid, Resolution3, HMA,barmerge.gaps_off,barmerge.lookahead_off) 
HUP = HMA > HMA[1]
H1UP = security(syminfo.tickerid, Resolution2, HUP,barmerge.gaps_off,barmerge.lookahead_off)
H2UP = security(syminfo.tickerid, Resolution3, HUP,barmerge.gaps_off,barmerge.lookahead_off) 

int barSize = timeframe.isdaily ? timeframe.multiplier*86400000 : 
           timeframe.isseconds? timeframe.multiplier*1000 :
           timeframe.isminutes? timeframe.multiplier*60000 : (time[0]-time[1])
int   lapos_x = timenow + barSize*xOffset
float lapos_y = highest(20) + yOffset*syminfo.mintick * syminfo.pointvalue
f_draw_infopanel(_x, _y, _line, _text)=>
    _rep_text = ""
    for _l = 0 to _line
        _rep_text := _rep_text + "\n"
    _rep_text := _rep_text + _text
    // var label _la = na
    // label.delete(_la)
//     _la := label.new(
//          x=_x, y=_y, 
//          text=_rep_text, xloc=xloc.bar_time, yloc=yloc.price, 
//          color=pnlColor, style=label.style_labelup, textcolor=pnlTextColor, size=size.normal)
// f_draw_infopanel(lapos_x, lapos_y, 8, "╚═══════════════════════╝")
f_draw_infopanel(lapos_x, lapos_y, 6,  "HMA3 on TF " + Resolution3 + "  = " + tostring(HMA3,"#.####") + (H2UP ? " BUY" : " SELL"))
f_draw_infopanel(lapos_x, lapos_y, 4,  "HMA2 on TF " + Resolution2 + "  = " +  tostring(HMA2,"#.####") + (H1UP ? " BUY" : " SELL"))
f_draw_infopanel(lapos_x, lapos_y, 2,  "HMA1 on TF " + timeframe.period + "  = " + tostring(HMA,"#.####") + (HUP ? " BUY" : " SELL"))
f_draw_infopanel(lapos_x, lapos_y, 0,  "╔═════════ HMA(" + tostring(Period,"#") +") ════════╗")
change_color=HMA>HMA3?color.green:color.red
change_color2=HMA2>HMA3?color.lime:color.yellow
plot1=plot(HMA3,color=change_color2,title="3 Hull MA Line",linewidth=2,transp=75)
plot2=plot(HMA2,color=change_color,title="2 Hull MA Line",linewidth=2,transp=75)
plot3=plot(HMA,color=color.white,title="Hull MA Line",linewidth=2,transp=75)
fill(plot1,plot3,color=change_color,transp=90)
fill(plot2,plot3,color=change_color2,transp=75)
if (H2UP and H1UP and HUP)
    strategy.entry("BUY",strategy.long)
if (not H2UP and not H1UP and not HUP)
    strategy.entry("SELL",strategy.short)

Thêm nữa