Chiến lược kết hợp chỉ báo hướng và đường trung bình động thân tàu


Ngày tạo: 2024-01-04 17:23:06 sửa đổi lần cuối: 2024-01-04 17:23:06
sao chép: 0 Số nhấp chuột: 688
1
tập trung vào
1621
Người theo dõi

Chiến lược kết hợp chỉ báo hướng và đường trung bình động thân tàu

Tổng quan

Chiến lược này sử dụng sự kết hợp của chỉ số di chuyển (DMI) và trung bình di chuyển Hull (HMA) để sử dụng DMI để xác định hướng thị trường, HMA xác nhận sức mạnh của xu hướng và giao dịch không có rủi ro.

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

  1. Tính true range, DIPlus, DIMinus và ADX.

  2. Tính trung bình Hull nhanh ((fasthull) và trung bình Hull chậm ((slowhull))

  3. Trigger nhiều điều kiện: DIPlus mặc DIMinus và fasthull mặc slowhull

  4. Điều kiện tạo khoảng trống: DIMinus đi qua DIPlus và fasthull đi qua slowhull

  5. Sau khi đáp ứng điều kiện làm nhiều và làm trống, các tín hiệu làm nhiều và làm trống được phát ra.

Phân tích lợi thế

Chiến lược này kết hợp với sự xác nhận kép của chỉ số định xu hướng DMI và đường trung bình của Hull, có thể xác định hiệu quả hướng xu hướng thị trường, tránh sự lặp lại của thị trường nhiều đầu và thị trường trống. Quản lý không rủi ro làm giảm tần suất giao dịch và mức lợi nhuận tổng thể tốt trong thời gian dài.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là thiết lập không dừng lỗ, không thể kiểm soát lỗ hiệu quả khi thị trường có biến động mạnh. Ngoài ra, không gian tối ưu hóa tham số hạn chế và không có mục tiêu là một nhược điểm lớn.

Có thể giảm rủi ro bằng cách thêm các phương tiện như dừng di chuyển, tối ưu hóa các tham số.

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

  1. Thêm ATR dừng, sử dụng real bandwidth trailing dừng.

  2. Tối ưu hóa tham số chu kỳ Hull để tìm sự kết hợp tốt nhất.

  3. Hoạt động điều chỉnh các tham số giới hạn làm nhiều trống.

  4. Thêm các bộ lọc như chỉ số năng lượng để đảm bảo xu hướng tiếp tục.

Tóm tắt

Chiến lược kết hợp của DMI và HMA, phán đoán chính xác, đơn giản và hiệu quả, phù hợp cho hoạt động đường dài và trung bình. Sau khi thêm vào các điểm dừng và tham số thích hợp, nó có thể trở thành một hệ thống theo dõi xu hướng rất tuyệt vời.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tuned_Official
//@version=4
strategy(title="DMI + HMA - No Risk Management", overlay = false, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.025)

//Inputs
hullLen1 = input(title="Hull 1 length", type=input.integer, defval=29)
hullLen2 = input(title="Hull 2 length", type=input.integer, defval=2)
len = input(title="Length for DI", type=input.integer, defval=76)

//Calculations
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0

SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

//Indicators
fasthull = hma(close, hullLen1)
slowhull = hma(close, hullLen2)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

//Plots
plot(DIPlus, color=color.green, title="DI+")
plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")

//conditions
go_long = crossover(DIPlus, DIMinus) and fasthull > slowhull //crossover(fasthull, slowhull) and DIPlus > DIMinus
go_short = crossover(DIMinus, DIPlus) and fasthull < slowhull //crossunder(fasthull, slowhull) and DIMinus > DIPlus

//Entry
if strategy.position_size < 0 or strategy.position_size == 0
    strategy.order("long", strategy.long, when=go_long)

if strategy.position_size > 0 or strategy.position_size == 0
    strategy.order("Short", strategy.short, when=go_short)