
La estrategia de bloqueo de la oscilación de banda ancha es una estrategia de ruptura de la línea larga basada en el indicador de la banda de Brin para determinar si la volatilidad del mercado ha disminuido. Cuando el mercado entra en la fase de liquidación de la oscilación, la banda de Brin se desvía y se produce una convergencia, momento en que juzgamos que es una oportunidad para entrar en el campo. Al mismo tiempo, combinamos el indicador de rango de fluctuación real promedio para confirmar la disminución de la volatilidad de los precios.
La estrategia se basa principalmente en el indicador de la banda de Brin para determinar si el precio entró en un período de oscilación baja. La línea de la banda de Brin es el promedio móvil del precio de cierre, y las trayectorias ascendentes y descendentes tienen dos diferencias estándar. Cuando la volatilidad de los precios disminuye, el espacio entre las trayectorias ascendentes y descendentes se contrae de manera notable.
Para confirmar aún más la caída de la volatilidad, detectamos si las medias móviles de los valores de ATR están en una tendencia descendente. La caída de los valores de los ATR promedio también es una evidencia lateral de que la volatilidad está disminuyendo.
Cuando compramos, activamos la estrategia de detención móvil con el doble del valor de ATR como distancia de parada. Esto puede controlar las pérdidas de manera efectiva.
La mayor ventaja de esta estrategia es que puede determinar con precisión el momento óptimo para comprar, ya que el mercado entra en un período de ajuste de la oscilación baja. En comparación con otras estrategias de línea larga, la estrategia de bloqueo de la oscilación de banda ancha tiene una mayor probabilidad de obtener ganancias.
En segundo lugar, la estrategia también utiliza el stop loss móvil para controlar activamente el riesgo. Esto permite reducir al máximo las pérdidas incluso en condiciones adversas. Esto es algo que muchas estrategias de línea larga carecen.
El principal riesgo de la estrategia reside en que el indicador de la banda de Brin no puede determinar con un 100 por ciento de precisión los cambios en la volatilidad de los precios. Cuando la banda de Brin erróneamente determina que la volatilidad disminuye, el momento en que compramos puede ser desfavorable.
Además, los ajustes de los diferentes parámetros de la estrategia también afectan los resultados. Necesitamos optimizar los parámetros mediante una gran cantidad de retroalimentación para que la estrategia sea más sólida.
Podemos considerar añadir otros indicadores para confirmar que los indicadores de tendencia también muestran signos de reversión al mismo tiempo que se contraen en la banda de Brin. Por ejemplo, cuando la banda de Brin se contrae, al mismo tiempo se requiere que el diferencial MACD haya sido invertido positivamente, o que el RSI haya sido detectado por el área de sobreventa, etc. Esto puede mejorar aún más la precisión del momento de compra.
La otra dirección es probar el efecto de diferentes parámetros en los resultados, como el ciclo de la banda de Brin, el ciclo ATR y la configuración de los múltiplos de stop loss móviles. Necesitamos usar la optimización por pasos para encontrar la combinación óptima de parámetros.
La estrategia de bloqueo de la oscilación de la banda ancha es una estrategia de ruptura de la línea larga relativamente estable que utiliza el indicador de la banda de Brin para determinar el momento en que la volatilidad de los precios disminuye, y el riesgo de control efectivo de los paros móviles. Todavía necesitamos optimizar aún más los parámetros y combinar otros indicadores para mejorar la solidez 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