
La stratégie de négociation de retour à la moyenne basée sur l’oscillateur de dynamique de Chande (CMO) est une stratégie d’analyse technique permettant d’identifier les zones de survente par le calcul de la dynamique de la variation des prix sur une période donnée. La stratégie consiste principalement à surveiller la dynamique des variations des prix des actifs, à négocier lorsque des écarts extrêmes se produisent, afin de saisir les opportunités de retour à la moyenne des prix.
Le cœur de la stratégie est le calcul et l’application de l’indicateur CMO. Le CMO mesure la dynamique en calculant la différence entre les hausses et les baisses d’une période donnée par rapport au total. La formule de calcul spécifique est: CMO = 100 × (augmentation et diminution de la somme) / (augmentation et diminution de la somme)
Contrairement au RSI traditionnel, le CMO utilise des données de hausse et de baisse simultanées dans la molécule, offrant une mesure plus symétrique de la dynamique. La stratégie prend position lorsque le CMO considère que le marché est en survente et s’attend à une reprise des prix en dessous de 50, et donc prend plus de positions.
La stratégie capte les occasions de survente du marché par l’indicateur CMO, combinée à des arrêts à temps fixe, pour construire un système de trading de retour sur la valeur moyenne robuste. La logique de la stratégie est claire, le contrôle des risques est raisonnable et a une bonne valeur pratique. La stabilité et la rentabilité de la stratégie peuvent être encore améliorées en optimisant davantage les paramètres et en ajoutant des indicateurs auxiliaires.
/*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)