Esta estrategia es un sistema adaptativo que combina el seguimiento de tendencias y el comercio de rango, utilizando el índice de felicidad (CI) para determinar las condiciones del mercado y aplicar la lógica de negociación correspondiente.
El núcleo de la estrategia radica en el uso del índice Choppiness (CI) para clasificar el mercado en estados de tendencia (CI<38.2) y rango (CI>61.8). En los mercados de tendencia, las posiciones largas se abren cuando la EMA rápida (9 períodos) cruza por encima de la EMA lenta (21-período) y el RSI está por debajo de 70, mientras que las posiciones cortas se abren cuando la EMA lenta cruza por encima de la EMA rápida y el RSI está por encima de 30. En los mercados de rango, las posiciones largas se abren cuando el RSI está por debajo de 30, y las posiciones cortas cuando el RSI está por encima de 70.
Esta estrategia construye un sistema de negociación adaptable mediante la combinación de múltiples indicadores técnicos, manteniendo un rendimiento estable en diferentes entornos de mercado. Sus principales ventajas se encuentran en la adaptabilidad del mercado y mecanismos integrales de gestión de riesgos, mientras que se debe prestar atención a la optimización de parámetros y las dependencias de las condiciones del mercado. A través de la optimización y mejora continuas, la estrategia muestra promesa para lograr mejores resultados comerciales en diversas condiciones del mercado.
/*backtest start: 2024-12-19 00:00:00 end: 2024-12-26 00:00:00 period: 45m basePeriod: 45m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © nopology //@version=6 strategy("CI, EMA, RSI", overlay=false) // Input parameters lengthCI = input(14, title="CI Length") lengthRSI = input(14, title="RSI Length") fastLength = input(9, title="Fast EMA Length") slowLength = input(21, title="Slow EMA Length") // Calculate CI atr = ta.atr(lengthCI) highLowRange = math.log10(math.max(high[lengthCI], high) - math.min(low[lengthCI], low)) sumATR = math.sum(atr, lengthCI) ci = 100 * (math.log10(sumATR / highLowRange) / math.log10(lengthCI)) // Calculate RSI rsi = ta.rsi(close, lengthRSI) // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Define conditions trendingMarket = ci < 38.2 rangingMarket = ci > 61.8 bullishSignal = ta.crossover(fastEMA, slowEMA) and rsi < 70 bearishSignal = ta.crossover(slowEMA, fastEMA) and rsi > 30 // Plot indicators for visualization plot(ci, title="Choppiness Index", color=color.purple, linewidth=2) plot(fastEMA, title="Fast EMA", color=color.blue) plot(slowEMA, title="Slow EMA", color=color.red) // Strategy Execution if (trendingMarket) if (bullishSignal) strategy.entry("Long", strategy.long) if (bearishSignal) strategy.entry("Short", strategy.short) else if (rangingMarket) if (rsi < 30) strategy.entry("Long", strategy.long) if (rsi > 70) strategy.entry("Short", strategy.short) // Close positions when conditions no longer met or reverse if (trendingMarket and not bullishSignal) strategy.close("Long") if (trendingMarket and not bearishSignal) strategy.close("Short") if (rangingMarket and rsi > 40) strategy.close("Long") if (rangingMarket and rsi < 60) strategy.close("Short") // Optional: Add stop loss and take profit stopLossPerc = input.float(2, title="Stop Loss (%)", minval=0.1, step=0.1) / 100 takeProfitPerc = input.float(4, title="Take Profit (%)", minval=0.1, step=0.1) / 100 strategy.exit("Exit Long", "Long", stop=close*(1-stopLossPerc), limit=close*(1+takeProfitPerc)) strategy.exit("Exit Short", "Short", stop=close*(1+stopLossPerc), limit=close*(1-takeProfitPerc))