
Strategi perdagangan pulangan rata-rata berdasarkan Cande Dynamic Oscillator (CMO) adalah strategi analisis teknikal untuk mengenal pasti kawasan overbought dan oversold dengan mengira dinamika perubahan harga dalam jangka masa tertentu. Strategi ini digunakan untuk menangkap peluang pulangan rata-rata harga dengan memantau perubahan dinamik harga aset apabila terdapat penyimpangan yang melampau.
Pusat strategi adalah pengiraan dan penggunaan indikator CMO. CMO mengukur momentum dengan mengira perbezaan kenaikan dan penurunan dalam jangka masa tertentu dengan nisbah jumlah. Rumus pengiraan khusus adalah: CMO = 100 × (Saturasi Naik - Saturasi Turun) / (Saturasi Naik + Saturasi Turun)
Berbeza dengan RSI tradisional, CMO menggunakan data kenaikan dan penurunan secara serentak dalam molekul, memberikan pengukuran momentum yang lebih simetrik. Strategi ini menganggap pasaran terlalu terjual apabila CMO berada di bawah 50, dan mengharapkan harga akan naik semula, oleh itu membuka lebih banyak kedudukan.
Strategi ini menangkap peluang overbought dan oversold di pasaran melalui indikator CMO, digabungkan dengan hentian masa tetap, untuk membina sistem perdagangan pulangan rata-rata yang mantap. Logik strategi jelas, kawalan risiko masuk akal, dan nilai praktikal yang baik. Dengan mengoptimumkan parameter lebih lanjut dan menambah indikator tambahan, kestabilan dan keuntungan strategi dapat ditingkatkan lagi.
/*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)