Chiến lược này là một chiến lược chéo trung bình động điển hình sử dụng hai bộ trung bình động, một nhanh và một chậm. Khi trung bình di chuyển nhanh vượt qua trung bình di chuyển chậm, một tín hiệu mua được tạo ra. Khi nhanh vượt dưới chậm, một tín hiệu bán được tạo ra. Chiến lược sử dụng cả EMA và SMA cho các đường trung bình di chuyển, với EMA là đường nhanh và SMA là đường chậm. Sử dụng nhiều đường trung bình di chuyển có thể giúp lọc các tín hiệu sai và cải thiện độ tin cậy.
Logic cốt lõi dựa trên sự chéo chéo giữa các đường trung bình di chuyển nhanh và chậm để xác định các bước vào và ra.
Cụ thể, hai bộ trung bình di chuyển nhanh và chậm được tính:
Sau đó kiểm tra chéo giữa các EMA nhanh và SMA chậm:
Để lọc các tín hiệu sai, cần một sự chéo chéo EMA/SMA thứ hai để xác nhận:
Bằng cách yêu cầu hai chéo MA nhanh / chậm, nhiều tín hiệu sai có thể được lọc ra và cải thiện độ tin cậy.
Khi mua tín hiệu kích hoạt, đi dài. Khi bán tín hiệu kích hoạt, đi ngắn.
Chiến lược cũng thiết lập lợi nhuận và dừng lỗ dựa trên tỷ lệ phần trăm đầu vào từ giá đầu vào một lần trong một vị trí.
Những lợi thế của chiến lược này bao gồm:
Rủi ro của chiến lược:
Để kiểm soát rủi ro:
Chiến lược có thể được tối ưu hóa thêm bằng cách:
Tóm lại, chiến lược giao thoa MA kép tạo ra các tín hiệu với giao thoa MA nhanh / chậm, tập hợp lấy lợi nhuận và dừng lỗ để kiểm soát rủi ro, và đơn giản, trực quan và dễ thực hiện. Các tham số có thể được điều chỉnh và kết hợp với các chỉ số khác để có hiệu suất tốt hơn. Nó có lợi ích rất lớn trong giao dịch định lượng.
/*backtest start: 2023-02-20 00:00:00 end: 2024-02-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/ // © JMLSlop //@version=4 src = close strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false) // first fast EMA len = input(8, "Length", type=input.integer, minval=1) doma1 = input(true, title="EMA") out1 = ema(src, len) //Second fast EMA len2 = input(21, minval=1, title="Length") doma2 = input(true, title="EMA") out2 = ema(src, len2) //First slow MA len3 = input(50, minval=1, title="Length") doma3 = input(true, title="SMA") out3 = sma(src, len3) //Second slow MA len4 = input(200, minval=1, title="Length") doma4 = input(true, title="SMA") out4 = sma(src, len4) // Profit profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01 plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA") plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA") plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA") plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA") // Orders config takeProfitPrice = (strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na longStopPrice = strategy.position_avg_price * (1 - profit) shortStopPrice = strategy.position_avg_price * (1 + profit) longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3])))) if (longCondition2) strategy.entry("Enter L", strategy.long) shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3]))) if (shortCondition2) strategy.entry("Enter S", strategy.short) if (strategy.position_size > 0) strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice) if (strategy.position_size < 0) strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)