Динамическая стратегия торговли с прорывом VWAP с двойным стандартным отклонением, основанная на количественной статистике

VWAP SD VOL HL2
Дата создания: 2025-01-06 16:31:36 Последнее изменение: 2025-01-06 16:31:36
Копировать: 2 Количество просмотров: 438
1
Подписаться
1617
Подписчики

Динамическая стратегия торговли с прорывом VWAP с двойным стандартным отклонением, основанная на количественной статистике

Обзор

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

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

  1. Расчет основного показателя:
  • Рассчитайте VWAP, используя внутридневную цену и объем HL2
  • Рассчитать стандартное отклонение на основе колебаний цен
  • Установите 1,28-кратное стандартное отклонение верхнего и нижнего каналов.
  1. Логика транзакции:
  • Условия входа: цена пересекает нижнюю дорожку, а затем поднимается до верхней дорожки.
  • Условия выхода: достижение заданной цели по прибыли
  • Установите минимальный интервал заказа, чтобы избежать частой торговли

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

  1. Базовая статистика
  • Ссылка на точку опоры цены на основе VWAP
  • Использование стандартного отклонения для измерения волатильности
  • Динамически корректировать торговый диапазон
  1. Контроль риска
  • Установите фиксированные цели прибыли
  • Контроль частоты транзакций
  • Стратегии, ориентированные только на длинную позицию, снижают риск

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

  1. Рыночный риск
  • Дикая волатильность может привести к ложным прорывам
  • Трудно точно уловить поворотный момент тенденции.
  • Односторонний спад приводит к большим потерям
  1. Параметр Риск
  • Стандартное отклонение множественной настройки чувствительности
  • Необходимо оптимизировать установку целевой прибыли
  • Интервал торговли влияет на прибыльность

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

  1. Оптимизация сигнала
  • Добавить фильтр оценки тенденций
  • Подтверждено изменениями в объеме торгов
  • Добавьте другие технические индикаторы для проверки
  1. Оптимизация управления рисками
  • Динамически устанавливаемая позиция стоп-лосса
  • Корректируйте позиции на основе волатильности
  • Улучшение механизма управления заказами

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

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5 
strategy("VWAP Stdev Bands Strategy (Long Only)", overlay=true)

// Standard Deviation Inputs
devUp1 = input.float(1.28, title="Stdev above (1)")
devDn1 = input.float(1.28, title="Stdev below (1)")

// Show Options
showPrevVWAP = input(false, title="Show previous VWAP close?")
profitTarget = input.float(2, title="Profit Target ($)", minval=0) // Profit target for closing orders
gapMinutes = input.int(15, title="Gap before new order (minutes)", minval=0) // Gap for placing new orders

// VWAP Calculation
var float vwapsum = na
var float volumesum = na
var float v2sum = na
var float prevwap = na // Track the previous VWAP
var float lastEntryPrice = na // Track the last entry price
var int lastEntryTime = na // Track the time of the last entry

start = request.security(syminfo.tickerid, "D", time)
newSession = ta.change(start)

vwapsum := newSession ? hl2 * volume : vwapsum[1] + hl2 * volume
volumesum := newSession ? volume : volumesum[1] + volume
v2sum := newSession ? volume * hl2 * hl2 : v2sum[1] + volume * hl2 * hl2

myvwap = vwapsum / volumesum
dev = math.sqrt(math.max(v2sum / volumesum - myvwap * myvwap, 0))

// Calculate Upper and Lower Bands
lowerBand1 = myvwap - devDn1 * dev
upperBand1 = myvwap + devUp1 * dev

// Plot VWAP and Bands with specified colors
plot(myvwap, style=plot.style_line, title="VWAP", color=color.green, linewidth=1)
plot(upperBand1, style=plot.style_line, title="VWAP Upper (1)", color=color.blue, linewidth=1)
plot(lowerBand1, style=plot.style_line, title="VWAP Lower (1)", color=color.red, linewidth=1)

// Trading Logic (Long Only)
longCondition = close < lowerBand1 and close[1] >= lowerBand1 // Price crosses below the lower band

// Get the current time in minutes
currentTime = timestamp("GMT-0", year(timenow), month(timenow), dayofmonth(timenow), hour(timenow), minute(timenow))

// Check if it's time to place a new order based on gap
canPlaceNewOrder = na(lastEntryTime) or (currentTime - lastEntryTime) >= gapMinutes * 60 * 1000

// Close condition based on profit target
if (strategy.position_size > 0)
    if (close - lastEntryPrice >= profitTarget)
        strategy.close("B")
        lastEntryTime := na // Reset last entry time after closing

// Execute Long Entry
if (longCondition and canPlaceNewOrder)
    strategy.entry("B", strategy.long)
    lastEntryPrice := close // Store the entry price
    lastEntryTime := currentTime // Update the last entry time

    // Add label for the entry
    label.new(bar_index, close, "B", style=label.style_label_down, color=color.green, textcolor=color.white, size=size.small)

// Optional: Plot previous VWAP for reference
prevwap := newSession ? myvwap[1] : prevwap[1]
plot(showPrevVWAP ? prevwap : na, style=plot.style_circles, color=close > prevwap ? color.green : color.red)