Chiến lược giao dịch chênh lệch hai đường trung bình động
Tổng quan
Chiến lược này dựa trên chênh lệch đường trung bình động của hai đường trung bình động để tạo ra tín hiệu giao dịch. Nó tính toán hai đường trung bình động với chu kỳ nhanh và chu kỳ chậm. Khi đường nhanh vượt lên trên đường chậm từ dưới lên, tín hiệu mua được tạo ra; khi đường nhanh cắt xuống dưới đường chậm từ trên xuống, tín hiệu bán được tạo ra.
Nguyên lý
Logic cốt lõi của chiến lược này là tính toán hai đường trung bình động SMA(len1) và SMA(len2), cùng với chênh lệch dif của chúng. Trong đó len1 đại diện cho chu kỳ đường trung bình ngắn hạn, len2 đại diện cho chu kỳ đường trung bình dài hạn. Đường trung bình ngắn hạn phản ứng nhanh hơn với biến động giá, trong khi đường trung bình dài hạn phản ánh xu hướng dài hạn.
Khi đường trung bình ngắn hạn cắt lên trên đường trung bình dài hạn từ dưới lên, điều đó cho thấy giá ngắn hạn bắt đầu tăng vượt xu hướng dài hạn, có thể mua vào; khi cắt xuống dưới đường trung bình dài hạn từ trên xuống, điều đó cho thấy giá ngắn hạn bắt đầu giảm thấp hơn xu hướng dài hạn, có thể bán ra.
Để lọc các tín hiệu sai, chiến lược còn đưa vào out3 làm đường tín hiệu giao dịch. out3 là kết quả của việc làm mịn SMA từ chênh lệch giữa đường trung bình ngắn hạn và giá trị trung bình của giá. Chỉ khi out3 vượt qua dif mới tạo ra tín hiệu giao dịch.
Cụ thể, biến long mang giá trị dương khi out3 cắt lên trên dif, đóng vai trò là tín hiệu mua; biến short mang giá trị âm khi out3 cắt xuống dưới dif, đóng vai trò là tín hiệu bán. strategy.entry tạo lệnh mua dựa trên tín hiệu long, strategy.close tạo lệnh đóng vị thế bán dựa trên tín hiệu short.
Ưu điểm
Đây là một chiến lược theo dõi xu hướng rất đơn giản và trực quan. Nó sử dụng sự giao nhau của hai đường trung bình động với chu kỳ khác nhau để nắm bắt điểm chuyển đổi xu hướng, giúp đáng tin cậy hơn so với hệ thống một đường trung bình. Ngoài ra, việc đưa vào bộ lọc đường tín hiệu có thể tránh được phần nào các tín hiệu giả phát sinh trong thị trường đi ngang.
So với các phương pháp như cắt lỗ động, nó áp dụng triết lý theo dõi xu hướng, cho phép tối đa hóa lợi nhuận và không bị thoát lệnh khi xu hướng kéo dài. Đồng thời, nó cũng kiểm soát thua lỗ bằng cách đóng vị thế kịp thời khi xu hướng đảo chiều.
Chiến lược này có ít tham số, dễ nắm bắt và điều chỉnh, phù hợp làm chiến lược nhập môn cho người mới học giao dịch thuật toán.
Rủi ro và cải tiến
Rủi ro lớn nhất của chiến lược này đến từ việc lựa chọn tham số chu kỳ đường trung bình không phù hợp, dẫn đến tín hiệu giao dịch sai. Nếu chu kỳ đường trung bình ngắn hạn len1 quá dài, sẽ bỏ lỡ cơ hội ở giai đoạn đầu của xu hướng; nếu quá ngắn, sẽ tăng xác suất tín hiệu giả. Nếu chu kỳ đường trung bình dài hạn len2 quá dài, sẽ làm chậm việc điều chỉnh vị thế; nếu quá ngắn, dễ bị nhiễu loạn thị trường.
Có thể điều chỉnh tham số len1 và len2 để tìm ra tổ hợp tối ưu, hoặc thử nghiệm đưa vào đường trung bình động thích ứng để điều chỉnh chu kỳ linh hoạt. Ngoài ra, có thể tối ưu hóa tham số bộ lọc để giảm tín hiệu giả.
Chiến lược theo dõi xu hướng cũng cần chú ý kiểm soát quy mô thua lỗ trên mỗi giao dịch, có thể thiết lập điểm cắt lỗ hoặc đưa vào quản lý vị thế để tối ưu hóa.
Tổng kết
Chiến lược chênh lệch hai đường trung bình động là một đại diện rất điển hình của chiến lược theo dõi xu hướng. Hệ thống giao nhau hai đường trung bình đơn giản mang lại nguồn tín hiệu ổn định, kết hợp với bộ lọc có thể tránh hiệu quả bị nhiễu loạn thị trường. Bằng cách tối ưu hóa tham số chu kỳ đường trung bình, có thể đạt được hiệu suất chiến lược tốt. Chiến lược này rất phù hợp làm chiến lược nhập môn để học giao dịch thuật toán.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//by afrazium
//@version=3
strategy(title="SMA Diff strat", shorttitle="SMAD STR", overlay=false, initial_capital=1, precision=8, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, calc_on_order_fills= false, calc_on_every_tick=false, pyramiding=0)
len1 = input(50, minval=1, title="Length1"), len2 = input(100, minval=1, title="Length2"), smo = input(1, minval=1, title="Smoothing")- 1

