Стратегия торговли на основе полос отклонения VWAP и фильтра волатильности

VWAP ATR 偏差带 波动性过滤
Дата создания: 2025-04-07 11:57:02 Последнее изменение: 2025-04-07 11:57:10
Копировать: 0 Количество просмотров: 510
2
Подписаться
319
Подписчики

Стратегия торговли на основе полос отклонения VWAP и фильтра волатильности Стратегия торговли на основе полос отклонения VWAP и фильтра волатильности

Обзор

VWAP-полоса отклонения с волатильной фильтрацией - это система торговли в течение дня, основанная на заданной величине, взвешенной средней цене (VWAP) и стандартном канале отклонения. Эта стратегия использует VWAP в качестве центральной точки отсчета цены, в сочетании с H1/H2 и L1/L2 реверсивной формой Аль Брукса, и фильтрует низкую волатильность через волатильный фильтр ATR, создавая структурированную структуру для принятия решений о сделках.

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

Основные принципы этой стратегии основаны на следующих ключевых компонентах:

  1. Вычисление VWAP за каждый торговый день: Перезагружайте расчет VWAP в начале каждого торгового дня, чтобы убедиться, что эталонная точка цены тесно связана с торговой активностью в этот день.

  2. Входный сигнал

    • Многоголовый вход ((H1/H2): когда цена открывается ниже, чем в 2 раза ниже стандартной диапазоны отклонения, но закрывается выше этой диапазоны отклонения, при этом имея достаточную многоголовую интенсивность ((исчисляется по месту закрытия в пределах барной зоны)).
    • Вход в лоб ((L1/L2): когда цена открывается выше, чем в 2 раза выше отклонения от стандартной диапазоны, но закрывается ниже отклонения, при этом имеется достаточная сила лоб.
  3. Волатильный фильтр

    • Использование ATR ((14) для измерения волатильности рынка
    • Скинуть торговый сигнал, когда стандартный отклонение слишком мал (< 3 ATR), чтобы избежать ошибочного входа в низко волатильную среду
  4. Параметры остановки

    • Многоголовый: низкая точка сигнального столба за вычетом буферной зоны остановки
    • Пустота: высота сигнального столба плюс буферная зона остановки
  5. Стратегия выхода из игры

    • Различная логика выхода может быть сконфигурирована независимо для многопространственного направления
    • Варианты включают в себя: возвращение к VWAP, достижение целевого уровня определенной полосы отклонения или отключение автоматической прибыли
  6. Механизм безопасного выхода

    • Запуск безопасного выхода при последовательном появлении заданного количества обратных столбцов
    • Многоголовие: последовательность X пенисов
    • Пустота: последовательность X солнечных столбов

Стратегия реализует полный набор механизмов вычисления силы сигнала, чтобы оценить качество каждого сигнала, рассчитывая относительное местоположение цены закрытия в диапазоне высоких и низких точек. Входный сигнал считается действительным только тогда, когда сила сигнала достигает минимальной отметки (например, 0.7).

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

После более глубокого анализа кода эта стратегия имеет следующие значительные преимущества:

  1. Рыночная структура входаСтратегия заключается не в том, чтобы просто следить за ценовыми колебаниями, а в том, чтобы искать конкретные обратные формы цены вблизи отклонения, что означает, что торговля проводится в соответствии со статистическим преимуществом возвращения к среднему значению.

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

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

  4. Независимая многопространственная конфигурация: Стратегия позволяет трейдерам самостоятельно конфигурировать условия входа и выхода для многоголовых и белоголовых сделок, что очень ценно для оптимизации производительности на рынках с направленным предпочтением.

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

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

  7. Подчеркнуть качество сигналаС помощью расчета силы сигнала, стратегия фокусируется на высококачественном обратном сигнале, а не только на механическом скрещивании цены и полосы отклонения.

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

Несмотря на хорошую конструкцию, существуют следующие потенциальные риски:

  1. Риск переворота на рынкеВ качестве стратегии, основанной на регрессии средней величины, в сильных трендовых рынках может часто вызываться обратный сигнал, что приводит к последовательным остановкам. Решение: В сильных трендовых условиях можно отключить торговлю в обратном направлении или добавить фильтрующие условия.

  2. Параметр ЧувствительностьВысокая эффективность стратегии зависит от нескольких ключевых параметров, таких как кратность стандартного отклонения, размер стоп-убытков и порог силы сигнала. Решение: проведение всесторонней оптимизации параметров и анализа чувствительности, чтобы найти стабильный набор параметров в разных рыночных условиях.

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

  4. Риск фиксированной потериРешение: рассмотреть возможность использования динамического остановки на основе ATR, чтобы остановка соответствовала текущей волатильности рынка.

  5. Отсутствие фильтрации объема сделокСтратегия: Несмотря на использование VWAP, нет прямой фильтрации низких объемов торгов, что может привести к созданию ненадежных сигналов в условиях недостаточной ликвидности. Решение: добавление условий обесценения объемов торгов, чтобы обеспечить торговлю только в условиях достаточной ликвидности

  6. Время безопасного выходаРешение: рассмотреть механизм динамического безопасного выхода в сочетании с колебаниями цен и количеством столбов.

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

Основываясь на анализе кода, можно сделать следующее:

  1. Динамическая отклонение в кратном числе: текущая стратегия использует фиксированный стандартный дифференциал в 2 раза в качестве условия для входа. Можно рассмотреть возможность корректировки этого множителя в зависимости от динамики волатильности рынка, используя большее множительное в высоко-волатильных рынках и меньшее множительное в низко-волатильных рынках, чтобы адаптироваться к различным рыночным условиям.

  2. Добавление временного фильтра• Фильтрация на конкретные периоды времени, избегание нестабильных периодов, таких как открытие, закрытие рынка и обеденное время, или сосредоточение на конкретных эффективных торговых периодах.

  3. Интегрированный анализ структуры рынкаВключение более высоких временных рамок в анализ трендов, торговля только в направлении, соответствующем более широким трендам, или более строгие условия фильтрации на сигналы, противопоставляющие тренду.

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

  5. Подтверждение объема сделки: при формировании входного сигнала, добавление условий подтверждения объема сделки, чтобы гарантировать, что сигнал сопровождается достаточным участием в рынке, повышая надежность сигнала.

  6. Реализация динамического управления убытками: замена фиксированных стоп-стоп на динамические стоп-стоп на основе ATR или реализация мобильных стоп-стоп, защищая полученную прибыль.

  7. Добавить фильтр прибыли/убытка: Перед входом рассчитывайте потенциальную цель по отношению к стоп-лоску и выполняйте только те сделки, которые имеют достаточное рентабельное соотношение между прибылью и убытком.

  8. Интеграция сезонности и календарного эффектаАнализ и использование сезонных моделей и календарных эффектов на конкретных рынках для увеличения торговли в статистически благоприятные периоды или уменьшения торговли в неблагоприятные периоды.

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2025-03-30 00:00:00
end: 2025-03-31 20:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("VWAP Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, initial_capital=2000)

// === Inputs ===
src = input.source(hlc3, "Source")
stopPoints = input.float(20.0, "Stop Buffer (Points from Signal Bar High/Low)", step=0.25)

exitModeLong = input.string("VWAP", "Long Exit Rule", options=["VWAP", "Deviation Band", "None"])
exitModeShort = input.string("VWAP", "Short Exit Rule", options=["VWAP", "Deviation Band", "None"])
targetLongDeviation = input.float(2.0, "Long Target Deviation", step=0.1)
targetShortDeviation = input.float(2.0, "Short Target Deviation", step=0.1)

enableSafetyExit = input.bool(true, "Enable Safety Exit")
numOpposingBars = input.int(3, "Opposing Bars for Safety Exit", minval=1)

allowLongs = input.bool(true, "Allow Long Trades")
allowShorts = input.bool(true, "Allow Short Trades")

minStrength = input.float(0.7, "Minimum Signal Strength (0-1)", step=0.05)

showVWAP = input.bool(true, "Show VWAP")
showBands = input.bool(true, "Show Entry Bands")
showLowVolZones = input.bool(true, "Highlight Low Vol Zones")

// === VWAP Session Logic ===
var float sumSrc = na
var float sumVol = na
var float sumSrcSqVol = na

newSession = ta.change(time("D"))
if newSession or na(sumSrc)
    sumSrc := 0.0
    sumVol := 0.0
    sumSrcSqVol := 0.0

sumSrc += src * volume
sumVol += volume
sumSrcSqVol += math.pow(src, 2) * volume

vwap = sumSrc / sumVol
variance = (sumSrcSqVol / sumVol) - math.pow(vwap, 2)
stdev = math.sqrt(variance)

// === Deviation Bands ===
bandEntryMult = 2.0
entryUpper = vwap + stdev * bandEntryMult
entryLower = vwap - stdev * bandEntryMult

targetUpperLong = vwap + stdev * targetLongDeviation
targetLowerShort = vwap - stdev * targetShortDeviation

// === ATR-Based Volatility Filter ===
atrVal = ta.atr(14)
isVolTooLow = stdev * 2 < atrVal * 3
bgcolor(showLowVolZones and isVolTooLow ? color.new(color.orange, 85) : na, title="Low Volatility Zone")

// === Signal Strength Calculations ===
barRange = high - low
bullStrength = barRange > 0 ? (close - low) / barRange : 0
bearStrength = barRange > 0 ? (high - close) / barRange : 0

// === Entry Triggers with Strength Filter ===
isH1H2 = open < entryLower and close > entryLower and bullStrength >= minStrength
isL1L2 = open > entryUpper and close < entryUpper and bearStrength >= minStrength

plotshape(isH1H2, title="H1/H2", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.tiny)
plotshape(isL1L2, title="L1/L2", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.tiny)

// === Signal Bar Stop Tracking ===
var float signalLow = na
var float signalHigh = na

// === Entry Logic ===
longCondition = allowLongs and isH1H2 and strategy.position_size == 0 and not isVolTooLow
shortCondition = allowShorts and isL1L2 and strategy.position_size == 0 and not isVolTooLow

if longCondition
    strategy.entry("Long", strategy.long)
    signalLow := low

if shortCondition
    strategy.entry("Short", strategy.short)
    signalHigh := high

// === Reset Signal Bar Info
if strategy.position_size == 0
    signalLow := na
    signalHigh := na

// === Apply Signal-Bar-Based Stop
if strategy.opentrades > 0
    if strategy.position_size > 0 and not na(signalLow)
        strategy.exit("Long SL", from_entry="Long", stop=signalLow - stopPoints)
    if strategy.position_size < 0 and not na(signalHigh)
        strategy.exit("Short SL", from_entry="Short", stop=signalHigh + stopPoints)

// === Target Exits (Independent per side)
exitLongVWAP = strategy.position_size > 0 and exitModeLong == "VWAP" and high >= vwap
exitLongDev  = strategy.position_size > 0 and exitModeLong == "Deviation Band" and high >= targetUpperLong
exitShortVWAP = strategy.position_size < 0 and exitModeShort == "VWAP" and low <= vwap
exitShortDev  = strategy.position_size < 0 and exitModeShort == "Deviation Band" and low <= targetLowerShort

if exitModeLong != "None" and (exitLongVWAP or exitLongDev)
    strategy.close("Long", comment="Target Exit")

if exitModeShort != "None" and (exitShortVWAP or exitShortDev)
    strategy.close("Short", comment="Target Exit")

// === Safety Exit
bullishBar(i) => close[i] > open[i]
bearishBar(i) => close[i] < open[i]

bullCount = 0
bearCount = 0
for i = 0 to numOpposingBars - 1
    bullCount += bullishBar(i) ? 1 : 0
    bearCount += bearishBar(i) ? 1 : 0

exitSafetyLong = enableSafetyExit and strategy.position_size > 0 and bearCount == numOpposingBars
exitSafetyShort = enableSafetyExit and strategy.position_size < 0 and bullCount == numOpposingBars

if exitSafetyLong
    strategy.close("Long", comment="Safety Exit")

if exitSafetyShort
    strategy.close("Short", comment="Safety Exit")

// === Plotting ===
plot(showVWAP ? vwap : na, color=color.blue, title="VWAP")
pUpper = plot(showBands ? entryUpper : na, color=color.green, title="Upper Entry Band")
pLower = plot(showBands ? entryLower : na, color=color.red, title="Lower Entry Band")
fill(pUpper, pLower, color=color.new(color.gray, 85))