Стратегия консолидации полос Боллинджера - это прорывная стратегия, которая идентифицирует фазы консолидации с низкой волатильностью с использованием полос Боллинджера. Когда рынок входит в промежуточный период, полосы Боллинджера сходятся, сигнализируя о возможности выхода на рынок.
Стратегия опирается в основном на полосы Боллинджера, чтобы обнаружить, когда цены входят в фазу консолидации с низкой волатильностью. Средняя полоса полос Боллинджера - это скользящая средняя цены закрытия. Верхние и нижние полосы компенсируются двумя стандартными отклонениями выше и ниже средней полосы. Когда волатильность снижается, расстояние между верхними и нижними полосами заметно сужается.
Чтобы еще больше доказать снижение волатильности, мы проверяем, имеет ли скользящая средняя стоимость ATR тенденцию к снижению. Уменьшение средней ATR также подтверждает со стороны, что волатильность снижается. Когда оба условия выполняются одновременно, мы определяем, что полосы Боллинджера показали значительную конвергенцию, что является отличной возможностью для покупки.
После покупки мы включим движущуюся стратегию стоп-лосса с расстоянием стоп-лосса в два раза больше значения ATR. Это эффективно контролирует потери.
Наибольшее преимущество этой стратегии заключается в том, что она может точно определить, когда рынок вступает в фазу консолидации с низкой волатильностью и определить лучшую возможность покупки.
Кроме того, стратегия также использует движущийся стоп-лосс для активного контроля рисков. Это максимизирует снижение потерь даже при неблагоприятных рыночных настроениях.
Основной риск стратегии заключается в том, что индикатор Bollinger Bands не может точно определить изменения волатильности цены 100% времени. Когда Bollinger Bands ошибочно оценивает, что волатильность снизилась, наше время входа может быть неблагоприятным. В этот момент движущийся стоп-лосс играет важную роль и может выйти из торговли как можно раньше.
Кроме того, установка различных параметров в стратегии также повлияет на результаты.
Мы можем рассмотреть возможность добавления других индикаторов для подтверждения обратных знаков на индикаторах тренда при сближении полос Боллинджера. Например, когда полосы Боллинджера сходятся, мы также требуем, чтобы разница MACD перешла от положительной к отрицательной, или RSI вышел из зоны перекупленности. Это может еще больше улучшить точность сигналов покупки.
Другим направлением является проверка влияния различных параметров на результаты, таких как периоды полос Боллинджера, ATR и множитель движущегося стоп-лосса.
Стратегия консолидации полос Боллинджера использует полосы Боллинджера для определения времени снижения волатильности цен и использует движущуюся стоп-лосс для эффективного контроля рисков. Это относительно стабильная долгосрочная стратегия выхода. Нам еще нужно дополнительно оптимизировать параметры и включить другие индикаторы для повышения надежности стратегии.
/*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