Стратегия торговли прорывом полосы Боллинджера

Автор:Чао Чжан, Дата: 2023-12-19 14:08:45
Тэги:

img

Обзор

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

Логика стратегии

Эта стратегия использует средний / верхний / нижний рельс полос Боллинджера для определения экстремальных ценовых диапазонов. Средний рельс - это простая скользящая средняя цены закрытия за последние 25 периодов. Верхние и нижние рельсы представляют собой одно стандартное отклонение выше и ниже среднего рельса. Когда цена проходит через верхний или нижний рельс, это указывает на то, что существует прорыв и ненормальное поведение цен, которое может быть использовано для принятия торговых решений.

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

Стратегия также включает в себя некоторые дополнительные правила, такие как разрешение только на один сигнал в течение 24 часов, чтобы избежать ненужной торговли.

Преимущества стратегии

  1. Использование полос Боллинджера для определения ненормальных диапазонов цен относится к стратегиям отслеживания трендов, которые могут улавливать ценовые тенденции.
  2. Параметры стоп-лосса и прибыли устанавливаются в соответствии с принципами контроля одиночных потерь.
  3. Некоторые вспомогательные правила добавляются, чтобы избежать дублирования сигналов и ненужной торговли.

Риски стратегии

  1. Боллингерские полосы не могут полностью отражать ценовые тенденции, и могут быть ложные сигналы.
  2. Неправильное время сигналов прорыва может привести к потерям.
  3. Продолжительность и динамика трендовых или не трендовых рынков трудно предсказать, что может привести к ненужным длинным позициям.

Управление рисками:

  1. Настроить параметры полосы Боллинджера, чтобы оптимизировать время сигналов прорыва.
  2. Включить другие показатели для определения основной тенденции.
  3. Установите диапазон стоп-лосса и прибыли в соответствии с различными продуктами и рыночными условиями.

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

  1. Рассмотрим адаптивную оптимизацию параметров полосы Боллинджера, чтобы они лучше соответствовали текущим рыночным условиям.
  2. Включить другие показатели для оценки надежности сигналов тренда и избежать ложных сигналов.
  3. Включить модели машинного обучения для автоматического определения оптимального длительного и короткого времени.

Заключение

Подводя итог, это простая стратегия отслеживания трендов с использованием полос Боллинджера для определения ненормальных цен и отслеживания тенденций.


/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("I11L OIL Bot",overlay=true, initial_capital=1000000,default_qty_value=1000000,default_qty_type=strategy.cash,commission_type=strategy.commission.percent,commission_value=0.00)

leverage = input.float(1,"Leverage (x)",step=1)
SL_Factor = 1 - input.float(1,"Risk Capital per Trade (%)", minval=0.1, maxval=100, step=0.05) / 100 / leverage
TP_Factor = input.float(2, step=0.1)
invertBuyLogic = input.bool(false)
 
lookbackDistance = input.int(25)
devMult = input.float(2,step=0.1)

var lastSellHour = 0
var disableAdditionalBuysThisDay = false


if(time > lastSellHour + 1000 * 60 * 60 * 6)
    disableAdditionalBuysThisDay := false
if(strategy.position_size != strategy.position_size[1])
    disableAdditionalBuysThisDay := true
    lastSellHour := time

source = close

//Trade Logic
basis = ta.sma(source, lookbackDistance)
dev = devMult * ta.stdev(source, lookbackDistance)
upper = basis + dev
lower = basis - dev
isBuy = ta.crossunder(source, upper)
isBuyInverted = ta.crossover(source, lower)

plot(upper, color=color.white)
plot(lower, color=color.white)

strategy.initial_capital = 50000

if((invertBuyLogic ? isBuyInverted : isBuy) and not(disableAdditionalBuysThisDay))
    strategy.entry("Long", strategy.long, (strategy.initial_capital / close) * leverage)

if(strategy.position_size > 0)
    strategy.exit("SL Long", "Long", stop=strategy.position_avg_price * SL_Factor)
    strategy.close("Long",  when=close > strategy.position_avg_price * (1 + (1 - SL_Factor) * TP_Factor), comment="TP Long")





Больше