
La estrategia de comercio de retorno a la mediana basada en el oscilador de la dinámica de Cande (CMO) es una estrategia de análisis técnico que identifica zonas de sobreventa y sobrecompra mediante el cálculo de la dinámica de los cambios de precio en un período determinado. La estrategia se basa principalmente en la monitorización de los cambios dinámicos en los precios de los activos, realizando operaciones cuando se presentan desviaciones extremas en los precios para capturar la oportunidad de retorno a la mediana.
El núcleo de la estrategia es el cálculo y la aplicación de los indicadores del CMO. El CMO mide la dinámica mediante el cálculo de la diferencia entre el aumento y la disminución en un período determinado y el valor de la suma. La fórmula de cálculo específica es: CMO = 100 × (aumento y disminución) / (aumento y disminución)
A diferencia del RSI tradicional, el CMO utiliza datos de alza y bajada simultáneamente en la molécula, lo que proporciona una medida de la dinámica más simétrica. La estrategia considera que el mercado está sobrevendido cuando el CMO está por debajo de 50 y espera que los precios se recuperen, por lo que abre más posiciones.
La estrategia capta las oportunidades de sobreventa y sobreventa en el mercado a través de los indicadores de CMO, en combinación con paros de tiempo fijo, para construir un sistema de comercio de retorno a la media sólido. La lógica de la estrategia es clara, el control de riesgos es razonable y tiene un buen valor práctico.
/*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)