La estrategia de consolidación de Bollinger Bands es una estrategia innovadora que identifica fases de consolidación de baja volatilidad utilizando Bollinger Bands. Cuando el mercado entra en un período de oscilación, las Bandas de Bollinger convergerán, lo que indica una oportunidad para ingresar al mercado. También incorporamos el indicador de Rango Verdadero Medio para confirmar la disminución de la volatilidad.
La estrategia se basa principalmente en las bandas de Bollinger para detectar cuándo los precios entran en una fase de consolidación de baja volatilidad. La banda media de las bandas de Bollinger es un promedio móvil de los precios de cierre. Las bandas superior e inferior son compensadas por dos desviaciones estándar por encima y por debajo de la banda media. Cuando la volatilidad disminuye, la distancia entre las bandas superior e inferior se estrecha notablemente. Primero comprobamos si el valor actual de ATR es menor que la desviación estándar entre las bandas de Bollinger para confirmar preliminarmente la convergencia. Esto indica que los precios acaban de entrar en consolidación.
Para probar aún más la disminución de la volatilidad, comprobamos si el promedio móvil de los valores de ATR tiene una tendencia a la baja. La disminución del promedio de ATR también corrobora desde el lado que la volatilidad está disminuyendo. Cuando ambas condiciones se cumplen simultáneamente, determinamos que las bandas de Bollinger han mostrado una convergencia significativa, que es una excelente oportunidad de compra.
Después de comprar, activamos una estrategia de stop loss móvil con una distancia de stop loss del doble del valor ATR. Esto controla eficazmente las pérdidas.
La mayor ventaja de esta estrategia es que puede determinar con precisión cuándo el mercado entra en una fase de consolidación de baja volatilidad e identificar la mejor oportunidad de compra.
Además, la estrategia también utiliza un stop loss móvil para controlar activamente los riesgos. Esto maximiza la reducción de pérdidas incluso cuando el sentimiento del mercado es desfavorable. Muchas estrategias a largo plazo carecen de esto.
El principal riesgo de la estrategia es que el indicador Bollinger Bands no puede determinar con precisión los cambios en la volatilidad de los precios el 100% del tiempo. Cuando Bollinger Bands juzga erróneamente que la volatilidad ha disminuido, nuestro momento de entrada puede ser desfavorable. En este punto, el stop loss móvil juega un papel importante y puede salir del comercio lo antes posible.
Además, el establecimiento de varios parámetros en la estrategia también afectará a los resultados.
Podemos considerar la adición de otros indicadores para confirmar las señales de giro en los indicadores de tendencia cuando las Bandas de Bollinger convergen. Por ejemplo, cuando las Bandas de Bollinger convergen, también requerimos que la diferencia MACD haya pasado de positiva a negativa, o que el RSI se haya retirado de la zona de sobrecompra. Esto puede mejorar aún más la precisión de las señales de compra.
Otra dirección es probar el impacto de diferentes ajustes de parámetros en los resultados, como los períodos de Bollinger Bands, ATR y el multiplicador del stop loss móvil.
La estrategia de consolidación de Bollinger Bands utiliza Bollinger Bands para determinar el momento de disminución de la volatilidad de los precios y utiliza un stop loss móvil para controlar eficazmente los riesgos. Es una estrategia de ruptura a largo plazo relativamente estable. Todavía necesitamos optimizar aún más los parámetros e incorporar otros indicadores para mejorar la robustez de la estrategia.
/*backtest start: 2023-02-15 00:00:00 end: 2024-02-21 00:00:00 period: 1d basePeriod: 1h 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/ // © DojiEmoji //@version=4 strategy("[KL] Bollinger Bands Consolidation Strategy",overlay=true,pyramiding=1) // Timeframe { backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time) USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)") backtest_timeframe_end = input(defval = timestamp("19 Apr 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time) within_timeframe = true // } // Indicator: BOLL bands { BOLL_length = 20//input(20,title="Periods to lookback for BOLL and ATR calc. (default 20)") BOLL_src = close BOLL_center = sma(BOLL_src, BOLL_length) BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length) BOLL_upper = BOLL_center + BOLL_sDEV_x2 BOLL_lower = BOLL_center - BOLL_sDEV_x2 plot(BOLL_center, "Basis", color=#872323, offset = 0) BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = 0, transp=50) BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = 0, transp=50) fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85) // } // ATR and volatility Indicator { ATR_x2 = atr(BOLL_length) * 2 // multiplier aligns with BOLL avg_volat = sma(ATR_x2, BOLL_length) //} // Trailing stop loss { var entry_price = float(0) var trailing_SL_buffer = float(0) var stop_loss_price = float(0) trail_profit_line_color = color.green UPDATE_ATR_TSL = false if strategy.position_size == 0 or not within_timeframe // make TSL line less visible trail_profit_line_color := color.black stop_loss_price := close - trailing_SL_buffer else if strategy.position_size > 0 if UPDATE_ATR_TSL and ATR_x2 < trailing_SL_buffer trailing_SL_buffer := ATR_x2 stop_loss_price := max(stop_loss_price, close[1] - trailing_SL_buffer) plot(stop_loss_price,color=trail_profit_line_color) // } IGNORE_BOLL_SHAPE = false//input(false,title="Ignore BOLL (vs ATR) during entry (experimental)") IGNORE_VOLATILITY = false///input(false,title="Ignore average ATR during entry (experimental)") // Main: if within_timeframe // ENTRY: if (ATR_x2 > BOLL_sDEV_x2 or IGNORE_BOLL_SHAPE) and (avg_volat < avg_volat[1] or IGNORE_VOLATILITY) if strategy.position_size == 0 entry_price := close trailing_SL_buffer := ATR_x2 stop_loss_price := close - ATR_x2 strategy.entry("Long",strategy.long, comment="enter") if strategy.position_size > 0 strategy.entry("Long",strategy.long, comment="+") // EXIT: if strategy.position_size > 0 if low <= stop_loss_price if close > entry_price strategy.close("Long", comment="take profit") else if low <= entry_price strategy.close("Long", comment="stop loss") if strategy.position_size == 0 entry_price := 0