Улучшенная стратегия обратного использования полос Боллинджера

Автор:Чао Чжан, Дата: 2021-09-21 11:45:37
Тэги:

Обзор

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

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

  1. Вычислить стандартные параметры BB: основание, dev, верхний BB и нижний BB.

  2. Вычислить SMA и диапазоны отклонений upex2 и dnex2 в определенном процентном соотношении к SMA.

  3. Примите среднее значение upex2, dnex2 с верхним BB, нижним BB, чтобы получить upex3 и dnex3.

  4. Возьмите большую часть upex3 и верхнюю часть BB как новую верхнюю часть upex, меньшую часть dnex3 и нижнюю часть BB как новую нижнюю часть dnex.

  5. Пройти длинную позицию, когда цена ниже dnex, закрыть позицию, когда появится зеленая свеча (закрыть > открыть).

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

  1. Улучшенный BB улучшает чувствительность исходного BB к более ранним сигналам обратного действия.

  2. Фильтровывает випса с шаблоном свечи.

  3. По результатам обратного теста показана стабильная рентабельность с 2008 по 2018 годы, плавная кривая, максимальный DD < 20%.

  4. Конфигурируемый кредитный рычаг, часы торговли для контроля рисков.

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

  1. Плохая настройка параметров BB может привести к чрезмерной торговле или упущенным возможностям.

  2. Долго, не в состоянии извлечь выгоду из изменения тренда.

  3. Фильтр свечи может задерживаться, не может выйти вовремя.

  4. 10-летние данные обратных испытаний недостаточны для проверки надежности.

  5. Не может адаптироваться к большим пробелам или открывающимся прыжкам.

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

  1. Испытать комбинации параметров для оптимизации настроек BB.

  2. Добавьте другие фильтры сигналов для повышения прибыльности.

  3. Рассмотрим короткие сделки, когда цена превышает верхнюю полосу.

  4. Установите стоп-лосс для ограничения потерь на одной сделке.

  5. Разработать автоматическую настройку на основе меняющегося рынка.

  6. Оптимизируйте правила входа для пробелов и прыжков.

  7. Расширить период обратного тестирования на тестовые параметры.

Резюме

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


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Advanced Bollinger Bands Strategy v1.0", shorttitle = "ABB str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
p = input(20, "bars")
d = input(25, "percent")
showlines = input(true, defval = true, title = "Show Lines?")
fromyear = input(1900, defval = 1900, 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(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

mult = input(2.0, minval=0.001, maxval=50)
basis = sma(close, p)
dev = mult * stdev(close, p)
source = close
upperBB = basis + dev
lowerBB = basis - dev
b1 = plot(basis, color=gray, linewidth=1)
p1 = plot(upperBB, color=aqua,  linewidth=1)
p2 = plot(lowerBB, color=aqua, linewidth=1)

//SMAs
sma = sma(close, p)
upex2 = sma * ((100 + d) / 100)
dnex2 = sma * ((100 - d) / 100)

upex3 = (upex2 + upperBB) / 2
dnex3 = (dnex2 + lowerBB) / 2

upex = max(upperBB, upex3)
dnex = min(lowerBB, dnex3)
//exit = (high > sma and low < sma)
exit = close > open


//Lines
col = showlines ? blue : na
plot(upex, linewidth = 3, color = col, transp = 0)
plot(sma, linewidth = 3, color = col, transp = 0)
plot(dnex, linewidth = 3, color = col, transp = 0)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[p]))
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnex)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = upex)

if exit
    strategy.close_all()

Больше