Chiến lược giao dịch đường trung bình động Hull xuyên thời gian


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

Chiến lược giao dịch đường trung bình động Hull xuyên thời gian

Tổng quan

Chiến lược này dựa trên chỉ số trung bình di chuyển Hull, tính Hull MA trên các đường thời gian khác nhau và so sánh Hull MA trên các đường thời gian khác nhau để phát hiện ra sự thay đổi trong xu hướng. Khi Hull MA có chu kỳ ngắn tạo ra tín hiệu mua khi Hull MA có chu kỳ dài; Khi Hull MA có chu kỳ ngắn dưới chu kỳ dài tạo ra tín hiệu bán.

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

  1. Các tham số đầu vào: chu kỳ Hull MA Period, trục thời gian của HMA2 Resolution2, trục thời gian của HMA3 Resolution3

  2. Tính HMA của Hull trên đường K hiện tại

  3. Tính Hull MA HMA2 trên Resolution2

  4. Tính Hull MA HMA3 trên Resolution3

  5. So sánh HMA, HMA2 và HMA3

  6. Khi HMA>HMA2>HMA3, tạo ra một tín hiệu mua

  7. Khi HMA

  8. Hull MA giá trị và tín hiệu trên các trục thời gian khác nhau được hiển thị ở phía trên bên trái của giao diện

  9. Sử dụng màu sắc để phân biệt trạng thái thăng trầm

Phân tích lợi thế

  1. Sử dụng nhiều thời gian có thể lọc các đột phá giả để tránh bị mắc kẹt.

  2. Bạn có thể tùy chỉnh các tham số về đường thời gian cho các chu kỳ khác nhau.

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

  4. Hull MA: Hull MA được sử dụng để hình dung xu hướng hiện tại.

Phân tích rủi ro

  1. Thiết lập tham số không đúng có thể dẫn đến giao dịch quá thường xuyên.

  2. Chu kỳ Hull MA có sự chậm trễ, có thể bỏ lỡ điểm chuyển hướng.

  3. Khi bò và gấu chuyển đổi, chiến thuật sẽ tạo ra tín hiệu giả.

  4. Chiến lược đột phá, dễ bị giả mạo đột phá.

  5. Không tính phí giao dịch, ảnh hưởng đến lợi nhuận thực tế.

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

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

  1. Tối ưu hóa các tham số chu kỳ Hull MA để thích ứng với các chu kỳ và tỷ lệ dao động khác nhau.

  2. Tăng khả năng đánh giá số lượng giao dịch, tránh các đột phá giả mạo.

  3. Tăng các chỉ số rung động để xác định cường độ của xu hướng.

  4. Thêm mô hình học máy để xác định thời gian mua và bán.

  5. Kết hợp với các chỉ số cảm xúc, tìm ra điểm nóng của thị trường.

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

  7. Tùy chỉnh các điều kiện mua và bán, kết hợp các tín hiệu chỉ số khác.

  8. Thêm chiến lược giao dịch dựa trên kênh giá và dải giá.

Tóm tắt

Chiến lược này dựa trên các chỉ số Hull MA so sánh xu hướng trung bình trên các trục thời gian khác nhau, đánh giá hướng xu hướng hiện tại, và khi xu hướng biến đổi, tạo ra tín hiệu mua và bán. So với đường trung bình đơn, Hull MA có nhiều trục thời gian có thể lọc hiệu quả phá vỡ giả. Tuy nhiên, chiến lược này cũng có các vấn đề về thiết lập tham số, đánh giá xu hướng. Bằng cách tích hợp nhiều chỉ số, tối ưu hóa thiết lập tham số và cải thiện chiến lược dừng lỗ, bạn có thể tăng cường khả năng chiến lược và kiểm soát rủi ro.

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