Chiến lược chuyển động trung bình của thân tàu

Tác giả:ChaoZhang, Ngày: 2024-03-22 14:57:10
Tags:

img

Tổng quan

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

Nguyên tắc

  1. Tính toán trung bình động của thân tàu (HMA)

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

  • Đầu tiên, tính toán Trung bình Di chuyển Cân nhắc (WMA) của giá với một khoảng thời gian là một nửa tham số đầu vào length
  • Sau đó, tính toán WMA của WMA trước đó với khoảng thời gian length
  • Sử dụng công thức: HMA = 2 * WMA (chiều dài/2) - WMA (chiều dài)
  • Tính toán WMA của kết quả trên một lần nữa với một giai đoạn của gốc vuông của length để có được HMA cuối cùng
  1. Tạo tín hiệu giao dịch
  • Khi giá đóng vượt trên HMA, một tín hiệu mua được tạo ra
  • Khi giá đóng cửa vượt qua dưới HMA, một tín hiệu bán được tạo ra
  1. Thực hiện giao dịch dựa trên tín hiệu
  • Tín hiệu mua: Mở một vị trí dài
  • Tín hiệu bán: Mở một vị trí ngắn

Ưu điểm

  1. So với Mức trung bình di chuyển đơn giản và Mức trung bình di chuyển cân nhắc, Mức trung bình di chuyển Hull có độ trễ ít hơn, do đó nó có thể phản ứng nhanh hơn với những thay đổi giá, cải thiện khả năng đáp ứng của chiến lược.

  2. Bằng cách sử dụng sự chéo chéo của hai HMA với thời gian khác nhau để tạo tín hiệu, rất nhiều tiếng ồn và tín hiệu sai có thể được lọc hiệu quả, tăng độ tin cậy của tín hiệu.

  3. Các tham số có thể điều chỉnh. Bằng cách điều chỉnh các tham số thời gian của HMA, chiến lược có thể được điều chỉnh cho các thị trường và công cụ giao dịch khác nhau.

Rủi ro

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

  2. Chọn tham số không phù hợp có thể dẫn đến hiệu suất chiến lược kém. Nếu thời gian quá dài, chiến lược sẽ chậm phản ứng; nếu thời gian quá ngắn, nó có thể dẫn đến tín hiệu sai quá mức.

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

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

  1. 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 bộ 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 thêm tính hợp lệ của các tín hiệu chéo HMA.

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

  3. Kết hợp các cơ chế dừng lỗ và lấy lợi nhuận vào chiến lược để kiểm soát rủi ro và lợi nhuận của mỗi giao dịch.

  4. Xem xét xu hướng của thị trường. Bằng cách giới thiệu các chỉ số để đánh giá xu hướng thị trường, người ta có thể giao dịch trên các thị trường xu hướng và tránh các thị trường bên.

Tóm lại

Chiến lược Hull Moving Average Crossover là một chiến lược giao dịch đơn giản và dễ sử dụng. Với đặc điểm phản ứng nhanh của HMA, nó có thể nắm bắt sự thay đổi giá theo thời gian. Tuy nhiên, giống như tất cả các chiến lược, nó cũng có những hạn chế của nó và hiệu suất của nó sẽ bị ảnh hưởng bởi các loại thị trường và 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 thêm các tín hiệu. Đồng thời, các biện pháp kiểm soát rủi ro hợp lý, chẳng hạn như dừng lỗ và lấy lợi nhuận, quản lý vị trí, vv, cũng là những phần không thể thiếu cho hoạt động ổn định của 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)


Thêm nữa