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


Дата создания: 2023-09-22 14:31:17 Последнее изменение: 2023-09-22 14:31:17
Копировать: 1 Количество просмотров: 678
1
Подписаться
1617
Подписчики

Обзор

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

Стратегический принцип

Эта стратегия использует индикатор Брин-пояса для определения направления тренда. Брин-пояса строят верхнюю и нижнюю полосы, рассчитывая стандартную разницу цены. Когда цена прорывает верхнюю полосу, считается, что тенденция начинается вверх; когда цена прорывает нижнюю полосу, считается, что тенденция начинается вниз.

Конкретная логика сделки заключается в следующем:

  1. Расчет средней, верхней и нижней полос Брин-ленты.

  2. Когда цена пробивает верхнюю траекторию, открывается дополнительный билет; когда цена пробивает нижнюю траекторию, открывается пустой билет.

  3. Используйте следящий стоп для контроля риска, когда цена начинает возвращаться назад.

  4. Вновь пробиваясь через орбиту Брин-пояса, он снова входит в тренд.

Использование бринговых лент для определения направления тренда и динамического отслеживания стоп-лосса позволяет эффективно контролировать риск.

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

Эта стратегия имеет следующие преимущества:

  1. Использование BRI для определения тенденций просто и эффективно.

  2. Комбинация прорывного входа и динамического trailing stop loss, с учетом захвата тренда и контроля риска.

  3. Структура кода ясна, проста, легко понятна и легко изменяется.

  4. Меньше параметров для оптимизации.

  5. Подходит для разных сортов, гибкая.

  6. “Мы не можем позволить, чтобы это произошло, потому что мы не можем позволить, чтобы это произошло.

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

Основные риски этой стратегии:

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

  2. Невозможно отличить расширение от истинной тенденции, что может привести к ошибкам.

  3. Стоп-пойнт слишком плотный и может быть нарушен обычными колебаниями цен.

  4. Не учитывается влияние на стоимость сделки.

  5. Время отслеживания ограничено и может быть слишком коротким.

Соответствующее решение:

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

  2. Увеличение идентификации толчков и каналов.

  3. Динамическая корректировка стоп-пойнтов в зависимости от показателей, таких как ATR.

  4. Добавление комиссионных, расчет скольжения.

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

Направление оптимизации

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

  1. Тест на комбинацию различных показателей.

  2. Повышенное распознавание колебаний трендов.

  3. Введение динамических параметров оптимизации методов машинного обучения.

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

  5. Оценить и включить в стоимость сделки.

  6. Параметровые пространства оптимизируются, чтобы найти оптимальные параметры Settings。

  7. Повышение уровня управления деньгами для контроля за риском позиции.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2022-09-15 00:00:00
end: 2023-09-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Bollinger Band Breakout", shorttitle = "BB Strategy",initial_capital=1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_type = strategy.commission.percent, commission_value = 0.3, max_bars_back = 1000, overlay=true)

// Inputs //

sma = input(20,  minval=1)
mult   = input(1.2, minval=0.001, maxval=50)
src = input(close)

// alert msg  //

message_long_entry  = input("long entry")
message_short_entry = input("short entry")

// Calculations //

basis = sma(close, sma)
dev   = mult * stdev(close, sma)

upper = basis + dev
lower = basis - dev

// Backtest //
fromyear = input(2019, defval = 2019, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(1, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

leverage = input(1, "Leverage")

term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

// PLOT //

plot(basis, color = color.gray,  linewidth = 2)
lu = plot(upper, color = color.green, linewidth = 2)
ll = plot(lower, color = color.red,   linewidth = 2)

fill(lu, ll, color = color.gray)

// Signals //

long  = crossover(close, upper)
short = crossunder(close, lower)

// Strategy entry //
strategy.initial_capital = 50000
if (long and term)
    strategy.entry("long",  strategy.long, qty=strategy.initial_capital/close*leverage, when = long and barstate.isconfirmed, alert_message = message_long_entry)
    
if (short and term)
    strategy.entry("short",  strategy.short, qty=strategy.initial_capital/close*leverage, when = short and barstate.isconfirmed, alert_message = message_short_entry)

// strategy exit //

strategy.exit("long tsl", "long", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)
strategy.exit("short tsl", "short", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)