
Chiến lược giao dịch quay trở lại trung bình dựa trên dao động động của Chande (CMO) là một chiến lược phân tích kỹ thuật để xác định các khu vực quá mua quá bán bằng cách tính toán động lực của biến động giá trong một khoảng thời gian nhất định. Chiến lược này chủ yếu bằng cách theo dõi sự thay đổi động lực của giá tài sản, giao dịch khi giá xuất hiện sai lệch cực kỳ để nắm bắt cơ hội giá quay trở lại trung bình. Chiến lược sử dụng chỉ số CMO theo chu kỳ 9 ngày làm tín hiệu cốt lõi, mở nhiều khi CMO thấp hơn 50, và giữ yên khi CMO cao hơn 50 hoặc giữ hơn 5 ngày.
Trung tâm của chiến lược là tính toán và áp dụng các chỉ số CMO. Các CMO đo lường động lực bằng cách tính toán tỷ lệ của sự chênh lệch giữa tăng và giảm trong một khoảng thời gian nhất định với tỷ lệ của tổng số. Công thức tính toán cụ thể là: CMO = 100 × (tăng và giảm) / (tăng và giảm)
Khác với RSI truyền thống, CMO sử dụng dữ liệu tăng và giảm đồng thời trong phân tử, cung cấp một phép đo động lực đối xứng hơn. Chiến lược cho rằng thị trường đã bán tháo khi CMO thấp hơn 50, dự kiến giá sẽ tăng trở lại, do đó mở nhiều vị trí.
Chiến lược này nắm bắt các cơ hội quá mua quá bán của thị trường thông qua chỉ số CMO, kết hợp với thời gian dừng cố định, xây dựng một hệ thống giao dịch quay trở lại giá trị trung bình vững chắc. Lập luận của chiến lược rõ ràng, kiểm soát rủi ro hợp lý, có giá trị thực tế tốt.
/*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)