Многоиндикаторная стратегия следования за трендом, сочетающая тройной супертренд и полосы Боллинджера

Boll ST ATR SMA BB MA
Дата создания: 2024-12-20 14:28:58 Последнее изменение: 2024-12-20 14:28:58
Копировать: 0 Количество просмотров: 460
1
Подписаться
1617
Подписчики

Многоиндикаторная стратегия следования за трендом, сочетающая тройной супертренд и полосы Боллинджера

Обзор

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

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

Основная логика стратегии включает в себя следующие ключевые части:

  1. Используется 20-циклическая лента Брин, стандартная дифференциация которой равна 2.0, для оценки колебаний цены
  2. Установка трех линий сверхтенденции с периодом 10, параметрами 3,0, 4,0 и 5,0
  3. Множественные условия входа: цена пробивает Брин-полосу и тремя сверхтенденционными линиями показывает тенденцию к росту
  4. Входные условия: цены упали за пределы подъёма по Бринской полосе, и все три сверхтяжелые линии показывают нисходящий тренд
  5. Прямая позиция - это текущая позиция, которую вы держите, когда любая линия сверхтенденции меняет направление.
  6. Использование средней ценовой линии в качестве заполнения ссылок, чтобы усилить визуальный эффект

Стратегические преимущества

  1. Механизм многократного подтверждения: значительное снижение ложных сигналов с помощью комбинации Брин-полосы и тройной сверхтенденции
  2. Сильная возможность отслеживания тенденций: последовательная параметровая настройка супертенденционного индикатора, позволяющая эффективно улавливать тенденции на разных уровнях
  3. Отличное управление рисками: быстрое ликвидация и контролируемое отступление от позиций при появлении признаков обратного тренда
  4. Настраиваемость параметров: параметры индикаторов могут быть оптимизированы в соответствии с различными рыночными характеристиками
  5. Высокий уровень автоматизации: ясная логика стратегии и возможность ее систематизации

Стратегический риск

  1. Риск рыночных потрясений: ложные прорывы могут часто возникать на рынках с горизонтальными потрясениями
  2. Влияние скольжения: в периоды сильных колебаний возможны большие потери скольжения
  3. Риск задержек: многократные подтверждения могут привести к задержкам при поступлении
  4. Чувствительность параметров: Различные комбинации параметров могут привести к большим различиям в эффективности стратегии.
  5. Зависимость от рыночной конъюнктуры: стратегии лучше работают на рынках с заметными тенденциями

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

  1. Введение показателя объема сделок: подтверждение эффективности ценовых прорывов через объем сделок
  2. Оптимизированный механизм остановки: можно добавить мобильный или динамический остановку на основе ATR
  3. Добавление временной фильтрации: запрет на торговлю в определенные периоды времени, чтобы избежать неэффективных колебаний
  4. Добавление фильтра волатильности: изменение позиции или приостановка торговли в период чрезмерной волатильности
  5. Механизм адаптации параметров разработки: динамическая корректировка параметров в соответствии с состоянием рынка

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

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

Исходный код стратегии
//@version=5
strategy("Demo GPT - Bollinger + Triple Supertrend Combo", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3)

// -------------------------------
// User Input for Date Range
// -------------------------------
startDate = input(title="Start Date", defval=timestamp("2018-01-01 00:00:00"))
endDate   = input(title="End Date",   defval=timestamp("2069-12-31 23:59:59"))

// -------------------------------
// Bollinger Band Inputs
// -------------------------------
lengthBB = input.int(20, "Bollinger Length")
multBB   = input.float(2.0, "Bollinger Multiplier")

// -------------------------------
// Supertrend Inputs for 3 lines
// -------------------------------
// Line 1
atrPeriod1 = input.int(10, "ATR Length (Line 1)", minval = 1)
factor1    = input.float(3.0, "Factor (Line 1)", minval = 0.01, step = 0.01)

// Line 2
atrPeriod2 = input.int(10, "ATR Length (Line 2)", minval = 1)
factor2    = input.float(4.0, "Factor (Line 2)", minval = 0.01, step = 0.01)

