Chiến lược giao dịch trung bình di chuyển kép là một chiến lược giao dịch định lượng phổ biến. Chiến lược này sử dụng hai trung bình di chuyển với các khoảng thời gian khác nhau để tạo ra tín hiệu giao dịch dựa trên sự chéo chéo của chúng. Cụ thể, khi trung bình di chuyển ngắn hạn vượt trên trung bình di chuyển dài hạn, nó được coi là tín hiệu mua; khi trung bình di chuyển ngắn hạn vượt dưới trung bình di chuyển dài hạn, nó được coi là tín hiệu bán.
Nguyên tắc cốt lõi của chiến lược này là: trung bình di chuyển ngắn hạn phản ánh xu hướng ngắn hạn của giá tài sản, và trung bình di chuyển dài hạn phản ánh xu hướng dài hạn của giá tài sản. Khi đường ngắn hạn vượt qua trên đường dài hạn, nó cho thấy xu hướng ngắn hạn đã tăng lên, vào thời điểm này bạn có thể mua. Khi đường ngắn hạn vượt qua dưới đường dài hạn, nó cho thấy xu hướng ngắn hạn đã giảm xuống, vào thời điểm này bạn có thể bán. Theo xu hướng, nắm bắt bước ngoặt của xu hướng giá.
Cụ thể, chiến lược xác định hai đường trung bình động: đường trung bình động ngắn hạn 5 ngày để nắm bắt xu hướng giá ngắn hạn; và đường trung bình động dài hạn 15 ngày để đánh giá xu hướng giá dài hạn. Khi đường 5 ngày di chuyển trên đường 15 ngày, nó cho thấy giá ngắn hạn đã bắt đầu tăng, đó là tín hiệu mua; khi đường 5 ngày vượt qua dưới đường 15 ngày, nó cho thấy giá ngắn hạn bắt đầu giảm, đây là tín hiệu bán.
So với các chiến lược khác, chiến lược trung bình động kép có những lợi thế sau:
Chiến lược trung bình di chuyển kép cũng có một số rủi ro, chủ yếu bao gồm:
Giải pháp:
Chiến lược có thể được tối ưu hóa theo các hướng sau:
Kết hợp với các chỉ số khác như MACD, KDJ để lọc tín hiệu sai.
Đưa ra trung bình động thích nghi, điều chỉnh động các tham số dựa trên biến động thị trường để cải thiện độ bền.
Tối ưu hóa các thông số trung bình động để tìm kết hợp tốt nhất và cải thiện hiệu suất chiến lược.
Thêm cơ chế dừng lỗ để hạn chế lỗ và tăng cường kiểm soát rủi ro.
Kết hợp nhiều khung thời gian, sử dụng tín hiệu từ các đường hàng ngày và hàng tuần để cải thiện sự ổn định.
Chuyển đổi trạng thái Markov, sử dụng các tham số khác nhau trong các trạng thái thị trường khác nhau để cải thiện khả năng thích nghi.
Nói chung, chiến lược giao dịch trung bình động kép là khá hiệu quả và ổn định. Nguyên tắc giao dịch rất đơn giản để hiểu và thực hiện, các tham số linh hoạt để thích nghi với xu hướng thị trường. Trong khi đó, có một số hạn chế như tạo ra tín hiệu sai và khó xử lý biến động thị trường mạnh mẽ. Những điều này có thể được giải quyết thông qua việc giới thiệu các công cụ khác và tối ưu hóa tham số. Nói chung, đây là một chiến lược thực tế phù hợp cho người mới bắt đầu giao dịch định lượng để học và thực hành.
//@version=3 strategy("CS: 2 Moving Averages Script - Strategy (Testing)", overlay=true) // === GENERAL INPUTS === // short ma ma1Source = input(defval = close, title = "MA 1 Source") ma1Length = input(defval = 5, title = "MA 1 Period", minval = 1) // long ma ma2Source = input(defval = close, title = "MA 2 Source") ma2Length = input(defval = 15, title = "MA 2 Period", minval = 1) // === SERIES SETUP === /// a couple of ma's.. ma1 = ema(ma1Source, ma1Length) ma2 = ema(ma2Source, ma2Length) // === PLOTTING === fast = plot(ma1, title = "MA 1", color = red, linewidth = 2, style = line, transp = 30) slow = plot(ma2, title = "MA 2", color = green, linewidth = 2, style = line, transp = 30) // === LOGIC === enterLong = crossover(ma1, ma2) exitLong = crossover(ma2, ma1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2012) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // Entry // strategy.entry(id="Long Entry", long=true, when=enterLong and window()) strategy.entry(id="Short Entry", long=false, when=exitLong and window())