Chiến lược giao dịch chéo trung bình chuyển động tạo ra tín hiệu mua và bán bằng cách tính toán chéo của đường EMA nhanh (fastLength) và đường EMA chậm (slowLength). 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. Chiến lược này đơn giản và thực tế, phù hợp với giao dịch trung và ngắn hạn.
Chiến lược này sử dụng hai đường trung bình động, đường nhanh và đường chậm. Các thông số đường nhanh EMAfastLength mặc định là đường 9 ngày, và các thông số đường chậm EMAslowLength mặc định là đường 26 ngày. Tính toán giao thoa của hai đường EMA để xác định tín hiệu mua và bán thị trường:
Các tín hiệu giao dịch cụ thể và các quy tắc chiến lược là như sau:
Vì vậy, chiến lược này giao dịch dựa trên đường chéo vàng và đường chéo chết của hai đường trung bình động.
Để giải quyết rủi ro, các tham số có thể được tối ưu hóa bao gồm chu kỳ trung bình động, đa dạng giao dịch, tỷ lệ lấy lợi nhuận và tỷ lệ dừng lỗ, v.v.
Ý tưởng chéo trung bình động của chiến lược này rất đơn giản và thực tế. Nó có thể được tối ưu hóa theo các cách sau:
Thông qua các thử nghiệm tối ưu hóa này, hiệu quả thực tế và sự ổn định của chiến lược có thể được cải thiện đáng kể.
Ý tưởng chiến lược chéo trung bình động là đơn giản, nhưng ứng dụng thực tế đòi hỏi tối ưu hóa liên tục. Chiến lược này cung cấp logic tạo ra tín hiệu giao dịch và các quy tắc giao dịch cơ bản. Trên cơ sở này, nó có thể được tối ưu hóa rất nhiều để trở thành một chiến lược định lượng có thể sử dụng. Việc áp dụng trung bình động cũng cung cấp cho chúng ta những ý tưởng cho các chiến lược, dựa trên đó chúng ta có thể đổi mới và cải thiện.
/*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=4 strategy("EMA Cross by MarketAlpha", overlay=true) EMAfastLength = input(defval = 9, minval = 2) EMAslowLength = input(defval = 26, minval = 2) Targetpercentage = input(defval = 0.15, title = "Profit Target in percentage", minval = 0.05) StopLosspercentage = input(defval = 0.20, title = "Stop Loss in percentage", minval = 0.05) profitpoints = close*Targetpercentage stoplosspoints = close*StopLosspercentage price = close 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 = 2000) 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 = 2017) 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" emafast = ema(price, EMAfastLength) emaslow = sma(price, EMAslowLength) plot(emafast,color=green) plot(emaslow,color=red) enterLong() => crossover(emafast, emaslow) strategy.entry(id = "MarketAlpha Long", long = true, when = window() and enterLong()) strategy.exit("Exit Long", from_entry = "MarketAlpha Long", profit = profitpoints,loss = stoplosspoints) enterShort() => crossunder(emafast, emaslow) strategy.entry(id = "MarketAlpha Short", long = false, when = window() and enterShort()) strategy.exit("Exit Short", from_entry = "MarketAlpha Short", profit = profitpoints,loss = stoplosspoints)