Стратегия полос Боллинджера - это классическая стратегия, которая использует полосы Боллинджера для отслеживания тренда и сигналов перекупа/перепродажи.
Стратегия оценивает условия перекупки/перепродажи с помощью золотых/мертвых кроссоверов верхних/нижних полос Боллинджера для установления позиций. Площадь между полосами отражает текущий диапазон волатильности рынка. Полосы состоят из средних, верхних и нижних полос, где средняя полоса представляет собой простую скользящую среднюю за N дней, а верхние/нижние полосы представляют собой среднюю полосу +/- K стандартных отклонений.
Боллингерские полосы отражают волатильность рынка и диапазон колебаний. Прикосновение к нижней полосе означает перепроданный статус-кво - пробелы имеют более высокую вероятность заполнения. Таким образом, длинные позиции должны рассматриваться на основе принципа среднего реверсии. Точно так же, прикосновение к верхней полосе представляет потенциальные условия перекупки и вероятные перевороты цен, поэтому короткие позиции могут быть установлены для получения прибыли от понижающихся движений.
Эта стратегия объединяет сигналы перекупленности/перепроданности от полос Боллинджера для отслеживания тренда.
Когда цена пересекает нижний диапазон, рынок выходит из перепроданной зоны в разумный диапазон. Долгие позиции могут быть открыты. Когда цена пересекает верхний диапазон, рынок становится перекупленным.
После выполнения ордеров, фиксированные процентные уровни стоп-лосса устанавливаются для управления рисками.
Определить уровни перекупа/перепродажи с помощью полос Боллинджера для установки низких покупок-высоких продаж, судя по кроссоверу полос.
Зафиксировать тенденции через свойство волатильности полос Боллинджера.
Механизм стоп-лосса эффективно ограничивает максимальную потерю на одну сделку.
Сочетание отслеживания тренда и стоп-лосса приводит к стабильным прибылям.
Настройки параметров влияют на качество сигнала. Средняя длина полосы N и множитель стандартного отклонения K должны быть рационально настроены для разных рынков, иначе точность пострадает.
Слишком большой или недостаточный стоп-лосс вредит стабильности прибыли. Слишком большой процент рискует более крупными потерями на сделку, в то время как недостаточно большой процент рискует преждевременным стоп-лосом. Разумный процент должен быть установлен на основе разных продуктов.
Дополнительные фильтры с другими индикаторами могут улучшить точность сигнала.
Различные параметры периода хранения могут быть проверены, например, объединение часовых или более коротких периодов для повышения частоты торговли и повышения эффективности использования капитала.
Эта стратегия использует полосы Боллинджера для сигналов перекупа / перепродажи и включает стоп-лосс для контроля риска. Это общая стратегия отслеживания тренда. Благодаря оптимизации параметров, интеграции более точных сигналов и уровней стоп-лосса можно достичь устойчивой прибыли.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000) source = input(close, "Source") length = input.int(20, minval=1) mult = input.float(2.0, minval=0.001, maxval=50, step=0.001) stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1) basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) upper = basis + dev lower = basis - dev var float lastTradePrice = na var float stopLossLow = na var float stopLossHigh = na var bool currentIsLong = na var bool nextExpectedIsLong = true var bool existedLong = false var bool existedShort = false buyEntry = ta.crossover(source, lower) sellEntry = ta.crossunder(source, upper) if (buyEntry and nextExpectedIsLong == true) strategy.entry("BBandLE", strategy.long, comment="BBandLE") nextExpectedIsLong := false if(nz(strategy.position_size[1], 0) < 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandLE") if (sellEntry and nextExpectedIsLong == false) strategy.entry("BBandSE", strategy.short, comment="BBandSE") nextExpectedIsLong := true if(nz(strategy.position_size[1], 0) > 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandSE") strategy.close("BBandLE", close < stopLossLow) strategy.close("BBandSE", close > stopLossHigh) // if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh) // strategy.entry("BBandLE", strategy.long, comment="BBandLE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) // if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow) // strategy.exit("BBandSE", strategy.short, comment="BBandSE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) plot(source, "close", color.blue) plot(lower, "lower", color.red) plot(upper, "upper", color.red) plot(stopLossLow, "StopLossLow", color.black) plot(stopLossHigh, "StopLossHigh", color.black) plot(lastTradePrice, "lastTradePrice", color.green) plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green) plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)