Стратегия Supertrend Bollinger Bands

Автор:Чао Чжан, Дата: 2023-12-01 16:29:56
Тэги:

img

Обзор

Стратегия Supertrend Bollinger Bands - это распространенная стратегия индикатора остановки, основанная на ATR (средний истинный диапазон). Эта стратегия использует индикатор Supertrend для изображения бычьих и медвежьих каналов тренда на графике и генерирует торговые сигналы в сочетании с Bollinger Bands.

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

Стратегия использует два основных параметра - период и множитель, с значениями по умолчанию 10 и 3 соответственно.

Верхняя строка: Закрыть - (множитель x ATR) Нижняя линия: Close + (множитель x ATR)

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

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

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

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

Риски

  1. Склонность к ложным сигналам на боковых рынках
  2. Неправильное настройка параметров может привести к чрезмерной торговле
  3. Невозможно определить точки переворота тренда, с определенным отставанием

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

  1. Оптимизировать параметр периода ATR для уменьшения шума с помощью фильтров
  2. Включить другие показатели для определения поддержки/сопротивления с целью снижения вероятности отмены прибыли
  3. Добавить правила размещения позиций для ограничения потери по сделке

Резюме

Стратегия Supertrend Bollinger Bands объединяет сильные стороны нескольких технических индикаторов и использует динамический механизм остановки для эффективного отслеживания рыночных тенденций.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short)
buy1= barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

Больше