Стратегия прорыва Bollinger Bands

Автор:Чао Чжан, Дата: 2023-09-19 16:06:56
Тэги:

Обзор

Эта стратегия основана на индикаторе Болинджерских полос. Она длится, когда цена превышает нижнюю полосу, и закрывает позицию, когда цена касается верхней полосы. Стратегия использует принцип сдерживания Болинджерских полос для отслеживания ненормальных ценовых прорывов для покупки низкого и продажи высокого.

Принцип стратегии

  1. Вычислить средний диапазон SMA как простую скользящую среднюю недавних цен закрытия.

  2. Вычислить стандартное отклонение StdDev для отражения диапазона колебаний цен.

  3. Добавить верхнее смещение стандартного отклонения к средней полосе SMA, чтобы получить верхнюю полосу.

  4. Вычитаем нижнее смещение стандартного отклонения от средней полосы SMA, чтобы получить нижнюю полосу.

  5. Пройдите длинный курс, когда цена закрытия выйдет выше нижней полосы снизу вверх.

  6. Закрыть позицию, когда цена достигнет верхней полосы, так как цена считается ненормальной.

Анализ преимуществ

Наибольшее преимущество этой стратегии заключается в использовании статистических свойств полос Боллинджера для эффективного отслеживания аномальных колебаний рынка и улавливания тенденций.

  1. Более высокие и более низкие полосы могут автоматически адаптироваться к волатильности рынка.

  2. Сигналы прорыва более надежные для входа.

  3. Возвращение к среднему - это разумно для получения прибыли.

  4. Огромное пространство для настройки параметров для адаптации к различным рынкам.

  5. Может отслеживать среднесрочные и долгосрочные тенденции, а также использоваться в краткосрочной перспективе.

Анализ рисков

Потенциальными рисками этой стратегии являются главным образом:

  1. Плохая производительность полос Боллинджера на рынках с ограниченным диапазоном, избегайте ошибочных записей.

  2. Сигналы прорыва могут быть ложными, требуют осторожного суждения.

  3. Позиция получения прибыли слишком идеализирована, может быть оптимизирована для фактического ценового действия.

  4. Неправильное настройка параметров может привести к чрезмерной торговле или чрезмерной консервативности.

  5. Период обратного тестирования должен быть достаточно длинным, чтобы избежать приспособления кривой.

Соответствующие меры управления рисками:

  1. Добавить индикаторы объема торговли для фильтрации сигналов.

  2. Оптимизировать параметры и данные испытаний с разных рынков.

  3. Добавьте остановку потерь, уровень прибыли.

  4. Оцените расхождения сигналов, избегайте погони за максимумами и продажей минимумов.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих аспектах:

  1. Попробуйте различные комбинации параметров полос Боллинджера, чтобы найти оптимальный.

  2. Добавьте MA, MACD и т.д. для фильтрации сигналов прорыва.

  3. Применение алгоритмов машинного обучения для оптимизации параметров Боллинджера.

  4. Оценить силу прорывов и скорректировать размер позиции.

  5. Проверка на более длительные периоды для проверки устойчивости.

  6. Добавить механизмы остановки потери для контроля риска.

Резюме

В целом, стратегия Боллингерских полос является общедоступной стратегией, которая эффективно отслеживает ненормальные колебания цен. Но мы также должны отметить ее отклонение от фактической цены и постоянно оптимизировать параметры. При использовании для живой торговли строгое управление рисками является обязательным для контроля потери на торговле.


/*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)


Больше