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

Автор:Чао Чжан, Дата: 2023-11-28 16:57:28
Тэги:

img

Обзор

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

Принципы

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

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

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

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

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

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

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

В случае неудачи полос Боллинджера, мы можем сократить параметр n, чтобы сделать полосы более чувствительными, или уменьшить ширину полосы, чтобы снизить вероятность потерь.

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

К основным направлениям оптимизации этой стратегии относятся:

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

Заключение

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


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.3", shorttitle = "Bollinger str 1.3", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")

fromyear = input(2018, defval = 2018, 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")
showbands = input(true, defval = true, title = "Show Bollinger Bands")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body
body = abs(close - open)
abody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0 
up1 = bar == -1 and ohlc4 >= basis and ohlc4 < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset
dn1 = bar == 1 and ohlc4 <= basis and ohlc4 > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset
up2 = close <= lower and usect
dn2 = close >= upper and usect
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Больше