Estrategia dinámica de soporte y resistencia del CCI


Fecha de creación: 2024-01-22 16:37:46 Última modificación: 2024-01-22 16:37:46
Copiar: 1 Número de Visitas: 725
1
Seguir
1617
Seguidores

Estrategia dinámica de soporte y resistencia del CCI

Descripción general

Esta estrategia utiliza los puntos centrales del indicador CCI para calcular los puntos de soporte y resistencia dinámicos, combinados con el juicio de la tendencia para buscar señales de compra y venta. La estrategia combina las características de reversión del CCI y la capacidad de seguimiento de la tendencia, con el objetivo de capturar los puntos de inflexión en la tendencia intermedia para obtener ganancias.

Principio de estrategia

El indicador CCI puede mostrar si el mercado es demasiado débil o demasiado fuerte, los límites de 80 y 80 pueden usarse para determinar si el mercado está entrando en un estado de sobrecompra y sobreventa. Esta estrategia aprovecha esta característica del CCI para obtener los nodos superiores y inferiores mediante el cálculo de los nodos de las líneas K de 50 a la izquierda y a la izquierda.

Se genera una señal de compra cuando el precio de cierre está por encima del precio de apertura y por debajo de la línea de soporte superior; se genera una señal de venta cuando el precio de cierre está por debajo del precio de apertura y por encima de la línea de resistencia inferior. Para filtrar las señales de negociación en la dirección de la tendencia no dominante, la estrategia también combina la EMA y el índice de pendiente para determinar la dirección de la tendencia dominante actual.

El stop loss y el stop stop se basan en el cálculo de la dinámica de los indicadores ATR, lo que hace que el control de riesgo de esta estrategia también sea más razonable.

Análisis de las ventajas

  1. Aproveche la característica de reversión del índice CCI para comprar y vender cerca de los puntos de reversión y aumentar la probabilidad de obtener ganancias.
  2. Combinando el juicio de tendencias, evitar operaciones en contra y reducir las pérdidas.
  3. La configuración de la parada de pérdidas dinámica hace que el control de riesgos sea más racional.
  4. Los parámetros personalizados, como el ciclo CCI, el tamaño de la zona de amortización, etc., se adaptan a más entornos de mercado.

Análisis de riesgos

  1. El índice CCI es propenso a generar falsas señales y necesita un filtro de tendencia.
  2. La inversión no siempre es exitosa, existe el riesgo de una cierta probabilidad de pérdidas.
  3. La configuración inadecuada de los parámetros puede causar una operación demasiado frecuente o perder oportunidades de negociación.

Se puede reducir el riesgo mediante la optimización de los parámetros, la modificación de la amplitud de parada, etc. Además, esta estrategia puede servir como herramienta auxiliar para otros indicadores sin tener que depender completamente de sus señales de negociación.

Dirección de optimización

  1. Optimizar el tamaño de las zonas de amortiguamiento para adaptarse a los mercados con diferentes tipos de volatilidad.
  2. Optimización de los parámetros del ciclo ATR para obtener un control de pérdida dinámico más preciso.
  3. Prueba con diferentes configuraciones de los parámetros CCI.
  4. Prueba la eficacia de otros tipos de indicadores de tendencia.

Resumir

Esta estrategia integra la capacidad de selección de múltiples espacios del indicador CCI con la confirmación de filtros de juicio de tendencias, con cierto valor en la vida real. El stop loss dinámico también hace que la estrategia controle el riesgo en aplicaciones reales. Se espera obtener mejores resultados mediante la optimización y mejora de los parámetros.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © AliSignals


//@version=5
strategy("CCI based support and resistance strategy", overlay=true  )


cci_length = input.int(50, "cci length")
right_pivot = input.int(50, "right pivot")
left_pivot = input.int(50, "left pivot")
buffer = input.float(10.0, "buffer")
trend_matter = input.bool(true, "trend matter?")
showmid = input.bool ( false , "show mid?")
trend_type = input.string("cross","trend type" ,options = ["cross","slope"])
slowma_l = input.int(100, "slow ma length")
fastma_l = input.int(50, "fast ma length")
slope_l = input.int(5,  "slope's length for trend detection")
ksl = input.float(1.1)
ktp = input.float(2.2)
restf = input.timeframe(title="Time Frame of Last Period for Calculating max" , defval="D")



// Calculating Upper and Lower CCI
cci = ta.cci(hlc3,cci_length)

uppercci = 0.0
lowercci = 0.0

uppercci := fixnan(ta.pivothigh(cci, left_pivot, right_pivot)) - buffer
lowercci := fixnan(ta.pivotlow (cci, left_pivot, right_pivot)) + buffer
midccci  = math.avg(uppercci,lowercci)


// Support and Resistance based on CCI
res = uppercci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)
sup = lowercci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)
mid =  midccci*(0.015*ta.dev(hlc3,cci_length))+ ta.sma(hlc3,cci_length)



// Calculating trend
t_cross  = 0
t_cross := ta.ema(close,fastma_l) > ta.ema(close,slowma_l) ? 1 : ta.ema(close,fastma_l) < ta.ema(close,slowma_l) ? -1 : t_cross[1] 

t_slope  = 0
t_slope := ta.ema(close,slowma_l) > ta.ema(close,slowma_l)[slope_l] ? 1 : ta.ema(close,slowma_l) < ta.ema(close,slowma_l)[slope_l]  ? -1 : t_slope[1] 

t  = 0
t := trend_type == "cross" ? t_cross : trend_type == "slope" ? t_slope : na

colort =  trend_matter == false ? color.rgb(201, 251, 0) : t == 1 ? color.rgb(14, 243, 132) :  t == -1 ? color.rgb(255, 34, 34) : na
bull_t = trend_matter == false or t ==  1
bear_t = trend_matter == false or t == -1

plot(res, color = colort)
plot(sup, color = colort)
plot(showmid == true ? mid : na)


// Long and Short enter condition
buy  = bull_t == 1 and ta.lowest (2) < sup and close > open and close > sup
sell = bear_t == 1 and ta.highest(2) > res and close < open and close < res

plotshape( buy , color=color.rgb(6, 255, 23) , location = location.belowbar, style = shape.triangleup  , size = size.normal)
plotshape( sell, color=color.rgb(234, 4, 4) ,  location = location.abovebar, style = shape.triangledown, size = size.normal)





atr = ta.atr(100)



CLOSE=request.security(syminfo.tickerid, restf, close)
max = 0.0
max := CLOSE == CLOSE[1] ? math.max(max[1], atr) : atr
act_atr = 0.0
act_atr := CLOSE == CLOSE[1] ? act_atr[1] : max[1]

atr1 =  math.max(act_atr, atr) 

dis_sl = atr1 * ksl
dis_tp = atr1 * ktp


var float longsl  = open[1] - dis_sl
var float shortsl = open[1] + dis_sl
var float longtp =   open[1] + dis_tp
var float shorttp =  open[1] - dis_tp


longCondition = buy
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = sell
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


longsl  := strategy.position_size > 0  ? longsl[1]  : close - dis_sl
shortsl := strategy.position_size < 0 ? shortsl[1] : close + dis_sl
longtp  := strategy.position_size > 0  ? longtp[1]  : close + dis_tp
shorttp := strategy.position_size < 0 ? shorttp[1] : close - dis_tp




if strategy.position_size > 0 
    strategy.exit(id="My Long close Id", from_entry ="My Long Entry Id" , stop=longsl, limit=longtp)
if strategy.position_size < 0 
    strategy.exit(id="My Short close Id", from_entry ="My Short Entry Id" , stop=shortsl, limit=shorttp)