Это стратегия, основанная на индикаторе Болинджерских полос. Он использует прорыв верхних и нижних полос Болинджерских полос для определения направления тренда и открытия соответствующих позиций. Когда цены начинают падать, он использует стоп-лосс с динамическим интервалом для выхода из позиций и получения прибыли.
Стратегия использует полосы Боллинджера для определения направления тренда. полосы Боллинджера построены путем расчета стандартного отклонения цен для формирования верхней и нижней полос. Когда цены проходят через верхнюю полосу, это указывает на начало восходящего тренда. Когда цены проходят нижнюю полосу, это указывает на начало нисходящего тренда.
Конкретная логика торговли:
Вычислить средние, верхние и нижние полосы полос Боллинджера.
Когда цена проходит через верхнюю полосу, выходите в длинный, а когда цена проходит через нижнюю полосу, выходите в короткий.
Используйте стоп-лосс для контроля рисков и выхода, когда цены начинают падать.
Возвращайтесь к тренду, когда цены снова прорвутся через диапазоны.
Использование полос Боллинджера для определения тенденций и сочетание с динамическим стоп-лосом может эффективно контролировать риски.
Преимущества этой стратегии включают:
Использование полос Боллинджера для определения трендов, просто и эффективно.
Комбинация прорыва и динамического отслеживания стоп-лосса обеспечивает сбалансированное отслеживание тренда и контроль рисков.
Чистая и лаконичная структура кода, легкая для понимания и изменения.
Немногие параметры, легко оптимизировать.
Применяется для различных продуктов, гибкий.
Хорошие результаты обратных тестов, с большим потенциалом прибыли.
Основными рисками являются:
Болинджерские полосы полагаются исключительно на статистику, риски приспособления кривой.
Трудно отличить расширение диапазона и реальные тенденции, что может привести к ошибочным оценкам.
Точки остановки потерь слишком тесные, риски остановки нормальными колебаниями.
Не учитывается стоимость сделки.
Ограниченный период обратных испытаний, риск переподготовки.
Решения:
Оптимизировать параметры или добавлять другие показатели для проверки сигнала.
Улучшить идентификацию колебаний и каналов.
Динамическое регулирование стоп-потери на основе ATR и т.д.
Добавьте комиссию, расходы на сдвиг.
Расширить период обратного тестирования, проверку на разных рынках.
Стратегия может быть оптимизирована путем:
Испытание комбинированных эффектов различных показателей.
Улучшение идентификации колебаний тренда.
Внедрение машинного обучения для оптимизации динамических параметров.
Оптимизация стратегии стоп-лосса на основе результатов обратных тестов.
Оценка и суммирование затрат на транзакции.
Оптимизация пространства параметров для оптимальных настроек.
Добавление управления деньгами для контроля позиционных рисков.
Эта стратегия определяет направление тренда с помощью полос Боллинджера и контролирует риск с помощью стоп-лосса. Общая логика проста и ясна. Она имеет хорошую способность улавливать тренд, но может быть улучшена путем введения более технических индикаторов, оптимизации параметров, добавления затрат и т. Д.
/*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)