Chiến lược giao dịch chéo trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2023-11-27 15:32:57
Tags:

img

Tổng quan

Chiến lược này tạo ra tín hiệu mua và bán dựa trên sự chéo chéo của hai đường trung bình động với các thiết lập tham số khác nhau. Khi đường trung bình động ngắn hơn vượt qua đường trung bình động dài hơn từ dưới, một tín hiệu mua được tạo ra. Khi đường trung bình động ngắn hơn vượt qua đường trung bình động dài hơn từ trên, một tín hiệu bán được tạo ra.

Chiến lược logic

Chiến lược được viết bằng chữ Pine. Nó đầu tiên xác định hai đường trung bình động, tên là p1 và p2, với loại, chiều dài và nguồn giá có thể tùy chỉnh thông qua đầu vào. Ở đây p1 đại diện cho thời gian ngắn hơn MA và p2 đại diện cho thời gian dài hơn MA.

Các chức năng chéo và chéo được sử dụng để phát hiện chéo giữa hai MAs. Khi p1 vượt qua p2 từ dưới, một tín hiệu mua được tạo ra. Khi p1 vượt qua dưới p2 từ trên, một tín hiệu bán được tạo ra.

Để thực hiện giao dịch, chiến lược sẽ vào các vị trí dài hoặc ngắn bằng cách sử dụng chiến lược. khi các tín hiệu được kích hoạt. Nếu đầu vào ShortOnly được bật, chỉ có tín hiệu bán sẽ được giao dịch.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Quy tắc rõ ràng, dễ hiểu và thực hiện
  2. MA crossover là một tín hiệu giao dịch cổ điển và được biết đến rộng rãi
  3. Các loại MA, chiều dài và nguồn giá có thể tùy chỉnh cao
  4. Có thể giao dịch chỉ bán tín hiệu với tần suất giao dịch thấp hơn

Phân tích rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Nhiều đường chéo không hợp lệ có thể xảy ra trong các thị trường hỗn loạn, dẫn đến giao dịch quá mức.
  2. Các thông số cần tối ưu hóa cho các sản phẩm và khung thời gian khác nhau.
  3. Không thể xác định hướng xu hướng, có thể giao dịch chống lại xu hướng.

Các rủi ro có thể được giảm bằng cách điều chỉnh chiều dài MA, thêm các điều kiện lọc vv. Các chỉ số xu hướng cũng có thể được thêm để xác định thiên vị thị trường.

Cơ hội gia tăng

Chiến lược có thể được tăng cường từ các khía cạnh sau:

  1. Sử dụng VWAP hoặc giá điển hình làm nguồn giá để làm cho tín hiệu chéo đáng tin cậy hơn.

  2. Thêm một Thời gian xác thực để tránh giao dịch sai ngắn hạn.

  3. Bao gồm các điểm dừng ATR dựa trên mức lỗ tối đa có thể chấp nhận được theo biến động thị trường.

  4. Tối ưu hóa tham số thông qua điều chỉnh đường cong để tìm kết hợp tối ưu.

  5. Chỉ xem xét các tín hiệu theo hướng của xu hướng khung thời gian cao hơn.

Tóm lại

Chiến lược chéo MA đôi dễ hiểu và thực hiện, tạo ra các tín hiệu giao dịch từ hai chéo MA với khả năng tùy chỉnh cao. Nhưng nó cũng có thể tạo ra các tín hiệu không hợp lệ quá nhiều trong thời gian thị trường hỗn loạn. Rủi ro có thể được giảm thông qua tối ưu hóa tham số và logic với nhiều cơ hội nâng cao, đáng nghiên cứu thêm.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 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/
// © RafaelPiccolo

//@version=4
strategy("Double MA Cross", overlay=true)

type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)

type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)

shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)

shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)


Thêm nữa