Estrategia de ruptura de bandas de Bollinger de varios plazos que incorpore el RSI

El autor:¿ Qué pasa?, Fecha: 2024-02-21 13:59:31
Las etiquetas:

img

Resumen general

Esta estrategia incorpora bandas de Bollinger, indicador RSI y análisis de marcos de tiempo múltiples para capturar la dirección de las tendencias a medio y largo plazo. Identifica puntos de inversión de tendencia a través de breakouts de bandas de Bollinger combinados con señales de sobrecompra / sobreventa de RSI para una entrada de bajo riesgo. Mientras tanto, se aplican marcos de tiempo más altos para filtrar mercados variados y evitar quedar atrapados.

Estrategia lógica

  1. La banda media es el promedio móvil del precio de cierre durante N días. Las bandas superior e inferior se colocan a una distancia de una desviación estándar a cada lado de la banda media. Romper por encima de la banda superior indica alza mientras que romper por debajo de la banda inferior indica bajista.

  2. Incorporar el indicador RSI para identificar los niveles de sobrecompra/sobreventa. RSI por encima de 70 sugiere condiciones de sobrecompra mientras que por debajo de 30 sugiere condiciones de sobreventa. Una ruptura al alza del RSI por encima de 70 confirma el debilitamiento del impulso al alza. Una ruptura a la baja del RSI por debajo de 30 confirma el debilitamiento del impulso a la baja.

  3. Cuando una señal de ruptura aparece en el marco de tiempo diario, requiere una confirmación adicional de los marcos de tiempo de 4 horas o más para evitar quedar atrapado.

Ventajas

  1. La integración de múltiples indicadores mejora la estabilidad y la rentabilidad de la estrategia.

  2. La inclusión de RSI mitiga las pérdidas de las falsas rupturas.

  3. El análisis de múltiples marcos de tiempo filtra eficazmente los mercados y evita quedar atrapados.

  4. La determinación optimizada de la señal de ruptura (rupturas en 3 barras consecutivas) garantiza una madurez de tendencia suficiente antes de las entradas.

  5. El indicador de vórtice determina la dirección de la tendencia naciente desde el principio.

Los riesgos

  1. La inadecuada parametrización de las bandas de Bollinger conduce a señales erróneas de sobrecompra/sobreventa.

  2. Los valores razonables de los parámetros RSI deben determinarse por separado para los diferentes productos.

  3. Las señales de ruptura pueden resultar ser falsas rupturas.

  4. Mantener un margen de stop loss suficiente, por ejemplo, 3 veces el ATR.

Oportunidades de mejora

  1. Aplicar algoritmos de aprendizaje automático para ajustar automáticamente los parámetros de Bollinger Bands y RSI.

  2. Optimizar los niveles de stop loss basados en las métricas de volatilidad.

  3. Incorporar un módulo de dimensionamiento de posiciones para calibrar las exposiciones en función de las condiciones cambiantes del mercado.

  4. Limitar las pérdidas máximas por operación basándose en los principios de gestión del dinero.

  5. Evaluar la estabilidad de la señal en diferentes sesiones de negociación.

Conclusión

Esta estrategia examina de manera exhaustiva la determinación de tendencias, las condiciones de sobrecompra/sobreventa y múltiples marcos de tiempo para controlar los riesgos, al tiempo que busca el momento de entrada óptimo para capturar tendencias de mediano a largo plazo de alta calidad para perfiles de riesgo-recompensa atractivos.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
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/
// © Noway0utstorm
//@version=5
strategy(title='Vortex0.71.3 + bb 3bar breakout + rsi - close hit upper or lower', shorttitle='truongphuthinh', format=format.price, precision=4,overlay = true)

length = input(20, title="Length")
mult = input(2.0, title="Multiplier")
source = close

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)

upperBand = basis + dev
lowerBand = basis - dev

isClosedBar = ta.change(time("15"))

var bool closeAboveUpperBand = false
var bool closeBelowLowerBand = false


// Vortex Indicator Settings
period_ = input.int(14, title='Period', minval=2)

VMP = math.sum(math.abs(high - low[1]), period_)
VMM = math.sum(math.abs(low - high[1]), period_)
STR = math.sum(ta.atr(1), period_)
VIP = VMP / STR
VIM = VMM / STR

//
lengthrsi = input(14, title="RSI Length")
overboughtLevel = input(70, title="Overbought Level")
oversoldLevel = input(30, title="Oversold Level")

sourcersi = close
rsiValue = ta.rsi(sourcersi, lengthrsi)

shouldShort = rsiValue > overboughtLevel
shouldLong = rsiValue < oversoldLevel




if bool(isClosedBar[1]) and bool(isClosedBar[2]) and bool(isClosedBar[3])

    if close[1] > upperBand[1] and close[2] > upperBand[2] and close[3] > upperBand[3] and VIP > 1.25 and VIM < 0.7 and rsiValue > overboughtLevel
        strategy.entry("Short", strategy.short)
        closeAboveUpperBand := false  // Reset the condition when entering a new Short position
    if close[1] < lowerBand[1] and close[2] < lowerBand[2] and close[3] < lowerBand[3] and VIP < 0.7 and VIM > 1.25 and rsiValue < oversoldLevel
        strategy.entry("Long", strategy.long)
        closeBelowLowerBand := false  // Reset the condition when entering a new Long position



if strategy.position_size > 0  // Check if there is an open Long position
    closeAboveUpperBand := close > upperBand  // Update the condition based on close price
    if closeAboveUpperBand
        strategy.close("Long",disable_alert=true)  // Close the Long position if close price is above upper band

if strategy.position_size < 0  // Check if there is an open Short position
    closeBelowLowerBand := close < lowerBand  // Update the condition based on close price
    if closeBelowLowerBand
        strategy.close("Short",disable_alert=true)  // Close the Short position if close price is below lower band

// Plots
plot(basis, color=color.orange, title="Basis")
p1 = plot(upperBand, color=color.blue, title="Upper Band")
p2 = plot(lowerBand, color=color.blue, title="Lower Band")
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

Más.