
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.
HMA được tính như sau:
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.
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.
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.
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.
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ả.
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ỗ.
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.
Đố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.
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.
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.
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.
/*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)