Исходный код
Алгоритм 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.




