
A estratégia de negociação de reversão de média baseada no oscilador de dinâmica de Cande (CMO) é uma estratégia de análise técnica para identificar áreas de sobrecompra e sobrevenda, calculando a dinâmica da mudança de preço em um determinado período de tempo. A estratégia é baseada em monitorar a mudança de dinâmica dos preços dos ativos, negociando quando há um desvio extremo dos preços, para capturar a oportunidade de retornar ao valor médio do preço. A estratégia usa o indicador CMO do ciclo de 9 dias como sinal central, abrindo mais posições quando o CMO está abaixo de 50, e abrindo posições quando o CMO está acima de 50 ou mantendo a posição por mais de 5 dias.
O núcleo da estratégia é o cálculo e a aplicação dos indicadores do CMO. O CMO mede a dinâmica calculando a diferença entre o aumento e a diminuição do valor do total em um determinado período. A fórmula de cálculo específica é: CMO = 100 × (aumento e diminuição) / (aumento e diminuição)
Diferentemente do RSI tradicional, o CMO usa dados de alta e baixa em simultâneo na molécula, fornecendo uma medida mais simétrica da dinâmica. A estratégia assume que o mercado está sobrevendido quando o CMO está abaixo de 50 e espera que o preço volte a subir, portanto, abre mais posições.
A estratégia captura as oportunidades de superaquecimento do mercado através do indicador CMO, combinado com o stop loss de tempo fixo, e constrói um sistema de negociação de retorno ao valor médio robusto. A lógica da estratégia é clara, o controle de risco é razoável e tem um bom valor prático. A estabilidade e a lucratividade da estratégia podem ser melhoradas com a otimização adicional dos parâmetros e o aumento dos indicadores auxiliares.
/*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)