Esta estrategia se basa en el clásico índice del canal de productos básicos (CCI) y sólo dura mucho tiempo. Entra en el mercado cuando el indicador CCI está en un nivel extremadamente bajo (CCI <-150 o umbral definido por el usuario) y recupera su fuerza (es decir, CCI> CCI de la vela anterior), con un filtro en la
La estrategia termina cuando se activa el stop loss o los precios se elevan por encima de la banda superior del CCI.
El objetivo es lograr un alto porcentaje de operaciones rentables (muy por encima del 50%) en lugar de capturar la duración completa de una tendencia.
Construir indicadores y bandas de CCI utilizando ta.sma() yta.dev() funciones.
Utilice la entrada para seleccionar la fecha de inicio para backtest.
La señal de entrada: CCI cruza por debajo de la banda inferior y comienza a aumentar.
En el caso de las empresas de la industria de la Unión, la Comisión considera que las empresas de la industria de la Unión no pueden beneficiarse de la ayuda estatal.
Salida 2: el precio cae por debajo del nivel de stop loss, corta las pérdidas.
La estrategia solo es larga basada en la fortaleza de CCI, con paradas para controlar el riesgo.
La estrategia tiene las siguientes ventajas:
Identificar las sobrecompras/sobrevendidas con CCI para capitalizar las reversiones.
Sólo la dirección larga evita el riesgo excesivo de malas operaciones.
El filtro de fuerza del precio asegura el soporte formado antes de la entrada.
El mecanismo de stop loss limita las pérdidas por operación y gestiona el capital.
Parámetros flexibles para ajustar los filtros de entrada.
Las altas tasas de ganancia favorecen a los inversores que se centran en la gestión del riesgo.
Lógica clara y implementación sencilla.
También hay algunos riesgos:
Si solo se va a largo plazo, se pueden perder las tendencias a la baja a corto plazo.
El mal ajuste de los parámetros CCI conduce a fallas.
El stop loss demasiado flojo no limita las pérdidas.
Una fuerte tendencia alcista golpea las paradas causando grandes pérdidas.
La alta frecuencia del comercio aumenta los costos de transacción.
Soluciones posibles:
Optimizar los parámetros de CCI para encontrar los mejores valores.
Ajustar el stop loss para equilibrar el riesgo y el deslizamiento.
Gestionar la frecuencia de entrada teniendo en cuenta los costos.
Combinar con filtros de tendencia y rango.
Algunas maneras de mejorar la estrategia:
Implementar paradas dinámicas basadas en la volatilidad del mercado.
Añadir filtros como el MACD para evitar que las paradas sean demasiado anchas.
Incorporar el lado corto cuando CCI se sobrecalienta.
Considere los costos, establezca el objetivo mínimo de ganancia.
Optimice los parámetros para el marco de tiempo.
Aprendizaje automático para ajuste automático de parámetros.
Añadir dimensionamiento de posición para la asignación dinámica.
En resumen, esta estrategia de solo largo capitaliza los niveles de sobrecompra / sobreventa de CCI con filtro de fuerza de precios y stop losses. Ofrece una implementación fácil, un buen control de riesgos y un alto porcentaje de ganancias. Las limitaciones de ser solo largo y paradas fijas se pueden abordar a través de la optimización de parámetros, entradas cortas, paradas dinámicas, etc. La estrategia es adecuada para los inversores que buscan altas tasas de ganancia y una gestión adecuada del riesgo.
/*backtest start: 2022-11-08 00:00:00 end: 2023-11-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='CCI High Performance long only', overlay=false ) src = input(close) length = input.int(20, title='Period', minval=1) lossp = input.float(8, title='Stop Loss percentage', minval=0.5, step=0.5) scart = input.float(0.25, title='Close of the signal bar higher than Open %', minval = 0) upperline = input.int(150, title='Upper Band', minval=0, step=10) lowline = input.int(-150, title='Low Band', maxval=0, step=10) // construction of CCI (not on close but in totalprice) and of bands ma = ta.sma(src, length) cci = (src - ma) / (0.015 * ta.dev(src, length)) plot(cci, 'CCI', color=color.new(#996A15, 0)) band1 = hline(upperline, 'Upper Band', color=#C0C0C0, linestyle=hline.style_dashed) band0 = hline(lowline, 'Lower Band', color=#C0C0C0, linestyle=hline.style_dashed) fill(band1, band0, color=color.new(#9C6E1B, 90), title='Background') // === INPUT BACKTEST RANGE === fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12) fromDay = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31) fromYear = input.int(defval = 2016, title = "From Year", minval = 1970) thruMonth = input.int(defval = 1, title = "Thru Month", minval = 1, maxval = 12) thruDay = input.int(defval = 1, title = "Thru Day", minval = 1, maxval = 31) thruYear = input.int(defval = 2112, title = "Thru Year", minval = 1970) // === FUNCTION EXAMPLE limit for backtest === start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" //ENTRY CONDITIONS // strategy: enter when CCI is under the low line and starts increasing. The filter is that the signal candle should mark a close higher than a x-percent // (0.25%) of the open // Exit when either when it reaches the target of a prices highest than high level of CCI or fixed stop loss (in percentage) scart_level = open * (1+scart/100) entryl = cci[1] < lowline[1] and cci > cci[1] and close > scart_level and window() exit1 = cci> upperline strategy.entry('Long', strategy.long, when=entryl) strategy.close('Long', when=exit1, comment='target') // money management (only stop loss) losspel = strategy.position_avg_price * (1 - lossp / 100) fixed_stop_long = close < losspel strategy.close('Long', when=fixed_stop_long, comment='Stop Loss')