Chiến lược giao cắt đường trung bình động Hull


Ngày tạo: 2024-03-22 14:57:10 sửa đổi lần cuối: 2024-03-22 14:57:10
sao chép: 2 Số nhấp chuột: 1150
1
tập trung vào
1617
Người theo dõi

Chiến lược giao cắt đường trung bình động Hull

Tổng quan về chiến lược

Chiến lược này dựa trên tín hiệu giao dịch chéo của đường trung bình di chuyển Hull (Hull Moving Average, HMA). Đường trung bình di chuyển Hull là một chỉ số kỹ thuật nhằm giảm độ trễ của đường trung bình di chuyển, được phát triển bởi Alan Hull. Chiến lược này sử dụng hai đường HMA có chu kỳ khác nhau, tạo ra tín hiệu mua khi HMA có chu kỳ ngắn hơn đi từ dưới lên qua HMA có chu kỳ dài hơn và ngược lại tạo ra tín hiệu bán.

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

  1. Tính toán Hull Moving Average (HMA)

HMA được tính như sau:

  • Trung bình di chuyển có trọng lượng (WMA) trước khi tính giá, chu kỳ là một nửa chiều dài tham số đầu vào
  • Sau đó, tính WMA của WMA đó, với chu kỳ là length
  • Sử dụng công thức: HMA = 2 * WMA ((length/2) - WMA ((length)
  • Kết quả trên được tính WMA một lần nữa, với chu kỳ là gốc vuông của độ dài, để có được HMA cuối cùng
  1. Tạo tín hiệu giao dịch
  • HMA tạo ra tín hiệu mua khi giá đóng cửa
  • HMA được tạo ra khi giá đóng cửa dưới mức HMA
  1. Thực hiện giao dịch theo tín hiệu giao dịch
  • Dấu hiệu mua: Đặt nhiều đầu
  • Dấu hiệu bán: Vị trí mở đầu

Lợi thế chiến lược

  1. Hull Moving Average có độ trễ nhỏ hơn so với Simple Moving Average và Weighted Moving Average, do đó có thể phản ứng nhanh hơn với sự thay đổi giá, tăng độ nhạy cảm của chiến lược.

  2. Tạo tín hiệu bằng cách chéo hai đường HMA với chu kỳ khác nhau, có thể lọc một số tiếng ồn và tín hiệu giả, tăng độ tin cậy của tín hiệu.

  3. Các tham số có thể điều chỉnh, có thể phù hợp với các thị trường khác nhau và các loại giao dịch bằng cách điều chỉnh các tham số chu kỳ của HMA.

Rủi ro chiến lược

  1. Trung bình di chuyển của Hull là một chỉ số chậm trễ, có thể phát ra tín hiệu sai trong giai đoạn đầu của xu hướng đảo ngược.

  2. Lựa chọn tham số không đúng có thể dẫn đến hiệu suất chiến lược kém. Lựa chọn quá dài có thể làm cho chiến lược phản ứng chậm, và quá ngắn có thể dẫn đến quá nhiều tín hiệu giả.

  3. Giống như tất cả các chiến lược dựa trên chỉ số duy nhất, chiến lược này có thể không hoạt động tốt trong thị trường chấn động, tạo ra nhiều tín hiệu giả và giao dịch thua lỗ.

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

  1. Có thể xem xét việc đưa ra các chỉ số kỹ thuật hoặc các yếu tố cơ bản khác làm điều kiện lọc, chẳng hạn như khối lượng giao dịch, chỉ số xu hướng, v.v., để xác nhận hơn nữa hiệu quả của tín hiệu chéo HMA.

  2. Đối với tối ưu hóa tham số, có thể sử dụng thuật toán di truyền, tìm kiếm lưới và các phương pháp khác để tìm các tham số tối ưu hóa trên dữ liệu lịch sử để tìm các tham số phù hợp nhất với thị trường hiện tại.

  3. Trong chiến lược này, các cơ chế dừng lỗ và ngăn chặn sẽ kiểm soát rủi ro và lợi nhuận của một giao dịch.

  4. Xem xét xu hướng của thị trường, bạn có thể đánh giá các chỉ số bằng cách đưa ra xu hướng thị trường, giao dịch trong thị trường xu hướng, tránh thị trường xung đột.

Tóm tắt

Chiến lược chéo trung bình di chuyển của Hull là một chiến lược giao dịch đơn giản, dễ sử dụng, có thể nắm bắt sự thay đổi giá trong thời gian tương đối kịp thời thông qua tính năng phản ứng nhanh của HMA. Tuy nhiên, giống như tất cả các chiến lược, nó cũng có những hạn chế, hiệu suất sẽ bị ảnh hưởng bởi loại thị trường, lựa chọn tham số. Trong ứng dụng thực tế, nó có thể được kết hợp với các phương pháp phân tích khác để xác nhận tín hiệu hơn nữa.

Mã nguồn chiến lược
/*backtest
start: 2023-03-16 00:00:00
end: 2024-03-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Basic Hull Ma Pack tinkered by InSilico 
strategy("RKTD BETA - Hull Suite by InSilico", overlay=true)

//INPUT
src = input(close, title="Source")
modeSwitch = input("Ehma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(200, title="Length(180-200 for floating S/R , 55 for swing entry)")
lengthMult = input(1.0, title="Length multiplier (Used to view higher timeframes with straight band)")

useHtf = input(false, title="Show Hull MA from X timeframe? (good for scalping)")
htf = input("240", title="Higher timeframe", type=input.resolution)

switchColor = input(true, "Color Hull according to trend?")
candleCol = input(false,title="Color candles based on Hull's Trend?")
visualSwitch  = input(true, title="Show as a Band?")
thicknesSwitch = input(1, title="Line Thickness")
transpSwitch = input(40, title="Band Transparency",step=5)

// Alert Messages
longAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "long", "orderType": "market", "close":true}'
shortAlertMessage = '{"base": "BTC", "quote": "USDT", "price": ' + tostring(close) + ', "action": "short", "orderType": "market", "close":true}'

//FUNCTIONS
//HMA
HMA(_src, _length) =>  wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>  ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA    
THMA(_src, _length) =>  wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length)
    
//SWITCH
Mode(modeSwitch, src, len) =>
      modeSwitch == "Hma"  ? HMA(src, len) :
      modeSwitch == "Ehma" ? EHMA(src, len) : 
      modeSwitch == "Thma" ? THMA(src, len/2) : na

//OUT
_hull = Mode(modeSwitch, src, int(length * lengthMult))
HULL = useHtf ? security(syminfo.ticker, htf, _hull) : _hull
MHULL = HULL[0]
SHULL = HULL[2]

//COLOR
hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800

//PLOT
///< Frame
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
alertcondition(crossover(MHULL, SHULL), title="Hull trending up.", message="Hull trending up.")
alertcondition(crossover(SHULL, MHULL), title="Hull trending down.", message="Hull trending down.")
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)

// Define Buy and Sell Conditions based on crossovers
buyCondition = crossover(MHULL, SHULL)
sellCondition = crossunder(MHULL, SHULL)

// Plotting the Hull Moving Average (HMA)
plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch)
plot(SHULL, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=transpSwitch)
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)

// Execute Strategy based on Buy and Sell Conditions
strategy.entry("Buy", strategy.long, when=buyCondition, alert_message=longAlertMessage)
strategy.entry("Sell", strategy.short, when=sellCondition, alert_message=shortAlertMessage)

// Additional elements like bar coloring remain unchanged
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)