В процессе загрузки ресурсов... загрузка...

Трехкратный супертенд и полосы Боллинджера Многоиндикаторная тенденция после стратегии

Автор:Чао Чжан, Дата: 2024-12-20 14:28:58
Тэги:БоллСТATRSMAББМ.А.

img

Обзор

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

Принципы стратегии

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

  1. Использует 20-периодные полосы Боллинджера с множителем стандартного отклонения 2,0 для оценки волатильности
  2. Реализует три линии Supertrend с периодом 10 и факторами 3.0, 4.0 и 5.0
  3. Условия долгого входа: перерывы цены выше верхней полосы Боллинджера и все три линии Supertrend показывают рост
  4. Условия короткого входа: перерыв цены ниже нижней полосы Боллинджера и все три линии Supertrend показывают нисходящий тренд
  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")


Связанные

Больше