
Chiến lược giao dịch chéo trung bình di chuyển là một chiến lược giao dịch định lượng phổ biến hơn. Chiến lược này được tạo ra bằng cách tính toán các trung bình di chuyển của các chu kỳ khác nhau và tạo ra tín hiệu giao dịch dựa trên sự giao nhau của chúng. Cụ thể là tính toán các trung bình di chuyển chỉ số của 4 chu kỳ, 8 chu kỳ và 20 chu kỳ (EMA), làm nhiều hơn khi vượt qua EMA dài trên EMA ngắn hạn; làm trống khi EMA ngắn hạn phá vỡ EMA dài hạn.
Lập luận cốt lõi của chiến lược này là:
Bằng phương pháp này, chúng tôi sử dụng sự giao thoa giữa các đường trung bình chu kỳ khác nhau để đánh giá các tín hiệu của thị trường, đồng thời sử dụng hướng của đường trung bình chu kỳ dài nhất để lọc các tín hiệu sai lệch và xây dựng một chiến lược giao dịch ổn định.
Chiến lược này có một số ưu điểm:
Chiến lược này cũng có một số rủi ro:
Các giải pháp chính là:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa chu kỳ: Xác định kết hợp chu kỳ MA tốt nhất cho các giống khác nhau Tối ưu hóa dừng lỗ: thiết lập điểm dừng lỗ hợp lý, kiểm soát tổn thất đơn lẻ Tối ưu hóa tham số: sử dụng thuật toán di truyền, chuỗi Markov và các phương pháp tối ưu hóa tham số động
Tích hợp mô hình: tích hợp với các mô hình học sâu như LSTM, RNN, để lấy thêm Alpha
Tối ưu hóa danh mục: xây dựng danh mục chiến lược với các danh mục chiến lược khác
Chiến lược giao dịch số hóa trung bình di chuyển là một chiến lược giao dịch định lượng cổ điển và phổ biến hơn. Lập luận của chiến lược này đơn giản, dễ hiểu và thực hiện, có 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 ứng với sự thay đổi của thị trường. Những vấn đề này có thể được cải thiện bằng các phương pháp như tối ưu hóa tham số, tối ưu hóa dừng lỗ và kết hợp mô hình.
/*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)