Скрипт TWAP на Pine Script v5: Алгоритмическое исполнение

Скрипт TWAP на Pine Script v5: Алгоритмическое исполнение Pine Script
Пошаговое руководство по созданию скрипта TWAP (Time-Weighted Average Price) на Pine Script v5 для алгоритмического исполнения ордеров с полосами отклонения.
Суть: Скрипт рассчитывает средневзвешенную по времени цену (TWAP) в Pine Script v5 для симуляции институционального исполнения ордеров. Он поддерживает сессионный, часовой и скользящий режимы расчета, а также строит коридоры допустимого отклонения (Execution Tolerance Bands) для минимизации проскальзывания.

Исходный код

Алгоритм TWAP (Time-Weighted Average Price) является классическим инструментом исполнения крупных блоков акций или криптоактивов. В отличие от VWAP, он не зависит от объемов торгов, что делает его незаменимым на низколиквидных рынках или в условиях манипулятивных объемов. Ниже представлен оптимизированный код индикатора для TradingView на языке Pine Script v5.

//@version=5
indicator("Quantitative TWAP Execution Engine", overlay=true)

// --- Входные параметры ---
twapMode      = input.string("Session", "Calculation Mode", options=["Session", "Rolling", "Hourly"])
rollingPeriod = input.int(20, "Rolling Period (Bars)", minval=1)
priceSrc      = input.source(hlc3, "Price Source")
showBands     = input.bool(true, "Show Execution Tolerance Bands")
bandDev       = input.float(1.5, "Band Deviation (StdDev)", minval=0.1, step=0.1)

// --- Логика расчета TWAP ---
var float sumPrice = 0.0
var int barCount = 0

isNewSession = timeframe.isintraday and ta.change(time("D")) != 0
isNewHour    = timeframe.isintraday and ta.change(time("H")) != 0

resetCondition = (twapMode == "Session" and isNewSession) or (twapMode == "Hourly" and isNewHour)

if resetCondition
    sumPrice := priceSrc
    barCount := 1
else
    sumPrice := sumPrice + priceSrc
    barCount := barCount + 1

float twapValue = twapMode == "Rolling" ? ta.sma(priceSrc, rollingPeriod) : (sumPrice / barCount)

// --- Полосы допустимого отклонения исполнения ---
float dev = ta.stdev(priceSrc, twapMode == "Rolling" ? rollingPeriod : barCount)
float upperBand = twapValue + (dev * bandDev)
float lowerBand = twapValue - (dev * bandDev)

// --- Визуализация ---
plot(twapValue, title="TWAP Benchmark", color=color.blue, linewidth=2)
plot(showBands ? upperBand : na, title="Upper Execution Limit", color=color.red, style=plot.style_dashed)
plot(showBands ? lowerBand : na, title="Lower Execution Limit", color=color.green, style=plot.style_dashed)

// --- Сигналы для алертов ---
alertcondition(ta.crossover(close, upperBand), title="Price Above TWAP Band", message="Execution price is too high relative to TWAP!")
alertcondition(ta.crossunder(close, lowerBand), title="Price Below TWAP Band", message="Execution price is highly favorable relative to TWAP!")

Разбор параметров

  • twapMode: Режим расчета TWAP. Доступны варианты "Session" (сброс каждую торговую сессию), "Hourly" (сброс каждый час) и "Rolling" (скользящее окно фиксированной длины).
  • rollingPeriod: Длина скользящего окна (в барах) для режима "Rolling". Используется функция ta.sma для оптимизации вычислений.
  • priceSrc: Источник цены для расчета. По умолчанию используется hlc3 (типичная цена), что является стандартом для институциональных расчетов.
  • showBands: Логический флаг для отображения полос допустимого отклонения исполнения. Помогает визуально оценить проскальзывание.
  • bandDev: Множитель стандартного отклонения (ta.stdev) для построения коридора волатильности вокруг TWAP.

Как запустить

Чтобы запустить скрипт на платформе TradingView, выполните следующие шаги:

1. Откройте график любого интересующего вас актива.

2. В нижней панели выберите вкладку Pine Editor.

3. Скопируйте представленный выше код и вставьте его в редактор, заменив весь существующий текст.

4. Нажмите кнопку Add to Chart (Добавить на график).

При реализации алгоритмов накопления позиции (аккумуляции) TWAP часто комбинируют с сеткой ордеров. Чтобы протестировать такую логику, изучите наш материал Бэктест пирамидинга в Pine Script v5: Средняя цена входа.

Если вы хотите отслеживать TWAP-метрики одновременно по нескольким инструментам, вам поможет Pine Script v5: Скринер MACD кроссоверов для 40 тикеров, принципы которого легко адаптировать под расчет средневзвешенных цен.

Для более глубокого анализа ликвидности в моменты исполнения ордеров по TWAP рекомендуется сопоставлять полученные уровни с дельтой объемов. В этом вам поможет наш Индикатор профиля дельты (Delta Profile) по барам с Intrabar Inspection в Pine Script v5.

Оцените статью
FinFluct