Chiến lược giao dịch đảo ngược trung bình dựa trên Chande Momentum Oscillator (CMO) là một chiến lược phân tích kỹ thuật xác định các khu vực mua quá mức và bán quá mức bằng cách tính toán động lực giá trong một khoảng thời gian cụ thể. Chiến lược theo dõi sự thay đổi động lực trong giá tài sản và giao dịch khi giá hiển thị độ lệch cực đoan, nhằm mục đích nắm bắt các cơ hội đảo ngược trung bình. Nó sử dụng chỉ số CMO 9 ngày làm tín hiệu cốt lõi, nhập vào các vị trí dài khi CMO giảm xuống dưới -50 và thoát ra khi CMO tăng trên 50 hoặc thời gian nắm giữ vượt quá 5 ngày.
Cốt lõi của chiến lược nằm trong việc tính toán và áp dụng chỉ số CMO. CMO đo đạc động lượng bằng cách tính tỷ lệ chênh lệch giữa lợi nhuận và lỗ với tổng của chúng trong một khoảng thời gian nhất định. Công thức là: CMO = 100 × (Tổng lợi nhuận - Tổng lỗ) / ((Tổng lợi nhuận + Tổng lỗ)
Không giống như chỉ số RSI truyền thống, CMO sử dụng cả chuyển động lên và xuống trong số số, cung cấp một phép đo đè động lượng đối xứng hơn. Chiến lược đi vào các vị trí dài khi CMO giảm xuống dưới -50, cho thấy điều kiện bán quá mức và dự kiến phục hồi giá. Các vị trí được đóng khi CMO tăng trên 50 hoặc sau khi giữ trong 5 ngày.
Chiến lược này nắm bắt các cơ hội mua quá nhiều và bán quá nhiều trên thị trường thông qua chỉ số CMO, kết hợp dừng lỗ thời gian cố định để xây dựng một hệ thống giao dịch đảo ngược trung bình mạnh mẽ. Nó có logic rõ ràng và kiểm soát rủi ro hợp lý với giá trị thực tế. Sự ổn định và lợi nhuận của chiến lược có thể được tăng thêm thông qua tối ưu hóa tham số và các chỉ số phụ trợ bổ sung.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-09 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Chande Momentum Oscillator Strategy", overlay=false) // Input for the CMO period cmoPeriod = input.int(9, minval=1, title="CMO Period") // Calculate price changes priceChange = ta.change(close) // Separate positive and negative changes up = priceChange > 0 ? priceChange : 0 down = priceChange < 0 ? -priceChange : 0 // Calculate the sum of ups and downs using a rolling window sumUp = ta.sma(up, cmoPeriod) * cmoPeriod sumDown = ta.sma(down, cmoPeriod) * cmoPeriod // Calculate the Chande Momentum Oscillator (CMO) cmo = 100 * (sumUp - sumDown) / (sumUp + sumDown) // Define the entry and exit conditions buyCondition = cmo < -50 sellCondition1 = cmo > 50 sellCondition2 = ta.barssince(buyCondition) >= 5 // Track if we are in a long position var bool inTrade = false if (buyCondition and not inTrade) strategy.entry("Long", strategy.long) inTrade := true if (sellCondition1 or sellCondition2) strategy.close("Long") inTrade := false // Plot the Chande Momentum Oscillator plot(cmo, title="Chande Momentum Oscillator", color=color.blue) hline(-50, "Buy Threshold", color=color.green) hline(50, "Sell Threshold", color=color.red)