Эта стратегия основана на индикаторе Болинджерских полос. Она длится, когда цена превышает нижнюю полосу, и закрывает позицию, когда цена касается верхней полосы. Стратегия использует принцип сдерживания Болинджерских полос для отслеживания ненормальных ценовых прорывов для покупки низкого и продажи высокого.
Вычислить средний диапазон SMA как простую скользящую среднюю недавних цен закрытия.
Вычислить стандартное отклонение StdDev для отражения диапазона колебаний цен.
Добавить верхнее смещение стандартного отклонения к средней полосе SMA, чтобы получить верхнюю полосу.
Вычитаем нижнее смещение стандартного отклонения от средней полосы SMA, чтобы получить нижнюю полосу.
Пройдите длинный курс, когда цена закрытия выйдет выше нижней полосы снизу вверх.
Закрыть позицию, когда цена достигнет верхней полосы, так как цена считается ненормальной.
Наибольшее преимущество этой стратегии заключается в использовании статистических свойств полос Боллинджера для эффективного отслеживания аномальных колебаний рынка и улавливания тенденций.
Более высокие и более низкие полосы могут автоматически адаптироваться к волатильности рынка.
Сигналы прорыва более надежные для входа.
Возвращение к среднему - это разумно для получения прибыли.
Огромное пространство для настройки параметров для адаптации к различным рынкам.
Может отслеживать среднесрочные и долгосрочные тенденции, а также использоваться в краткосрочной перспективе.
Потенциальными рисками этой стратегии являются главным образом:
Плохая производительность полос Боллинджера на рынках с ограниченным диапазоном, избегайте ошибочных записей.
Сигналы прорыва могут быть ложными, требуют осторожного суждения.
Позиция получения прибыли слишком идеализирована, может быть оптимизирована для фактического ценового действия.
Неправильное настройка параметров может привести к чрезмерной торговле или чрезмерной консервативности.
Период обратного тестирования должен быть достаточно длинным, чтобы избежать приспособления кривой.
Соответствующие меры управления рисками:
Добавить индикаторы объема торговли для фильтрации сигналов.
Оптимизировать параметры и данные испытаний с разных рынков.
Добавьте остановку потерь, уровень прибыли.
Оцените расхождения сигналов, избегайте погони за максимумами и продажей минимумов.
Стратегия может быть оптимизирована в следующих аспектах:
Попробуйте различные комбинации параметров полос Боллинджера, чтобы найти оптимальный.
Добавьте MA, MACD и т.д. для фильтрации сигналов прорыва.
Применение алгоритмов машинного обучения для оптимизации параметров Боллинджера.
Оценить силу прорывов и скорректировать размер позиции.
Проверка на более длительные периоды для проверки устойчивости.
Добавить механизмы остановки потери для контроля риска.
В целом, стратегия Боллингерских полос является общедоступной стратегией, которая эффективно отслеживает ненормальные колебания цен. Но мы также должны отметить ее отклонение от фактической цены и постоянно оптимизировать параметры. При использовании для живой торговли строгое управление рисками является обязательным для контроля потери на торговле.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-12 04:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="BB training No Repainting (OTS Mode)", overlay=true) // Strategy Rules: // 1. Enter trade when price crosses above the lower band // 2. Exit trade when price touches the upper band // // Chart Properties testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(01, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0) testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? #6c6f6c : na bgcolor(testPeriodBackgroundColor, transp=97) // User provided values smaLength = input(title="SMA Length", type=input.integer, defval=20) // Middle band period length (moving average) stdLength = input(title="StdDev Length", type=input.integer, defval=20) // Range to apply bands to ubOffset = input(title="Upper Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviations above MA lbOffset = input(title="Lower Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviation below MA testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false smaValue = sma(close, smaLength) // Middle band stdDev = stdev(close, stdLength) upperBand = smaValue + stdDev * ubOffset // Top band lowerBand = smaValue - stdDev * lbOffset // Bottom band // Plot bands to chart plot(series=smaValue, title="SMA", color=color.green) plot(series=upperBand, title="UB", color=color.blue, linewidth=2) plot(series=lowerBand, title="LB", color=color.blue, linewidth=2) longCondition = (crossover(close, lowerBand)) closeLongCondition = (close >= upperBand) if (longCondition and testPeriod()) strategy.entry(id="CALL", long=true) strategy.close(id="CALL", when=closeLongCondition)