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 đượ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.
Những lợi thế của chiến lược này bao gồm:
Ngoài ra còn có một số rủi ro với chiến lược này:
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.
Chiến lược có thể được tăng cường từ các khía cạnh sau:
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.
Thêm một Thời gian xác thực để tránh giao dịch sai ngắn hạn.
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.
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.
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.
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)