
VWAP-полоса отклонения с волатильной фильтрацией - это система торговли в течение дня, основанная на заданной величине, взвешенной средней цене (VWAP) и стандартном канале отклонения. Эта стратегия использует VWAP в качестве центральной точки отсчета цены, в сочетании с H1/H2 и L1/L2 реверсивной формой Аль Брукса, и фильтрует низкую волатильность через волатильный фильтр ATR, создавая структурированную структуру для принятия решений о сделках.
Основные принципы этой стратегии основаны на следующих ключевых компонентах:
Вычисление VWAP за каждый торговый день: Перезагружайте расчет VWAP в начале каждого торгового дня, чтобы убедиться, что эталонная точка цены тесно связана с торговой активностью в этот день.
Входный сигнал:
Волатильный фильтр:
Параметры остановки:
Стратегия выхода из игры:
Механизм безопасного выхода:
Стратегия реализует полный набор механизмов вычисления силы сигнала, чтобы оценить качество каждого сигнала, рассчитывая относительное местоположение цены закрытия в диапазоне высоких и низких точек. Входный сигнал считается действительным только тогда, когда сила сигнала достигает минимальной отметки (например, 0.7).
После более глубокого анализа кода эта стратегия имеет следующие значительные преимущества:
Рыночная структура входаСтратегия заключается не в том, чтобы просто следить за ценовыми колебаниями, а в том, чтобы искать конкретные обратные формы цены вблизи отклонения, что означает, что торговля проводится в соответствии со статистическим преимуществом возвращения к среднему значению.
Множественная фильтрацияС помощью волатильных фильтров, требований к интенсивности сигнала и конкретных ценовых моделей, многоуровневая фильтрация торговых сигналов значительно уменьшает количество ошибочных сигналов.
Гибкое управление рискамиСтратегия предлагает различные инструменты управления риском, включая жесткие остановки на основе сигнальных столбов, регулируемые цели прибыли и механизм безопасного выхода, что позволяет трейдерам регулировать параметры риска в зависимости от различных рыночных условий.
Независимая многопространственная конфигурация: Стратегия позволяет трейдерам самостоятельно конфигурировать условия входа и выхода для многоголовых и белоголовых сделок, что очень ценно для оптимизации производительности на рынках с направленным предпочтением.
Визуальная помощьСтратегия включает в себя множество вариантов визуализации, таких как VWAP, дисплей с отклонением и яркость в низких волатильных зонах, чтобы помочь трейдерам лучше понять состояние рынка и потенциальные сигналы.
Сеанс назначен на VWAP: пересчет VWAP на каждый торговый день, чтобы гарантировать, что цены всегда соответствуют текущей рыночной активности, и избежать проблем с использованием устаревших эталонных точек.
Подчеркнуть качество сигналаС помощью расчета силы сигнала, стратегия фокусируется на высококачественном обратном сигнале, а не только на механическом скрещивании цены и полосы отклонения.
Несмотря на хорошую конструкцию, существуют следующие потенциальные риски:
Риск переворота на рынкеВ качестве стратегии, основанной на регрессии средней величины, в сильных трендовых рынках может часто вызываться обратный сигнал, что приводит к последовательным остановкам. Решение: В сильных трендовых условиях можно отключить торговлю в обратном направлении или добавить фильтрующие условия.
Параметр ЧувствительностьВысокая эффективность стратегии зависит от нескольких ключевых параметров, таких как кратность стандартного отклонения, размер стоп-убытков и порог силы сигнала. Решение: проведение всесторонней оптимизации параметров и анализа чувствительности, чтобы найти стабильный набор параметров в разных рыночных условиях.
Не хватает времени на фильтрациюСтратегия не учитывает особенности торговых периодов, что может привести к ошибочным сигналам в периоды особенно высокой волатильности, такие как открытие или закрытие рынка. Решение: добавление фильтра времени, чтобы избежать торговли в определенные периоды рынка.
Риск фиксированной потериРешение: рассмотреть возможность использования динамического остановки на основе ATR, чтобы остановка соответствовала текущей волатильности рынка.
Отсутствие фильтрации объема сделокСтратегия: Несмотря на использование VWAP, нет прямой фильтрации низких объемов торгов, что может привести к созданию ненадежных сигналов в условиях недостаточной ликвидности. Решение: добавление условий обесценения объемов торгов, чтобы обеспечить торговлю только в условиях достаточной ликвидности
Время безопасного выходаРешение: рассмотреть механизм динамического безопасного выхода в сочетании с колебаниями цен и количеством столбов.
Основываясь на анализе кода, можно сделать следующее:
Динамическая отклонение в кратном числе: текущая стратегия использует фиксированный стандартный дифференциал в 2 раза в качестве условия для входа. Можно рассмотреть возможность корректировки этого множителя в зависимости от динамики волатильности рынка, используя большее множительное в высоко-волатильных рынках и меньшее множительное в низко-волатильных рынках, чтобы адаптироваться к различным рыночным условиям.
Добавление временного фильтра• Фильтрация на конкретные периоды времени, избегание нестабильных периодов, таких как открытие, закрытие рынка и обеденное время, или сосредоточение на конкретных эффективных торговых периодах.
Интегрированный анализ структуры рынкаВключение более высоких временных рамок в анализ трендов, торговля только в направлении, соответствующем более широким трендам, или более строгие условия фильтрации на сигналы, противопоставляющие тренду.
Оптимизация механизмов безопасного выхода: текущий безопасный выход основан на фиксированном количестве обратных столбцов. Выход можно рассматривать в сочетании с величиной ценового движения, например, для инициирования выхода, когда ценовое отступление превышает определенный процент максимально выгодного движения после входа.
Подтверждение объема сделки: при формировании входного сигнала, добавление условий подтверждения объема сделки, чтобы гарантировать, что сигнал сопровождается достаточным участием в рынке, повышая надежность сигнала.
Реализация динамического управления убытками: замена фиксированных стоп-стоп на динамические стоп-стоп на основе ATR или реализация мобильных стоп-стоп, защищая полученную прибыль.
Добавить фильтр прибыли/убытка: Перед входом рассчитывайте потенциальную цель по отношению к стоп-лоску и выполняйте только те сделки, которые имеют достаточное рентабельное соотношение между прибылью и убытком.
Интеграция сезонности и календарного эффектаАнализ и использование сезонных моделей и календарных эффектов на конкретных рынках для увеличения торговли в статистически благоприятные периоды или уменьшения торговли в неблагоприятные периоды.
Эти оптимизации могут повысить устойчивость и прибыльность стратегий, особенно их адаптацию в различных рыночных условиях.
Торговая стратегия 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))