Estrategia de negociación cuantitativa basada en bandas de Bollinger y RSI

El autor:¿ Qué pasa?, Fecha: 2023-12-20 15:39:19
Las etiquetas:

img

Resumen general

Esta estrategia diseña una estrategia de negociación cuantitativa basada en bandas de Bollinger y el índice de fuerza relativa (RSI). Combina el seguimiento de tendencias y el juicio sobrecomprado / sobrevendido para ingresar al mercado al comienzo de una tendencia y salir a niveles sobrecomprados / sobrevendidos para obtener ganancias.

Principio de la estrategia

La estrategia utiliza bandas de Bollinger para determinar las tendencias de precios y los niveles de soporte / resistencia. Los precios que se acercan a la banda de Bollinger inferior se ven como una señal de sobreventa, mientras que los precios que se acercan a la banda de Bollinger superior se ven como una señal de sobrecompra. Al mismo tiempo, incorpora el indicador RSI para determinar si existen condiciones de sobreventa o sobrecompra.

Las reglas de negociación específicas son: ir largo cuando el precio está por debajo de la banda inferior de Bollinger y el RSI está por debajo de 30; ir corto cuando el precio está por encima de la banda superior de Bollinger y el RSI está por encima de 70.

Ventajas

La estrategia combina la capacidad de seguimiento de tendencias de Bollinger Bands y el juicio sobrecomprado/sobrevendido de RSI para capturar un buen momento de inicio de tendencia.

En comparación con el uso de un solo indicador como Bollinger Bands o RSI solo, esta estrategia utiliza múltiples indicadores y parámetros para mejorar la precisión de la decisión.

Los riesgos

La estrategia se basa en gran medida en la optimización de parámetros. La configuración incorrecta de parámetros puede conducir a tendencias faltantes o generar señales falsas. Por ejemplo, el desajuste del período de Bollinger puede causar tales problemas.

La estrategia también depende del instrumento de negociación. Para activos altamente volátiles, los parámetros de la banda de Bollinger deben ajustarse en consecuencia. Para instrumentos con tendencias poco claras, el rendimiento también puede sufrir. También afectado por los costos de transacción, el deslizamiento y los eventos extremos del mercado.

Se recomienda realizar pruebas de optimización de parámetros para evaluar los niveles de toma de ganancias/detención de pérdidas y el rendimiento en diferentes activos y regímenes de mercado.

Direcciones de optimización

Se pueden mejorar varios aspectos:

  1. Evaluar y optimizar los parámetros de las bandas de Bollinger y el RSI para que coincidan mejor con las características del instrumento de negociación

  2. Incorporar indicadores adicionales como KDJ, MACD para construir un modelo multifactorial

  3. Evaluación de las estrategias de toma de ganancias/stop loss, como las estrategias de stop loss de seguimiento o de salida a escala

  4. Realizar ajustes dinámicos de parámetros basados en activos específicos y condiciones de mercado

  5. Añadir modelos de aprendizaje automático para juzgar la calidad de la señal y los niveles de riesgo

Resumen de las actividades

Esta estrategia integra las bandas de Bollinger y el RSI para un sistema integral de seguimiento de tendencias. Hay más espacio para mejorar la efectividad y la estabilidad a través del ajuste de parámetros y la gestión de riesgos.


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

//@version=4
strategy("BB + RSI Estrategia", overlay=true)

longitud = input(20, title="Longitud BB", minval=5, maxval=50, step=1)
multiplicador = input(2.0, title="Multiplicador BB", type=input.float, step=0.1)
timeframe_bb = input("D", title="Marco de Tiempo BB", type=input.resolution)
rsi_length = input(14, title="Longitud RSI", minval=5, maxval=50, step=1)
rsi_overbought = input(70, title="Nivel de sobrecompra RSI", minval=50, maxval=80, step=1)
rsi_oversold = input(30, title="Nivel de sobreventa RSI", minval=20, maxval=50, step=1)
take_profit = input("Central", title="Take Profit (banda)", options=["Central", "Opuesta"])
stop_loss = input(2.00, title="Stop Loss", type=input.float, step=0.10)

var SL = 0.0

[banda_central, banda_superior, banda_inferior] = security(syminfo.tickerid, timeframe_bb, bb(close, longitud, multiplicador))
rsi_value = rsi(close, rsi_length)

comprado = strategy.position_size > 0
vendido = strategy.position_size < 0

if not comprado and not vendido
    if close < banda_inferior and rsi_value < rsi_oversold
        // Realizar la compra
        cantidad = round(strategy.equity / close)
        strategy.entry("Compra", strategy.long, qty=cantidad, when=cantidad > 0)
        SL := close * (1 - (stop_loss / 100))

    if close > banda_superior and rsi_value > rsi_overbought
        // Realizar la Venta
        cantidad = round(strategy.equity / close)
        strategy.entry("Venta", strategy.short, qty=cantidad, when=cantidad > 0)
        SL := close * (1 + (stop_loss / 100))

if comprado
    // Verificar el take profit
    if take_profit == "Central" and close >= banda_central
        strategy.close("Compra", comment="TP")
        SL := 0

    if take_profit == "Opuesta" and close >= banda_superior
        strategy.close("Compra", comment="TP")
        SL := 0
    // Verificar el stop loss
    if close <= SL
        strategy.close("Compra", comment="SL")
        SL := 0

if vendido
    // Verificar el take profit
    if take_profit == "Central" and close <= banda_central
        strategy.close("Venta", comment="TP")
        SL := 0

    if take_profit == "Opuesta" and close <= banda_inferior
        strategy.close("Venta", comment="TP")
        SL := 0
    // Verificar el Stop loss
    if close >= SL
        strategy.close("Venta", comment="SL")
        SL := 0

// Salida
plot(SL > 0 ? SL : na, style=plot.style_circles, color=color.red)
g1 = plot(banda_superior, color=color.aqua)
plot(banda_central, color=color.red)
g2 = plot(banda_inferior, color=color.aqua)
fill(g1, g2, color=color.aqua, transp=97)

// Dibujar niveles de sobrecompra/sobreventa del RSI
hline(rsi_overbought, "RSI Overbought", color=color.red)
hline(rsi_oversold, "RSI Oversold", color=color.green)

Más.