Esta estrategia es un sistema de negociación basado en el oscilador de momento de Chande (CMO). Busca oportunidades de compra en regiones de sobreventa y oportunidades de venta en regiones de sobrecompra, al tiempo que incorpora límites de tiempo de tenencia de posición para la gestión de riesgos. Este enfoque permite capturar las reversiones de precios evitando el comercio frecuente en mercados variados.
El núcleo de la estrategia utiliza el indicador CMO para medir el impulso del mercado. CMO genera un oscilador que va desde -100 a 100 mediante el cálculo de la relación de la diferencia entre los movimientos ascendentes y descendentes a su suma. El sistema genera una señal larga cuando CMO cae por debajo de -50, lo que indica una condición de mercado de sobreventa. Las posiciones se cierran cuando CMO excede los 50 o cuando el período de tenencia excede los 5 ciclos. Este diseño captura las oportunidades de rebote del precio mientras implementa medidas oportunas de toma de ganancias y stop-loss.
Esta tendencia basada en el impulso después de la estrategia captura oportunidades de sobrecompra y sobreventa del mercado utilizando el indicador CMO. El diseño de la estrategia es racional, con reglas comerciales claras y mecanismos de control de riesgos.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-25 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)