Chiến lược giao dịch trung bình di chuyển kép là một chiến lược giao dịch định lượng sử dụng trung bình di chuyển kép như tín hiệu giao dịch. Nó dựa trên phương pháp phân tích kỹ thuật truyền thống sử dụng một đường trung bình di chuyển duy nhất và thay thế nó bằng trung bình di chuyển kép để đưa ra các quyết định dài và ngắn tại các điểm chéo.
Cốt lõi của chiến lược giao dịch trung bình chuyển động hai thân là trung bình chuyển động hai thân (DHMA). DHMA bao gồm ba dòng: đường ray giữa, trên và dưới, đại diện cho các giá trị giá trung bình khác nhau.
Đường sắt trung tâm: Mode ((modeSwitch, src, len)
Đường sắt trên: HULL[0]
Đường sắt dưới: HULL [2]
Ở đây hàm Mode có thể chọn giữa các biến thể Hull MA khác nhau như HMA, EHMA hoặc THMA. Src là nguồn giá, và len là tham số thời gian.
Chiến lược sử dụng đường ray giữa của DHMA như một tham chiếu để xác định mối quan hệ giá và tạo ra các tín hiệu giao dịch:
Nói cách khác, nếu giá đóng cửa của thanh hiện tại cao hơn giá trị đường ray giữa, hãy mua dài trên thanh tiếp theo; nếu giá đóng cửa thấp hơn, đóng lệnh dài trên thanh tiếp theo.
Chiến lược giao dịch trung bình di chuyển hai khung có những lợi thế sau:
Sử dụng cơ chế ba dải thay vì một đường trung bình động duy nhất để có hiệu ứng hỗ trợ / kháng cự tốt hơn và theo dõi xu hướng.
So với các MAs thông thường, Các trung bình di chuyển Hull có sự chậm trễ ít hơn và phản ứng tốt hơn với những thay đổi giá.
Sử dụng các kỹ thuật phân tích kỹ thuật truyền thống để dễ hiểu, phù hợp với giao dịch algo.
Logic là đơn giản và rõ ràng, dễ thực hiện, phù hợp với giao dịch thuật toán tần số cao.
Các loại và tham số MA Hull có thể tùy chỉnh để tối ưu hóa trên các sản phẩm và khung thời gian khác nhau.
Mặc dù có nhiều ưu điểm, chiến lược này cũng đặt ra một số rủi ro cần lưu ý:
Các thông số điều chỉnh tinh tế để lọc ra một số giao dịch ồn ào.
Chiến lược chủ yếu theo xu hướng, ít hiệu quả hơn trong thời gian phẳng.
Hull MAs vẫn có một số mức độ chậm trễ, đặc biệt là trong thời gian ngắn.
Các tín hiệu thường xuyên có thể dẫn đến giao dịch quá mức.
Dưới đây là một số khía cạnh chính để tối ưu hóa cho chiến lược:
Tối ưu hóa các loại và tham số MA Hull để điều chỉnh độ nhạy của đường sắt giữa cho các sản phẩm khác nhau.
Thêm các cơ chế dừng lỗ như dừng lại hoặc dừng lỗ gia tăng để kiểm soát số tiền lỗ giao dịch duy nhất.
Kết hợp với các chỉ số khác để xác định hướng và sức mạnh của xu hướng, tránh những cái bẫy.
Thêm các điều kiện kích hoạt chiến lược dựa trên số lượng giao dịch hoặc tỷ lệ lợi nhuận để kiểm soát số lượng kết thúc chu kỳ, giảm việc thoát.
Sử dụng TF cao hơn để quyết định xu hướng tổng thể để tránh tiếng ồn.
Cải thiện logic nhập, xác nhận nhập bằng các mẫu nến để tăng độ chắc chắn nhập.
Tóm lại, Chiến lược giao dịch trung bình chuyển động hai khung (Dual Hull Moving Average Trading Strategy) là một phương pháp định lượng sử dụng phản ứng nhanh, theo xu hướng theo Trung bình chuyển động khung để xây dựng các tín hiệu giao dịch. So với các MAs truyền thống, nó có phản ứng nhanh hơn và khả năng theo dõi tốt hơn.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //Basic Hull Ma Pack tinkered by InSilico //Converted to Strategy by DashTrader strategy("Hull Suite Strategy", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0) ////////////////////////////////////////////////////////////////////// // Testing Start dates testStartYear = input(2016, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) //Stop date if you want to use a specific range of dates testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false // Component Code Stop ////////////////////////////////////////////////////////////////////// //INPUT HAClose = security(heikinashi(syminfo.tickerid), timeframe.period, close) src = input(close, title="Source") modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"]) length = input(55, title="Length(180-200 for floating S/R , 55 for swing entry)") 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) //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, length) 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) ///< Ending Filler fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch) ///BARCOLOR barcolor(color = candleCol ? (switchColor ? hullColor : na) : na) if HULL[0] > HULL[2] and testPeriod() strategy.entry("long", strategy.long) if HULL[0] < HULL[2] and testPeriod() strategy.close("long")