La estrategia RSI-Bollinger Band para capturar la volatilidad

El autor:¿ Qué pasa?, Fecha: 2023-12-01 14:17:55
Las etiquetas:

img

Resumen general

La estrategia RSI-Bollinger Band es una estrategia de trading que integra los conceptos de Bollinger Bands (BB), Relative Strength Index (RSI) y Simple Moving Average (SMA) para generar señales de trading.

El RSI puede ayudar a identificar condiciones de sobrecompra o sobreventa en estos mercados a menudo especulativos.

Cómo funciona

Banda de Bollinger Dinámica: La estrategia primero calcula las bandas de Bollinger superiores e inferiores basadas en la longitud y el multiplicador definidos por el usuario. Luego utiliza las bandas de Bollinger y el precio de cierre para ajustar dinámicamente el valor de la banda de Bolling actual. Finalmente, genera una señal larga cuando el precio cruza la banda de Bolling actual y una señal corta cuando el precio cruza por debajo.

RSI: Si el usuario elige usar RSI para señales, la estrategia también calcula el RSI y su SMA, y los utiliza para generar señales largas y cortas adicionales.

La estrategia luego comprueba la dirección comercial seleccionada y entra en posiciones largas o cortas en consecuencia.

Por último, la estrategia sale de una posición cuando el precio de cierre cruza por debajo/por encima de la actual banda de Bolling para posiciones largas/cortas, respectivamente.

Análisis de ventajas

La estrategia combina los puntos fuertes de las bandas de Bollinger, el RSI y el SMA para adaptarse a la volatilidad del mercado, capturar dinámicamente las fluctuaciones y generar señales de negociación a niveles de sobrecompra/sobreventa.

El RSI complementa las señales de Bollinger, evitando entradas falsas en los mercados de rango.

Los parámetros personalizables permiten ajustar las preferencias individuales de riesgo.

Análisis de riesgos

La estrategia se basa en indicadores técnicos y no puede anticipar importantes reversiones basadas en los fundamentos.

Los parámetros de Bollinger pueden generar señales demasiado frecuentes o demasiado escasas.

El comercio bidireccional aumenta el riesgo, cuidado con las pérdidas cortas invertidas.

Se recomienda utilizar paradas para controlar el riesgo.

Direcciones de optimización

  1. Añadir otros filtros como MACD para filtrar las señales.

  2. Incorporar estrategias de stop loss.

  3. Optimice los parámetros de Bollinger y RSI.

  4. Ajustar los parámetros para diferentes productos y plazos.

  5. Considere los parámetros de sintonización en vivo para adaptarse a las condiciones reales.

Resumen de las actividades

La estrategia RSI-Bollinger de captura de volatilidad es una estrategia basada en indicadores técnicos, que combina las fortalezas de las bandas de Bollinger, RSI y SMA ajustando dinámicamente las bandas de Bollinger para capturar las fluctuaciones del mercado.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading

//@version=5
// Define the strategy settings
strategy('Volatility Capture RSI-Bollinger - Strategy [presentTrading]', overlay=true)

// Define the input parameters for the indicator
priceSource  = input.source(title='Source', defval=hlc3, group='presentBollingBand') // The price source to use
lengthParam   = input.int(50, 'lengthParam', minval=1, group='presentBollingBand') // The length of the moving average
multiplier = input.float(2.7183, 'Multiplier', minval=0.1, step=.1, group='presentBollingBand') // The multiplier for the ATR
useRSI = input.bool(true, 'Use RSI for signals', group='presentBollingBand') // Boolean input to decide whether to use RSI for signals
rsiPeriod = input.int(10, 'RSI Period', minval=1, group='presentBollingBand') // The period for the RSI calculation
smaPeriod = input.int(5, 'SMA Period', minval=1, group='presentBollingBand') // The period for the SMA calculation
boughtRange = input.float(55, 'Bought Range Level', minval=1, group='presentBollingBand') // The level for the bought range
soldRange = input.float(50, 'Sold Range Level', minval=1, group='presentBollingBand') // The level for the sold range

// Add a parameter for choosing Long or Short
tradeDirection = input.string("Both", "Trade Direction", options=["Long", "Short", "Both"], group='presentBollingBand') // Dropdown input for trade direction

// Calculate the bollingerBand
barIndex = bar_index // The current bar index
upperBollingerBand = ta.sma(high, lengthParam) + ta.stdev(high, lengthParam) * multiplier // Calculate the upper Bollinger Band
lowerBollingerBand = ta.sma(low, lengthParam) - ta.stdev(low, lengthParam) * multiplier // Calculate the lower Bollinger Band

var float presentBollingBand = na // Initialize the presentBollingBand variable
crossCount = 0 // Initialize the crossCount variable

// Calculate the buy and sell signals
longSignal1 = ta.crossover(priceSource, presentBollingBand) // Calculate the long signal
shortSignal1 = ta.crossunder(priceSource, presentBollingBand) // Calculate the short signal

// Calculate the RSI
rsiValue = ta.rsi(priceSource, rsiPeriod) // Calculate the RSI value
rsiSmaValue = ta.sma(rsiValue, smaPeriod) // Calculate the SMA of the RSI value

// Calculate the buy and sell signals
longSignal2 = rsiSmaValue > boughtRange // Calculate the long signal based on the RSI SMA
shortSignal2 = rsiSmaValue < soldRange // Calculate the short signal based on the RSI SMA

presentBollingBand := na(lowerBollingerBand) or na(upperBollingerBand)?0.0 : close>presentBollingBand?math.max(presentBollingBand,lowerBollingerBand) : close<presentBollingBand?math.min(presentBollingBand,upperBollingerBand) : 0.0


if (tradeDirection == "Long" or tradeDirection == "Both") and longSignal1 and (useRSI ? longSignal2 : true) // Use RSI for signals if useRSI is true
    presentBollingBand := lowerBollingerBand // If the trade direction is "Long" or "Both", and the long signal is true, and either useRSI is false or the long signal based on RSI is true, then assign the lowerBollingerBand to the presentBollingBand.
    strategy.entry("Long", strategy.long) // Enter a long position.

if (tradeDirection == "Short" or tradeDirection == "Both") and shortSignal1 and (useRSI ? shortSignal2 : true) // Use RSI for signals if useRSI is true
    presentBollingBand := upperBollingerBand // If the trade direction is "Short" or "Both", and the short signal is true, and either useRSI is false or the short signal based on RSI is true, then assign the upperBollingerBand to the presentBollingBand.
    strategy.entry("Short", strategy.short) // Enter a short position.

// Exit condition
if (strategy.position_size > 0 and ta.crossunder(close, presentBollingBand)) // If the strategy has a long position and the close price crosses under the presentBollingBand, then close the long position.
    strategy.close("Long")
if (strategy.position_size < 0 and ta.crossover(close, presentBollingBand)) // If the strategy has a short position and the close price crosses over the presentBollingBand, then close the short position.
    strategy.close("Short")

//~~ Plot
plot(presentBollingBand,"presentBollingBand", color=color.blue) // Plot the presentBollingBand on the chart.

Más.