Chiến lược giao dịch chuyển động trung bình là một chiến lược giao dịch định lượng tương đối phổ biến. Chiến lược này tạo ra tín hiệu giao dịch bằng cách tính toán trung bình chuyển động của các giai đoạn khác nhau và theo tình huống giao dịch của họ. Cụ thể, nó tính toán các trung bình chuyển động theo cấp số nhân (EMA) của 4 giai đoạn, 8 giai đoạn và 20 giai đoạn. Khi EMA ngắn hạn vượt qua EMA dài hạn, đi dài; khi EMA ngắn hạn vượt dưới EMA dài hạn, đi ngắn.
Logic cốt lõi của chiến lược này là:
Thông qua phương pháp này, chúng tôi tận dụng sự chéo chéo giữa các đường trung bình động giai đoạn khác nhau để đánh giá tín hiệu thị trường, và sử dụng hướng của đường trung bình động giai đoạn dài nhất để lọc các tín hiệu sai, xây dựng một chiến lược giao dịch ổn định.
Những lợi thế chính của chiến lược này là:
Ngoài ra còn có một số rủi ro với chiến lược này:
Các giải pháp chính là:
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tối ưu hóa thời gian: Xác định sự kết hợp thời gian MA tối ưu theo các giống khác nhau.
Tối ưu hóa dừng lỗ: Đặt các điểm dừng lỗ hợp lý để kiểm soát lỗ đơn.
Tối ưu hóa tham số: Tối ưu hóa các tham số một cách năng động bằng cách sử dụng các thuật toán di truyền, chuỗi Markov, v.v.
Phối hợp mô hình: Kết hợp với LSTM, RNN và các mô hình học sâu khác để chiết xuất thêm Alpha.
Tối ưu hóa danh mục đầu tư: Kết hợp với các chiến lược chỉ số kỹ thuật khác để xây dựng danh mục đầu tư chiến lược.
Nói chung, chiến lược chéo trung bình động là một chiến lược giao dịch định lượng tương đối cổ điển và thường được sử dụng. Chiến lược này có logic đơn giản và dễ hiểu và thực hiện, với sự ổn định nhất định. Nhưng cũng có một số vấn đề, chẳng hạn như tạo ra tín hiệu sai, không thể thích nghi với những thay đổi của thị trường, v.v. Những vấn đề này có thể được cải thiện thông qua tối ưu hóa tham số, tối ưu hóa dừng lỗ, hợp nhất mô hình và các phương pháp khác.
/*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=3 //future strategy //strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05) //stock strategy strategy(title = "stub", overlay = true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000) testStartYear = input(1900, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = input(2018, "Backtest Start Year") testEndMonth = input(12, "Backtest Start Month") testEndDay = input(1, "Backtest Start Day") testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testPeriod() => true ema1 = ema(close,4) ema2 = ema(close,8) ema3 = ema(close,20) go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1] exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1] go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1] exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1] if testPeriod() strategy.entry("simpleBuy", strategy.long, when=go_long) strategy.exit("simpleBuy", "simpleSell",when=exit_long) strategy.entry("simpleSell", strategy.short,when=go_short) strategy.exit("simpleSell", "simpleSell",when=exit_short)