// Line 3
atrPeriod3 = input.int(10, "ATR Length (Line 3)", minval = 1)
factor3    = input.float(5.0, "Factor (Line 3)", minval = 0.01, step = 0.01)

// -------------------------------
// Bollinger Band Calculation
// -------------------------------
basis = ta.sma(close, lengthBB)
dev   = multBB * ta.stdev(close, lengthBB)
upperBand = basis + dev
lowerBand = basis - dev

// Plot Bollinger Bands
plot(upperBand, "Upper BB", color=color.new(color.blue, 0))
plot(basis,     "Basis",    color=color.new(color.gray, 0))
plot(lowerBand, "Lower BB", color=color.new(color.blue, 0))

// -------------------------------
// Supertrend Calculation Line 1
// -------------------------------
[supertrendLine1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrendLine1 := barstate.isfirst ? na : supertrendLine1

upTrend1   = plot(direction1 < 0 ? supertrendLine1 : na, "Up Trend 1",   color = color.green, style = plot.style_linebr)
downTrend1 = plot(direction1 < 0 ? na : supertrendLine1, "Down Trend 1", color = color.red,   style = plot.style_linebr)

// -------------------------------
// Supertrend Calculation Line 2
// -------------------------------
[supertrendLine2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrendLine2 := barstate.isfirst ? na : supertrendLine2

upTrend2   = plot(direction2 < 0 ? supertrendLine2 : na, "Up Trend 2",   color = color.new(color.green, 0), style = plot.style_linebr)
downTrend2 = plot(direction2 < 0 ? na : supertrendLine2, "Down Trend 2", color = color.new(color.red, 0),   style = plot.style_linebr)

// -------------------------------
// Supertrend Calculation Line 3
// -------------------------------
[supertrendLine3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrendLine3 := barstate.isfirst ? na : supertrendLine3

upTrend3   = plot(direction3 < 0 ? supertrendLine3 : na, "Up Trend 3",   color = color.new(color.green, 0), style = plot.style_linebr)
downTrend3 = plot(direction3 < 0 ? na : supertrendLine3, "Down Trend 3", color = color.new(color.red, 0),   style = plot.style_linebr)

// -------------------------------
// Middle line for fill (used as a reference line)
// -------------------------------
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle", display = display.none)

// Fill areas for each supertrend line
fill(bodyMiddle, upTrend1,   color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend1, color.new(color.red,   90), fillgaps = false)

fill(bodyMiddle, upTrend2,   color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend2, color.new(color.red,   90), fillgaps = false)

fill(bodyMiddle, upTrend3,   color.new(color.green, 90), fillgaps = false)
fill(bodyMiddle, downTrend3, color.new(color.red,   90), fillgaps = false)

// Alerts for the first line only (as an example)
alertcondition(direction1[1] > direction1, title='Downtrend to Uptrend (Line 1)', message='Supertrend Line 1 switched from Downtrend to Uptrend')
alertcondition(direction1[1] < direction1, title='Uptrend to Downtrend (Line 1)', message='Supertrend Line 1 switched from Uptrend to Downtrend')
alertcondition(direction1[1] != direction1, title='Trend Change (Line 1)', message='Supertrend Line 1 switched trend')

// -------------------------------
// Strategy Logic
// -------------------------------
inDateRange = true

// Long Conditions
longEntryCondition = inDateRange and close > upperBand and direction1 < 0 and direction2 < 0 and direction3 < 0
longExitCondition = direction1 > 0 or direction2 > 0 or direction3 > 0

// Short Conditions
shortEntryCondition = inDateRange and close < lowerBand and direction1 > 0 and direction2 > 0 and direction3 > 0
shortExitCondition = direction1 < 0 or direction2 < 0 or direction3 < 0

// Execute Long Trades
if longEntryCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)

if strategy.position_size > 0 and longExitCondition
    strategy.close("Long")

// Execute Short Trades
if shortEntryCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)

if strategy.position_size < 0 and shortExitCondition
    strategy.close("Short")