Chiến lược này tạo ra các tín hiệu giao dịch dựa trên sự khác biệt giữa hai đường trung bình động. Khi đường nhanh vượt qua đường chậm, một tín hiệu mua được tạo ra. Khi đường nhanh vượt qua đường chậm, một tín hiệu bán được tạo ra. Nó thuộc thể loại các chiến lược theo xu hướng. Chiến lược đơn giản và dễ hiểu, phù hợp với giao dịch trung hạn.
Chiến lược tính toán sự khác biệt giữa hai EMA với các thông số khác nhau, và sau đó tính toán một EMA khác dựa trên sự khác biệt này để tạo ra tín hiệu giao dịch. Cụ thể, nó chọn một giai đoạn, tính toán 2 lần EMA của giai đoạn/2 như đường nhanh, và EMA của giai đoạn như đường chậm. Sự khác biệt giữa hai EMA này tạo thành giá trị chênh lệch khác biệt. Sau đó nó tính toán EMA của chênh lệch dựa trên giai đoạn của sqrt ((period), dẫn đến đường chỉ số n1. Khi n1 vượt trên 0, một tín hiệu mua được tạo ra. Do đó, khi n1 vượt dưới 0, một tín hiệu bán được tạo ra. n1 phản ánh hướng xu hướng của chênh lệch, có thể được sử dụng để nắm bắt xu hướng giá.
Chiến lược này đơn giản và trực tiếp, sử dụng chỉ số chênh lệch trung bình động đôi để đánh giá xu hướng giá. Nó thuộc về một chiến lược theo xu hướng điển hình. Nó hoạt động tốt trong các thị trường xu hướng, nhưng có thể tạo ra tín hiệu sai trong các thị trường giới hạn phạm vi. Phán quyết xu hướng và quản lý rủi ro thích hợp nên được sử dụng cùng với chiến lược.
Chiến lược có những lợi thế sau:
Logic chiến lược đơn giản và trực quan, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu;
Chỉ số chênh lệch trung bình động nhạy cảm với sự thay đổi giá và có thể nắm bắt hiệu quả những thay đổi xu hướng;
Chiến lược có ít thông số và dễ dàng tối ưu hóa và điều chỉnh trong giao dịch thực tế;
Các chỉ số dài và ngắn hạn có thể được kết hợp để thích nghi với môi trường thị trường khác nhau;
Chiến lược dừng lỗ có thể được cấu hình theo sở thích rủi ro cá nhân để giảm lỗ.
Chiến lược này cũng có những rủi ro sau:
Tỷ lệ tín hiệu sai cao hơn trong các thị trường giới hạn phạm vi, xu hướng khung thời gian lớn hơn nên được xem xét;
Không thể xác định hiệu quả các điểm đảo ngược xu hướng, có một sự chậm trễ nhất định;
Các thông số của chỉ số khác biệt cần được theo dõi để tránh quá nhạy hoặc chậm;
Tần suất giao dịch cao có thể dẫn đến chi phí giao dịch cao hơn, cần kiểm soát kích thước vị trí.
Các giải pháp tương ứng là:
Kết hợp các đường trung bình động dài để xác định xu hướng chính, tránh nhập sai trong phạm vi;
Thêm các chỉ số đảo ngược để xác định các điểm vào và ra, giảm rủi ro chậm trễ;
Kiểm tra các kết hợp tham số để tìm các tham số tối ưu;
Tối ưu hóa các chiến lược dừng lỗ để giảm lỗ trên mỗi giao dịch.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Kiểm tra các kết hợp tham số trung bình động khác nhau để tìm các tham số tối ưu;
Thêm các chỉ số đánh giá xu hướng để phân biệt giữa xu hướng và thị trường giới hạn phạm vi;
Kết hợp các chỉ số đảo ngược để cải thiện độ chính xác nhập;
Tối ưu hóa các chiến lược dừng lỗ để giảm lỗ.
Kiểm tra các thông số giai đoạn khác nhau có thể cải thiện khả năng thích nghi của chiến lược với các điều kiện thị trường khác nhau. Thêm các bộ lọc xu hướng có thể làm giảm các tín hiệu sai. Các chỉ số đảo ngược có thể cải thiện thời gian đầu vào. Những tối ưu hóa này có thể tăng sự ổn định và lợi nhuận của chiến lược.
Chiến lược theo xu hướng dựa trên chênh lệch trung bình động có logic rõ ràng và dễ hiểu. Bằng cách đánh giá xu hướng giá bằng cách sử dụng chênh lệch trung bình động đôi, nó thuộc về một chiến lược theo đuổi xu hướng điển hình. Chính chiến lược rất đơn giản và dễ thực hiện, phù hợp với giao dịch trung hạn, đặc biệt là cho người mới bắt đầu nghiên cứu. Nhưng cũng có một số rủi ro nhất định với chiến lược cần phải được giảm thông qua tối ưu hóa. Với điều chỉnh tham số và kiểm soát rủi ro thích hợp, chiến lược có thể đạt được kết quả tốt.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='Devick', overlay=true) // Input parameters period = input(title='Period', defval=21) // Calculate moving averages n2ma = 2 * ta.ema(close, math.round(period / 2)) nma = ta.ema(close, period) diff = n2ma - nma sqn = math.round(math.sqrt(period)) n2maPrev = 2 * ta.ema(close[1], math.round(period / 2)) nmaPrev = ta.ema(close[1], period) diffPrev = n2maPrev - nmaPrev sqnPrev = math.round(math.sqrt(period)) n1 = ta.ema(diff, sqn) n2 = ta.ema(diffPrev, sqnPrev) // Determine color based on condition maColor = n1 > n2 ? color.green : color.red // Plot moving average ma = plot(n1, color=maColor, linewidth=2) // Signals buySignal = n1 > n2 and n1[1] <= n2[1] sellSignal = n1 <= n2 and n1[1] > n2[1] // Plot shapes for signals plotshape(series=buySignal, title='Buy Signal', style=shape.arrowup, location=location.belowbar, color=color.green, size=size.small) plotshape(series=sellSignal, title='Sell Signal', style=shape.arrowdown, location=location.abovebar, color=color.red, size=size.small) // Alerts alertcondition(condition=buySignal, title='Buy Signal', message='Buy Signal Detected') alertcondition(condition=sellSignal, title='Sell Signal', message='Sell Signal Detected') // Trading hours openHour = 16 closeHour = 17 // Open position at 4 pm openCondition = hour == openHour and minute == 0 strategy.entry("Buy", strategy.long, when=buySignal) strategy.entry("Sell", strategy.short, when=sellSignal) // Close all positions at 5 pm closeCondition = hour == closeHour and minute == 0 strategy.close_all(when=closeCondition)