Chiến lược này sử dụng hai đường trung bình chuyển động theo cấp số nhân (EMA) để nắm bắt những thay đổi trong xu hướng giá. Khi EMA ngắn hạn vượt qua EMA dài hạn từ dưới, một tín hiệu mua được tạo ra; khi EMA ngắn hạn vượt qua dưới EMA dài hạn từ trên, một tín hiệu bán được tạo ra. Chiến lược cũng thiết lập giới hạn dừng lỗ và lấy lợi nhuận hàng ngày để kiểm soát lỗ và lợi nhuận trong một ngày.
Chiến lược chéo trung bình di chuyển kép EMA là một chiến lược giao dịch đơn giản, dễ hiểu phù hợp với các thị trường xu hướng. Bằng cách sử dụng chéo trung bình di chuyển nhanh và chậm, nó có thể nắm bắt được những thay đổi trong xu hướng giá tương đối tốt. Đồng thời, các thiết lập dừng lỗ và lấy lợi nhuận hàng ngày có thể kiểm soát rủi ro một cách hiệu quả. Tuy nhiên, chiến lược có thể hoạt động kém hơn ở các thị trường hỗn loạn hoặc trong thời gian đảo ngược xu hướng và cần được tối ưu hóa và cải thiện bằng cách kết hợp các chỉ số kỹ thuật và phương pháp phân tích khác.
/*backtest start: 2023-06-01 00:00:00 end: 2024-06-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DD173838 //@version=5 strategy("Moving Average Strategy with Daily Limits", overlay=true) // Moving Average settings shortMaLength = input.int(9, title="Short MA Length") longMaLength = input.int(21, title="Long MA Length") // Calculate MAs shortMa = ta.ema(close, shortMaLength) longMa = ta.ema(close, longMaLength) // Plot MAs plot(shortMa, title="9 EMA", color=color.blue) plot(longMa, title="21 EMA", color=color.red) // Strategy conditions crossUp = ta.crossover(shortMa, longMa) crossDown = ta.crossunder(shortMa, longMa) // Debug plots to check cross conditions plotshape(series=crossUp, title="Cross Up", location=location.belowbar, color=color.green, style=shape.labelup, text="UP") plotshape(series=crossDown, title="Cross Down", location=location.abovebar, color=color.red, style=shape.labeldown, text="DOWN") // Entry at cross signals if (crossUp) strategy.entry("Long", strategy.long) if (crossDown) strategy.entry("Short", strategy.short) // Daily drawdown and profit limits var float startOfDayEquity = na if (na(startOfDayEquity) or ta.change(time('D')) != 0) startOfDayEquity := strategy.equity maxDailyLoss = 50000 * 0.0025 maxDailyProfit = 50000 * 0.02 currentDailyPL = strategy.equity - startOfDayEquity if (currentDailyPL <= -maxDailyLoss) strategy.close_all(comment="Max Daily Loss Reached") if (currentDailyPL >= maxDailyProfit) strategy.close_all(comment="Max Daily Profit Reached")