Аббревиатура VWAP (Volume Weighted Average Price) означает средневзвешенную по объёмам сделок цену. Напомню, что точное определение VWAP производится по тикам (всем обезличенным сделкам) по формуле:
VWAP = sum(Pi * Vi) / sum(Vi),
где Pi — цена, а Vi — объём i-й обезличенной сделки. Далее, если значения VWAP для каждой 1-минутной свечи уже рассчитаны, то можно найти VWAP для любого набора 1-минутных свечей по формуле:
VWAP = sum(VWAPi * Vi) / sum(Vi),
где Vi — объём i-й свечи, а VWAPi — значение VWAP для i-й свечи.
Некоторые алготрейдеры применяют VWAP в своих алгоритмах. Возможно, что данная заметка им поможет.
Предположим, что тиков нет в наличии, а имеются лишь 1-минутные свечи, тогда имеет смысл использовать какое-то приближение для VWAP, которое можно определить по значениям цен O, H, L и C.
Рассмотрим несколько вариантов аппроксимаций и сравним их качество.
Аппроксимация 1. VWAP ≈ С.
Аппроксимация 2. VWAP ≈ (O + С) / 2.
Аппроксимация 3. VWAP ≈ (H + L) / 2.
Аппроксимация 4. VWAP ≈ (H + L + C) / 3 = Typical Price.
Аппроксимация 5. VWAP ≈ (O + H + L + C) / 4.
Аппроксимация 6. VWAP ≈ 0,5 * (2 * (H*H — L*L) — |C*C — O*O|) / (2 * (H — L) — |C — O|), если H > L, и VWAP = H, если H = L.
Откуда берётся формула для последней аппроксимации я расскажу позже, а пока сравним качество этих аппроксимаций на примере 1-минутных данных SBER, MXU6, CRU6 и NGN6, используя тики за один торговый день 2026-07-02.
Для каждой 1-минутной свечи рассчитаем точное значение VWAP, значение аппроксимации APPROX и относительную погрешность (APPROX — VWAP) / VWAP * 100%. После этого возьмём относительную погрешность по модулю и вычислим среднее значение с весами, равными объёму свечи. По полученным данным можно понять, каковы типичные ошибки аппроксимаций и ранжировать их от худших к лучшим.
Промежуточные расчёты показать тяжело, поскольку количество 1-минутных свечей в торговом дне порядка нескольких сотен штук, но итоги сравнения относительных ошибок для каждой из аппроксимаций выглядят следующим образом.
|Ошибка,%|Approx1|Approx2|Approx3|Approx4|Approx5|Approx6|
|SBER | 0,0288| 0,0188| 0,0119| 0,0134| 0,0130| 0,0129|
|MXU6 | 0,0358| 0,0233| 0,0118| 0,0135| 0,0166| 0,0112|
|CRU6 | 0,0316| 0,0269| 0,0110| 0,0150| 0,0183| 0,0089|
|NGN6 | 0,0466| 0,0449| 0,0192| 0,0227| 0,0310| 0,0147|
Из таблицы видно, что худшими аппроксимациями являются 1 и 2, а лучшими — 3 и 6, причём аппроксимация 6 чаще является наилучшей. Кроме того, использование свечей вместо тиков даёт погрешность порядка 0,01%, что может быть неплохим компромиссом между использованием большого количества тиков и заметно меньшего количества свечей. Понятно, что результаты могут меняться день ото дня, но выводы остаются теми же. Лично меня удивило, что аппроксимация 3, использующая только пара цен H и L, лучше, чем аппроксимация 4, где применяются 3 цены, хотя, казалось бы, чем больше данных усредняется, тем лучше результат.
Осталось раскрыть метод, которым была получена формула для аппроксимации 6. Если у свечи O < C, будем считать, что траектория движения цены имела вид:
O -> L -> H -> C.
При движении O -> L средняя цена была (O + L) / 2, при движении L -> H она равнялась (H + L) / 2 и при движении H -> C она составляла (H + C) / 2. Теперь усредним эти три значения с весами, пропорциональными длинам отрезков OL, LH и HC, равными O — L, H — L и H — C соответственно. В результате получим:
((O + L) / 2 * (O — L) + (H + L) / 2 * (H — L) + (H + C) / 2 * (H — C)) / (O — L + H — L + H — C).
Это выражение можно немного упростить, используя формулы алгебры средней школы.
Также нужно рассмотреть свечу, где O > C с траекторией движения цены O -> H -> L -> C, и вывести аналогичную формулу. Отдельное упражнение состоит в том, чтобы объединить оба случая в приведённую выше общую формулу с использованием знака модуля.
Всем желаю успехов в торговле!
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.