Chiến lược giao dịch giữa các thị trường trung bình động kép

Tác giả:ChaoZhang, Ngày: 2023-10-24 16:55:38
Tags:

img

Tổng quan

Chiến lược này kết hợp các lợi thế của trung bình di chuyển Hull và trung bình di chuyển T3 để thiết kế một chiến lược giao dịch xuyên thị trường. Nó có thể được sử dụng cho cả giao dịch ngắn hạn và theo dõi xu hướng dài hạn. Bằng cách tính giá trị trung bình của trung bình di chuyển Hull và trung bình di chuyển T3 như đường tín hiệu giao dịch chính, nó xác định các điểm vào và ra dựa trên những thay đổi theo hướng.

Chiến lược logic

Chiến lược chủ yếu dựa trên tính toán trung bình di chuyển Hull và trung bình di chuyển T3.

Hull Moving Average (HMA) sử dụng phương pháp tính toán lặp đi lặp lại trung bình chuyển động cân nhắc để lọc hiệu quả tiếng ồn thị trường và hiển thị đường cong xu hướng giá trơn tru. Nó nhạy cảm hơn với sự thay đổi giá so với trung bình chuyển động đơn giản và trung bình chuyển động theo cấp số nhân, đồng thời cũng ngăn chặn hiệu quả các đột phá sai.

Trung bình động T3 phản ứng nhanh hơn với những thay đổi giá trong khi giảm sự chậm trễ bằng cách điều chỉnh các tham số.

Chiến lược này sử dụng trung bình của hai chỉ số giao dịch chính. Nó đánh giá thời gian nhập theo hướng của đường trung bình này: nếu trung bình của giai đoạn hiện tại cao hơn giai đoạn trước, đó là tín hiệu nhập dài; nếu thấp hơn, đó là tín hiệu nhập ngắn.

Đối với các quy tắc thoát, nếu giá vượt qua điểm dừng lỗ hoặc lấy lợi nhuận, thoát; cũng thoát khi hướng trung bình động thay đổi.

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của trung bình di chuyển Hull và trung bình di chuyển T3 để tạo ra một chỉ số toàn diện. Tiếp theo, chiến lược này phù hợp cho cả giao dịch ngắn hạn và dài hạn bằng cách điều chỉnh tham số chu kỳ. Ngoài ra, nó áp dụng stop loss động và lấy lợi nhuận để khóa lợi nhuận và kiểm soát rủi ro.

Phân tích rủi ro

Chiến lược này dựa chủ yếu trên chỉ số trung bình động, có thể tạo ra nhiều tín hiệu sai trong xu hướng dao động. Ngoài ra, sự chậm trễ của trung bình động có thể bỏ lỡ thời gian vào tốt nhất. Các điểm dừng lỗ và lấy lợi nhuận cần phải được thiết lập cẩn thận để tránh quá lỏng lẻo hoặc quá chặt chẽ. Cuối cùng, các tham số cần tối ưu hóa cho các loại tiền tệ và khung thời gian khác nhau.

Tối ưu hóa

Xem xét thêm các chỉ số khác để xác minh tín hiệu MA và lọc ra các tín hiệu sai. Kiểm tra các kết hợp MA và thuật toán cân khác nhau để tối ưu hóa tín hiệu MA. Thêm stop loss thích nghi và trailing take profit để quản lý rủi ro một cách năng động. Tiến hành tối ưu hóa backtesting trên các loại tiền tệ và khung thời gian khác nhau để tìm các tập hợp tham số tối ưu.

Tóm lại

Chiến lược này tích hợp các điểm mạnh của trung bình chuyển động Hull và trung bình chuyển động T3 để tạo thành một chỉ số toàn diện để đánh giá hướng xu hướng. Thông qua tối ưu hóa tham số, chiến lược có thể được áp dụng linh hoạt cho các chu kỳ giao dịch khác nhau. Chiến lược có một số ưu điểm nhất định nhưng cũng có những vấn đề như chậm trễ và tín hiệu sai. Bằng cách thêm các chỉ số khác, tối ưu hóa các tham số và dừng động, nó có thể được cải thiện liên tục để có kết quả tốt hơn.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 1h
basePeriod: 15m
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/
// © exlux99

//@version=4


strategy(title="Swing HULL + T3 avg", shorttitle="Swing HULL T3 AVG", overlay=true)

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



////////////////////////////GENERAL INPUTS//////////////////////////////////////

length_Ma= input(defval=50, title="Length MAs", minval=1)

//==========HMA
getHULLMA(src, len) =>
    hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
    hullma

//==========T3
getT3(src, len, vFactor) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1,len)
    ema3 = ema(ema2,len)
    ema4 = ema(ema3,len)
    ema5 = ema(ema4,len)
    ema6 = ema(ema5,len)
    c1 = -1 * pow(vFactor,3)
    c2 = 3*pow(vFactor,2) + 3*pow(vFactor,3)
    c3 = -6*pow(vFactor,2) - 3*vFactor - 3*pow(vFactor,3)
    c4 = 1 + 3*vFactor + pow(vFactor,3) + 3*pow(vFactor,2)
    T3 = c1*ema6 + c2*ema5 + c3*ema4 + c4*ema3
    T3





hullma = getHULLMA(close,length_Ma)

t3 = getT3(close,length_Ma,0.7)


avg = (hullma+t3) /2


////////////////////////////PLOTTING////////////////////////////////////////////


colorado = avg > avg[1]? color.green : color.red

plot(avg , title="avg", color=colorado, linewidth = 4)

long=avg>avg[1]
short=avg<avg[1]

tplong=input(0.08, title="TP Long", step=0.01)
sllong=input(1.0, title="SL Long", step=0.01)

tpshort=input(0.03, title="TP Short", step=0.01)
slshort=input(0.06, title="SL Short", step=0.01)


if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")


Thêm nữa