Estrategia cuantitativa: Bandas de Bollinger RSI Estrategia de cruce del CCI

El autor:¿ Qué pasa?, Fecha: 2023-12-20 16:24:49
Las etiquetas:

img

Resumen general

Esta estrategia combina bandas de Bollinger, índice de fuerza relativa (RSI) e índice de canal de productos básicos (CCI) para encontrar señales cruzadas y generar señales de compra y venta.

Estrategia lógica

Las bandas de Bollinger

Las bandas de Bollinger consisten en una banda media, una banda superior y una banda inferior. La banda media es generalmente un promedio móvil de 20 días. La banda superior es dos desviaciones estándar por encima de la banda media. La banda inferior es dos desviaciones estándar por debajo. Los precios cerca de la banda inferior pueden indicar una condición de sobreventa. Los precios cerca de la banda superior pueden indicar una condición de sobrecompra.

Indicador de riesgo

El RSI mide la velocidad de los movimientos de precios direccionales hacia arriba y hacia abajo. Muestra sobrecompra por encima de 70 y sobreventa por debajo de 30. Cuando el RSI cae por encima de 70, puede ser una señal de venta. Cuando el RSI rebota por debajo de 30, puede ser una señal de compra.

CCI

El CCI mide hasta qué punto los precios se han movido desde el precio promedio. Las lecturas por encima de +100 implican una condición de sobrecompra. Las lecturas por debajo de -100 implican una condición de sobreventa. El CCI refleja niveles de precios extremos.

Señales de cruce

Esta estrategia utiliza bandas de Bollinger para juzgar los niveles de sobrecompra / sobreventa a corto plazo, el RSI para medir el impulso alcista / bajista y el CCI para identificar los extremos de precios.

Ventajas

  1. La combinación de múltiples indicadores mejora la precisión de la señal y reduce las señales falsas
  2. Captura las oportunidades de reversión en los puntos de inflexión
  3. Los parámetros personalizables se adaptan a las diferentes condiciones del mercado
  4. El filtro CCI suavizado reduce el ruido y mejora la estabilidad

Riesgos y soluciones

  1. Los tres indicadores pueden producir señales negativas que resultan en pérdidas. Los parámetros se pueden aflojar o añadir otros filtros.
  2. El CCI tiene problemas con los mercados agitados y puede sustituirlos por promedios móviles o indicadores de volatilidad.
  3. Sólo se puede poner un stop-loss en el lugar sin tomar ganancias.

Oportunidades de optimización

  1. Prueba más combinaciones de parámetros para encontrar la configuración óptima
  2. Introduzca el aprendizaje automático para ajustar automáticamente los parámetros
  3. Estrategias de obtención de ganancias adicionales con objetivos de ganancia
  4. Incorporar más indicadores como MACD, KD para validar las señales

Conclusión

Esta estrategia analiza las condiciones generales del mercado utilizando bandas de Bollinger, RSI e indicadores CCI. Identifica puntos de inflexión a través de señales de cruce para inversiones del mercado comercial. Con optimizaciones adicionales como ajuste de parámetros, mecanismos de toma de ganancias, etc., puede ser una estrategia de contratrend robusta para varios entornos de mercado.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(shorttitle="BBRSIstr", title="Bollinger Bands", overlay=true)
length = input.int(20, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

//RSI
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

rsiPlot = plot(rsi, "RSI", color=#7E57C2)
plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

//cci
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
plot(cci, "CCI", color=#2962FF)
band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(0, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


longCBB= close < lower
shortCBB = close>upper
longBRSI = rsi < 33
shortBRSI = rsi > 70
longcci = cci < -215
shortcci = cci > 250

strategy.entry("LONG", strategy.long, when = longCBB and longBRSI and longcci)
strategy.exit("Exit ", profit = 600)
strategy.entry("SHORT", strategy.short, when = shortCBB and shortBRSI and shortcci)
strategy.exit("Exit ", profit = 600)

Más.