Расчет средневзвешенной цены на Московской бирже
Введение
Средневзвешенная цена является одним из ключевых показателей, используемым участниками торгов при принятии инвестиционных решений, алго-торговле, проверке качества брокерских услуг. Также применяется при оценке СЧА паевыми фондами и определении налоговой базы по операциям с ценными бумагами.
Средневзвешенная цена одной ценной бумаги за выбранный период времени определяется путем деления суммы произведений цен каждой из сделок, заключенных в данном периоде, на количество ценных бумаг в соответствующей сделке, на сумму количества ценных бумаг.
SUM(price*quantity) / SUM(quantity)
Данная формула снижает зависимость ценового показателя от сделок с небольшим количеством ценных бумаг и существенным отклонением по цене сделки, в частности от цены закрытия (цены последней сделки).
Московская биржа в соответствии с Правилами проведения торгов производит расчет нескольких юридически-значимых ценовых показателей, включая waprice
. Расчет waprice
производится нарастающим итогом с начала сессии в течение торгового дня.
Особенность расчета заключается в том, что несмотря на трансляцию waprice
для каждого режима по отдельности, значение средневзвешенной цены основывается на сделках из всех режимов торгов. В частности, в расчет waprice
включен режим РПС с ЦК, в котором регистрируются крупные сделки с существенным отклонением от текущей цены основного режима (в среднем на 0.59%
).
Приводимый ниже анализ обосновывает рекомендацию не использовать waprice
в качестве ценового показателя основного режима торгов. В качестве замены предлагается самостоятельно вычислять значение valtoday/voltoday
с округлением до шага цены.
Данное ограничение также затрагивает показатели, вычисляемые на основе waprice
:
marketprice2
: Рыночная цена (2) по методике ФСФР от 26 декабря 2006 г.marketpricetoday
: Рыночная цена (3) по методике ФСФР от 09 ноября 2010 г.prevwaprice
: Средневзвешенная цена предыдущего дняpriceminusprevwa
: Цена последней сделки к средневзвешенной цене предыдущего дня
Особенности расчета
Поле waprice
доступно под одноименной колонкой в ASTS шлюзе и передается 269-м тэгом с признаком 9 в FAST.
При расчете waprice
биржа руководствуется Пунктом 2 Приложения 2 к Положению 437-П Банка России и исходя из критерия "рыночных сделок" применяет фильтр режимов торгов, которые включаются для расчета средневзвешенной цены. Список режимов обновляется в Уведомлениях, Изменениях и по состоянию на 14.12.2021, выражение для фильтра режимов выглядит следующим образом:
market = 'FOND' AND class NOT IN('AUCT','AUBB','EQDP')
OR market = 'FNDT' AND class NOT IN('TQDB')
OR market = 'RPS' AND class IN('PSDB','PSDE','PSEO','PSEQ','PSEU','PSGO','PSIF','PSOB','PSQI','PSSD','PSTC','PSTD','PSTF','PSYO','IRK2')
OR market = 'RPST' AND class NOT IN('SPEQ')
Например, для наиболее ликвидных акций список включенных режимов, за вычетом устаревших режимов отчетности, состоит из основного режима TQBR и пяти дополнительных режимов:
| market | symbol | class | currency | trade_currency | step | lot |
|--------|--------|-------|----------|----------------|-----:|----:|
| FNDT | GAZP | LIQB | RUB | RUB | 0.01 | 1 |
| FNDT | GAZP | SMAL | RUB | RUB | 0.01 | 1 |
| FNDT | GAZP | TQBR | RUB | RUB | 0.01 | 10 |
| FNDT | GAZP | TQDP | RUB | RUB | 0.01 | 10 |
| RPS | GAZP | PSEQ | RUB | RUB | 0.01 | 1 |
| RPST | GAZP | PTEQ | RUB | RUB | 0.01 | 1 |
Посмотреть SQL запрос
SELECT SEC_DEF.marketcode AS market, tags.symbol AS symbol, tags.class_code AS class, tags.currency AS currency, tags.trade_currency AS trade_currency, tags."step" AS "step", tags.lot AS lot
FROM atsd_entity
WHERE tags.symbol = 'GAZP'
AND (
SEC_DEF.marketcode = 'FOND' AND entity.tags.class_code NOT IN('AUCT','AUBB','EQDP')
OR SEC_DEF.marketcode = 'FNDT' AND entity.tags.class_code NOT IN('TQDB')
OR SEC_DEF.marketcode = 'RPS' AND entity.tags.class_code IN('PSDB','PSDE','PSEO','PSEQ','PSEU','PSGO','PSIF','PSOB','PSQI','PSSD','PSTC','PSTD','PSTF','PSYO','IRK2')
OR SEC_DEF.marketcode = 'RPST' AND entity.tags.class_code NOT IN('SPEQ')
)
AND tags.class_code NOT IN('MQBR', 'MSML', 'MSEQ', 'MTEQ') -- устаревшие технологические классы
ORDER BY 1, 3
Проиллюстрируем особенность расчета waprice
на примере акций TCSG от 2020-11-27, в котором можно наблюдать как заключенная в режиме PTEQ сделка по цене 2444.2 рубля приводит к одновременному скачку waprice
в режиме TQBR c 2288 до 2305.6 рублей.
Поток trades:
2020-11-27 18:32:07.806370,3386941381,TCSG,B,2293.0, 35, 80255,TQBR
2020-11-27 18:32:09.260915,3386941534,TCSG,B,2293.0, 1, 2293,TQBR
2020-11-27 18:32:19.728784,3386942323,TCSG,B,2293.0, 1, 2293,TQBR
2020-11-27 18:32:21.038690,3386942407,TCSG,S,2444.2,23910,58440822,PTEQ <-- Сделка PTEQ по цене на 6.6% выше основного режима
2020-11-27 18:32:21.739391,3386942491,TCSG,B,2293.0, 35, 80255,TQBR
2020-11-27 18:32:30.668838,3386943118,TCSG,S,2292.2, 50, 114610,TQBR
2020-11-27 18:32:30.808663,3386943122,TCSG,S,2292.2, 13, 29798,TQBR
Поток statistics (MSS):
2020-11-27 17:55:33.034276,1,9,,TCSG,2288.0,TQBR
2020-11-27 17:55:33.034276,1,9,,TCSG,2288.0,PTEQ
2020-11-27 17:55:33.034276,1,9,,TCSG,2288.0,PSEQ
2020-11-27 18:32:21.038690,1,9,,TCSG,2305.6,TQBR <-- Сделка PTEQ 3386942407 привела к скачку waprice для TQBR, PTEQ, PSEQ
2020-11-27 18:32:21.038690,1,9,,TCSG,2305.6,PTEQ
2020-11-27 18:32:21.038690,1,9,,TCSG,2305.6,PSEQ
Как в данном, так и в подавляющем большинстве аналогичных случаев отсутствует влияние сделок PTEQ на цену последующих сделок в основном режиме.
Влияние сделок РПС
По окончании основной сессии отклонения waprice
от фактического значения средневзвешенной цены valtoday/voltoday
могут быть весьма существенными.
Таблица: Отклонение ожидаемых и полученных значений waprice во время дневной сессии 10.02.2021
| symbol | voltoday | valtoday | waprice | vwap_calc |
|--------|---------:|------------:|--------:|----------:|
| SBER | 56936860 | 15280486924 | 268.38 | 268.38 |
| GAZP | 37058810 | 8338934566 | 225.03 | 225.02 | <-
| GMKN | 286914 | 7269180456 | 25336 | 25336 |
| YNDX | 1279740 | 6690337926 | 5228.4 | 5227.8 | <-
| LKOH | 1190434 | 6686005626 | 5616.5 | 5616.5 |
| TCSG | 1640935 | 5876321268 | 3583 | 3581 | <---
| ROSN | 5169140 | 2551369039 | 493.75 | 493.6 | <--
| MGNT | 488429 | 2536223638 | 5194.5 | 5192.5 | <--
| AFKS | 67672500 | 2403561087 | 35.518 | 35.518 |
| OZON | 483270 | 2338023976 | 4838 | 4838 |
Посмотреть SQL запрос
SELECT symbol, voltoday, valtoday, waprice,
-- округление до шага цены согласно методологии биржи
ROUND(valtoday/voltoday/entity.tags."step", 0)*entity.tags."step" AS vwap_calc
FROM atsd_session_summary
WHERE class = 'TQBR' AND type = 'Day' AND stage = 'N'
AND datetime BETWEEN '2021-02-10' AND '2021-02-11'
ORDER BY valtoday DESC
Возможны случаи, когда waprice
будет находиться за пределами минимальной и максимальной цены основной сессии.
Таблица: Выход waprice
за пределы диапазона low
/ high
с 01.01.2021 по 13.02.2021
| dt | symbol | low | high | last | waprice | vwap_calc |
|------------|--------|------:|-------:|------:|--------:|----------:|
| 2021-01-06 | GLTR | 460 | 466.05 | 463.3 | 459 | 462.1 | <-- 459 < 460 (low)
| 2021-01-18 | ARSA | 3.79 | 3.84 | 3.84 | 3.78 | 3.81 |
| 2021-01-27 | RTSB | 0.535 | 0.55 | 0.535 | 0.525 | 0.54 |
| 2021-02-02 | VRSBP | 44.5 | 44.5 | 44.5 | 44 | 44.5 |
| 2021-02-05 | KCHEP | 0.358 | 0.358 | 0.358 | 0.355 | 0.358 |
| 2021-02-05 | KCHEP | 0.358 | 0.358 | 0.358 | 0.355 | 0.358 |
| 2021-01-12 | KTSBP | 0.282 | 0.282 | 0.282 | 0.2815 | 0.282 |
Посмотреть SQL запрос
SELECT date_format(time, 'yyyy-MM-dd') AS dt, symbol, low, high, last, waprice,
ROUND(valtoday/voltoday/entity.tags."step",0)*entity.tags."step" AS vwap_calc
FROM atsd_session_summary
WHERE class = 'TQBR'
AND datetime BETWEEN '2021-01-01' AND '2021-02-13'
AND type = 'Day'
AND (waprice > high OR waprice < low)
ORDER BY valtoday DESC
Для анализа отклонений цены торгов в основном режиме достаточно построить аналитическое скользящее окно и сравнить цены сделок непосредственно до и после сделки в дополнительном режиме. Например, сделке с CHMF в режиме PTEQ в 2021-02-04 18:15:28.269289 по цене 1310.6 предшествовала сделка в TQBR по 1291.6 и последовала сделка в TQBR по 1292 рубля.
| symbol | p_class | p_dt | p_price | p_qty | class | dt | price | qty | amount | a_class | a_dt | a_price | a_qty | price_to_pre | after_to_pre |
|--------|---------|----------------------------|--------:|------:|-------|----------------------------|-------:|------:|---------:|---------|----------------------------|--------:|------:|-------------:|-------------:|
| CHMF | TQBR | 2021-02-04 18:15:20.288538 | 1291.6 | 102 | PTEQ | 2021-02-04 18:15:25.757491 | 1310.6 | 20000 | 26212000 | TQBR | 2021-02-04 18:15:28.269289 | 1292 | 3 | 1.471 | 0.031 |
| CHMF | PTEQ | 2021-02-04 18:15:25.757491 | 1310.6 | 20000 | TQBR | 2021-02-04 18:15:28.269289 | 1292 | 3 | 3876 | TQBR | 2021-02-04 18:15:30.970797 | 1292 | 1 | -1.419 | -1.419 |
| CHMF | TQBR | 2021-02-04 18:15:28.269289 | 1292 | 3 | TQBR | 2021-02-04 18:15:30.970797 | 1292 | 1 | 1292 | TQBR | 2021-02-04 18:15:34.572359 | 1291.6 | 1 | 0.000 | -0.031 |
Отфильтровав избыточные строки в запросе ниже получаем список сделок, для каждой их которых приводится:
p_price
- Цена предшествующей сделки в основном режимеprice
- Цена сделки в дополнительном режимеa_price
- Цена последующей сделки в основном режимеprice_to_pre
- Отклонение цены сделки в дополнительном режиме от цены сделки в основном режиме в процентом отношении (price/p_price
)after_to_pre
- Изменение цены соседних сделок в основном режиме в процентом отношении (a_price/p_price
)
| symbol | p_dt | p_price | p_qty | dt | price | qty | amount | a_dt | a_price | a_qty | price_to_pre | after_to_pre |
|--------|----------|--------:|------:|----------|-------:|--------:|----------:|----------|--------:|------:|-------------:|-------------:|
| LKOH | 17:35:05 | 5718.5 | 52 | 17:35:10 | 5963.5 | 9000 | 53671500 | 17:35:10 | 5717 | 10 | 4.284 | -0.026 |
| SMLT | 17:59:52 | 975.2 | 1 | 17:59:53 | 950 | 130000 | 123500000 | 17:59:56 | 976.6 | 3 | -2.584 | 0.144 |
| CHMF | 18:15:20 | 1291.6 | 102 | 18:15:25 | 1310.6 | 20000 | 26212000 | 18:15:28 | 1292 | 3 | 1.471 | 0.031 |
| TCSG | 14:53:04 | 3179 | 1 | 14:53:18 | 3223.2 | 8568 | 27616378 | 14:53:28 | 3180.2 | 1 | 1.390 | 0.038 |
| CHMF | 18:16:54 | 1291.2 | 1 | 18:16:55 | 1307.2 | 150000 | 196080000 | 18:17:09 | 1291.4 | 38 | 1.239 | 0.015 |
| POLY | 14:51:38 | 1666.4 | 2 | 14:51:40 | 1683.5 | 28122 | 47343387 | 14:51:42 | 1666.7 | 10 | 1.026 | 0.018 |
| SBER | 11:41:08 | 266.7 | 1 | 11:41:08 | 264.02 | 1000000 | 264020000 | 11:41:09 | 266.75 | 82 | -1.005 | 0.019 |
| ALRS | 14:52:11 | 102.68 | 60 | 14:52:12 | 103.63 | 333950 | 34607239 | 14:52:16 | 102.65 | 1 | 0.925 | -0.029 |
| ROSN | 14:10:21 | 490.85 | 1 | 14:10:24 | 495.35 | 171490 | 84947572 | 14:10:25 | 490.85 | 2 | 0.917 | 0.000 |
| MAGN | 14:48:28 | 53.14 | 102 | 14:48:30 | 53.575 | 309470 | 16579855 | 14:48:30 | 53.145 | 1 | 0.819 | 0.009 |
Рассчитав средневзвешенное отклонение price_to_pre
по объему сделки получаем 0.59%
по модулю. При этом средневзвешенное значение after_to_pre
составляет 0.07%
, что демонстрирует отсутствие существенного влияния на сделки в основном режиме.
Посмотреть SQL запрос
SELECT symbol, pre_class_2 AS p_class, pre_dt_2 AS p_dt, pre_price_2 AS p_price, pre_qty_2 AS p_qty,
pre_class AS class, pre_dt AS dt, pre_price AS price, pre_qty AS qty, ROUND(pre_amount,0) AS amount,
class AS a_class, datetime AS a_dt, price AS a_price, quantity AS a_qty,
ROUND(100*(pre_price/pre_price_2-1), 3) AS price_to_pre, ROUND(100*(price/pre_price_2-1), 3) AS after_to_pre
--,trade_num, pre_tn, pre_tn_2 AS tn_tqbr,
FROM (
SELECT datetime, trade_num, class, symbol, price, quantity, price*quantity*entity.tags.lot AS amount,
LAG(class) AS pre_class, LAG(class, 2) AS pre_class_2,
LAG(price) AS pre_price, LAG(price, 2) AS pre_price_2,
LAG(datetime) AS pre_dt, LAG(datetime, 2) AS pre_dt_2,
LAG(trade_num) AS pre_tn, LAG(trade_num, 2) AS pre_tn_2,
LAG(quantity) AS pre_qty, LAG(quantity, 2) AS pre_qty_2,
LAG(amount) AS pre_amount, LAG(amount, 2) AS pre_amount_2
FROM atsd_trade
WHERE symbol LIKE '%'
AND class IN ('TQBR', 'PTEQ', 'PSEQ')
AND datetime BETWEEN '2021-02-04 10:00:00' AND '2021-02-04 18:40:00'
WITH TIMEZONE = 'Europe/Moscow', ROW_NUMBER(symbol ORDER BY datetime, trade_num) BETWEEN 2 PRECEDING AND CURRENT ROW
) WHERE (pre_class != 'TQBR' AND class = 'TQBR')
ORDER BY ABS(price_to_pre) DESC
Дополнительные режимы
В данном вопросе нас интересует более подробная информация о дополнительных режимах, которые оказывают влияние на waprice
.
Наибольший объем сделок приходится на режимы PTEQ и PSEQ, то есть Режимы Переговорных Сделок. Наиболее крупные сделки совершаются в режиме PTEQ - РПС с ЦК.
Таблица: Ежедневный объем торгов в рублях (valtoday
) и количество сделок (numtrades
) в дополнительных режимах с 01.01.2021 по 13.02.2021
| class | avg_valtoday | med_valtoday | max_valtoday | max_valtoday_date | avg_numtrades | avg_trade_val |
|-------|-------------:|-------------:|-------------:|-------------------|--------------:|--------------:|
| PTEQ | 1718003912 | 1478109138 | 3961032642 | 2021-02-04 | 441 | 10025247 |
| PSEQ | 119923205 | 56622278 | 684805157 | 2021-01-15 | 21 | 7847410 |
| FSEQ | 6386290 | 6386290 | 6386290 | 2021-01-19 | 6 | 1064382 |
| FTEQ | 2471000 | 2471000 | 2471000 | 2021-01-25 | 1 | 2471000 |
| SMAL | 190533 | 171341 | 556615 | 2021-01-04 | 667 | 278 |
Посмотреть SQL запрос с использованием таблицы atsd_session_summary
SELECT class,
avg(svaltoday) AS avg_valtoday, median(svaltoday) med_valtoday, max(svaltoday) max_valtoday, avg(snumtrades) AS avg_numtrades,
avg(svaltoday/snumtrades) AS avg_trade_val
FROM (
SELECT date_format(datetime, 'yyyy-MM-dd') AS dt, class, SUM(valtoday) AS svaltoday, SUM(numtrades) AS snumtrades
FROM atsd_session_summary
WHERE class IN ('SMAL','PSEQ','PTEQ','FTEQ','FSEQ')
AND datetime BETWEEN '2021-01-01' AND '2021-02-13' EXCL
AND stage = 'N' AND type = 'Day'
GROUP BY class, date_format(datetime, 'yyyy-MM-dd')
) GROUP BY class
WITH TIMEZONE = 'Europe/Moscow', WORKDAY_CALENDAR = 'moex'
ORDER BY avg(svaltoday) DESC
Посмотреть SQL запрос с использованием таблицы atsd_trade
SELECT class,
avg(svaltoday) AS avg_valtoday, median(svaltoday) med_valtoday, max(svaltoday) max_valtoday,
date_format(MAX_VALUE_TIME(svaltoday), 'yyyy-MM-dd') AS max_valtoday_date,
avg(snumtrades) AS avg_numtrades, avg(svaltoday/snumtrades) AS avg_trade_val
FROM (
SELECT datetime, class, round(SUM(price*quantity*entity.tags.lot), 0) AS svaltoday, count(*) AS snumtrades
FROM atsd_trade
WHERE class IN ('SMAL','PSEQ','PTEQ','FTEQ','FSEQ')
AND datetime BETWEEN '2021-01-01' AND '2021-02-13' EXCL
--AND IN_SESSION(Day)
AND DATE_FORMAT(time, 'HH:mm') BETWEEN '09:00' AND '19:00' EXCL
GROUP BY class, PERIOD(1 DAY)
) GROUP BY class
WITH TIMEZONE = 'Europe/Moscow', WORKDAY_CALENDAR = 'moex'
ORDER BY avg(svaltoday) DESC
Таблица: 10 наиболее крупных сделок в режиме PTEQ с 01.01.2021 по 13.02.2021
| datetime | trade_num | symbol | price | trade_val |
|---------------------|-----------:|--------|-------:|----------:|
| 2021-01-11 18:02:59 | 3468531711 | LKOH | 5578.5 | 557850000 |
| 2021-02-02 16:15:32 | 3555295198 | PHOR | 3621 | 467109000 |
| 2021-01-14 17:38:24 | 3486130375 | SBER | 283.76 | 425640000 |
| 2021-01-12 18:03:41 | 3474100969 | MAGN | 58 | 406000000 |
| 2021-01-27 18:44:20 | 3531897054 | SBER | 270.15 | 405225000 |
| 2021-01-28 12:27:15 | 3536708360 | GMKN | 24864 | 372960000 |
| 2021-02-04 13:05:17 | 3566682227 | LKOH | 5635.5 | 351091650 |
| 2021-02-04 14:11:00 | 3566886940 | GAZP | 220.76 | 351030476 |
| 2021-01-20 12:30:23 | 3504878193 | POLY | 1680.6 | 336120000 |
| 2021-01-18 12:18:22 | 3496965665 | LKOH | 5820 | 325227420 |
Посмотреть SQL запрос
SELECT datetime, trade_num, symbol, price, round(price*quantity*entity.tags.lot, 0) AS trade_val
FROM atsd_trade
WHERE class = 'PTEQ'
AND datetime BETWEEN '2021-01-01' AND '2021-02-13' EXCL
WITH TIMEZONE = 'Europe/Moscow', WORKDAY_CALENDAR = 'moex'
ORDER BY trade_val DESC
LIMIT 10
Таблица: Объем сделок в режиме PTEQ с 01.01.2021 по 13.02.2021 по часам торговой сессии. 60% всех следок заключается в интервале с 17:00 до 19:00.
| hour_of_day | svaltoday | snumtrades |
|------------:|------------:|-----------:|
| 18 | 23763429832 | 5998 |
| 17 | 6626671062 | 2166 |
| 14 | 3781800136 | 220 |
| 12 | 3708166551 | 137 |
| 16 | 3648353094 | 2348 |
| 13 | 3389163440 | 569 |
| 15 | 2417499182 | 759 |
| 11 | 1872371630 | 222 |
| 10 | 614658518 | 363 |
Посмотреть SQL запрос
SELECT DATE_FORMAT(time, 'HH') AS hour_of_day, round(SUM(price*quantity*entity.tags.lot), 0) AS svaltoday, count(*) AS snumtrades
FROM atsd_trade
WHERE class = 'PTEQ'
AND datetime BETWEEN '2021-01-01' AND '2021-02-13' EXCL
AND IN_SESSION(Day)
GROUP BY class, DATE_FORMAT(time, 'HH')
WITH TIMEZONE = 'Europe/Moscow', WORKDAY_CALENDAR = 'moex'
ORDER BY svaltoday DESC
Таблица: Top 10 акций по объему сделок в режиме PTEQ с 01.01.2021 по 13.02.2021.
| symbol | amount() | med_trade_val | avg_trade_val | numtrades |
|--------|-----------:|--------------:|--------------:|----------:|
| LKOH | 5363502025 | 329260 | 8636879 | 621 |
| GAZP | 4436987473 | 198484 | 4185837 | 1060 |
| SBER | 4381315690 | 168634 | 4554382 | 962 |
| ROSN | 3559351014 | 472209 | 12849643 | 277 |
| TATN | 3404447068 | 274641 | 3445797 | 988 |
| GMKN | 2777211978 | 207744 | 4501154 | 617 |
| POLY | 2645920086 | 128888 | 8732410 | 303 |
| CHMF | 2043205306 | 213444 | 3668232 | 557 |
| TCSG | 1988237848 | 32260800 | 73638439 | 27 |
| MAGN | 1833622282 | 101221 | 3852148 | 476 |
Посмотреть SQL запрос
SELECT symbol, amount(), median(price*quantity)*entity.tags.lot AS med_trade_val, avg(price*quantity)*entity.tags.lot AS avg_trade_val, count(*) AS numtrades
FROM atsd_trade
WHERE class = 'PTEQ'
AND datetime BETWEEN '2021-01-01' AND '2021-02-13' EXCL
GROUP BY exchange, class, symbol
WITH TIMEZONE = 'Europe/Moscow', WORKDAY_CALENDAR = 'moex'
ORDER BY amount() DESC
LIMIT 10
Примеры расчета средневзвешенной цены
Средневзвешенная цена может рассчитываться в следующих вариантах:
- Средневзвешенная цена за торговый день
- Средневзвешенная цена за торговую сессию
- Средневзвешенная цена с момента начала торгов по текущий момент
- Средневзвешенная цена последних сделок
- Средневзвешенная цена сделок за интервал
- Средневзвешенная цена сделок за скользящий интервал
- Средневзвешенная цена сделок за календарный период
- Средневзвешенная цена по методологии биржи (для нескольких режимов) за основную сессию:
| symbol | waprice |
|--------|--------:|
| GAZP | 224.96 |
Посмотреть SQL запрос
SELECT symbol,
ROUND((SUM(price*quantity*entity.tags.lot)/SUM(quantity*entity.tags.lot))/entity_tag(CONCAT(symbol, '_[tqbr]'), 'step'))*entity_tag(CONCAT(symbol, '_[tqbr]'), 'step') AS waprice
FROM atsd_trade
WHERE symbol = 'GAZP'
AND (
SEC_DEF.marketcode = 'FOND' AND class NOT IN('AUCT','AUBB','EQDP')
OR SEC_DEF.marketcode = 'FNDT' AND class NOT IN('TQDB')
OR SEC_DEF.marketcode = 'RPS' AND class IN('PSDB','PSDE','PSEO','PSEQ','PSEU','PSGO','PSIF','PSOB','PSQI','PSSD','PSTC','PSTD','PSTF','PSYO','IRK2')
OR SEC_DEF.marketcode = 'RPST' AND class NOT IN('SPEQ')
)
AND datetime BETWEEN '2021-02-10' AND '2021-02-11' EXCL
AND IN_SESSION(Day)
-- AND datetime BETWEEN '2021-02-10 09:00:00' AND '2021-02-10 19:00:00' EXCL
GROUP BY symbol
WITH TIMEZONE = 'Europe/Moscow', WORKDAY_CALENDAR = 'moex'
- Средневзвешенная цена отдельно по режимам используя итоги, за основную сессию:
| class | symbol | voltoday | valtoday | waprice | vwap |
|-------|--------|---------:|------------:|--------:|----------:|
| PSEQ | GAZP | 3030 | 680084 | 224.96 | 224.45 |
| PTEQ | GAZP | 349089 | 78898443 | 224.96 | 226.01 |
| SMAL | GAZP | 63 | 14127 | 224.96 | 224.24 |
| TQBR | GAZP | 38340730 | 8624636076 | 224.96 | 224.95 |
Посмотреть SQL запрос
SELECT class, symbol, voltoday, valtoday, waprice,
ROUND(valtoday/voltoday/entity.tags."step", 0)*entity.tags."step" AS vwap
FROM atsd_session_summary
WHERE symbol = 'GAZP'
AND (
SEC_DEF.marketcode = 'FOND' AND class NOT IN('AUCT','AUBB','EQDP')
OR SEC_DEF.marketcode = 'FNDT' AND class NOT IN('TQDB')
OR SEC_DEF.marketcode = 'RPS' AND class IN('PSDB','PSDE','PSEO','PSEQ','PSEU','PSGO','PSIF','PSOB','PSQI','PSSD','PSTC','PSTD','PSTF','PSYO','IRK2')
OR SEC_DEF.marketcode = 'RPST' AND class NOT IN('SPEQ')
)
AND type = 'Day'
AND datetime BETWEEN '2021-02-10' AND '2021-02-11' EXCL
WITH ROW_NUMBER(class, symbol ORDER BY datetime DESC) <= 1
ORDER BY valtoday DESC
- Средневзвешенная цена отдельно по режимам используя таблицу сделок, за основную сессию:
| class | symbol | voltoday | valtoday | vwap |
|-------|--------|---------:|------------:|---------:|
| PSEQ | GAZP | 3030 | 680084 | 224.45 |
| PTEQ | GAZP | 349089 | 78898443 | 226.01 |
| SMAL | GAZP | 63 | 14127 | 224.24 |
| TQBR | GAZP | 38340730 | 8624636076 | 224.95 |
Посмотреть SQL запрос
SELECT class, symbol, volume() AS voltoday, round(amount(),0) AS valtoday,
ROUND(vwap()/entity.tags."step")*entity.tags."step" AS vwap
FROM atsd_trade
WHERE symbol = 'GAZP' AND class IN ('SMAL','PSEQ','PTEQ','TQBR')
AND datetime BETWEEN '2021-02-10' AND '2021-02-11' EXCL
AND IN_SESSION(Day)
-- AND session IN ('O', 'N', 'L', 'E')
-- AND datetime BETWEEN '2021-02-10 09:00:00' AND '2021-02-10 19:00:00' EXCL
GROUP BY exchange, class, symbol
WITH TIMEZONE = 'Europe/Moscow', WORKDAY_CALENDAR = 'moex'
ORDER BY class
- Средневзвешенная цена с момента начала торгов по текущий момент. Данный расчет производит значения в моменты времени эквивалентно
waprice
в потоке MSS в FAST.
| datetime | class | trade_num | quantity | price | trade_value | waprice |
|-------------------------|-------|-----------:|---------:|-------:|------------:|--------:|
| 2021-02-10T09:59:40.000 | TQBR | 3590016595 | 3 | 227.98 | 6839 | 227.98 |
| 2021-02-10T10:00:02.030 | TQBR | 3590018668 | 197 | 228.00 | 449160 | 227.99 |
| 2021-02-10T10:00:02.503 | TQBR | 3590018816 | 25 | 228.22 | 57055 | 228.00 |
| 2021-02-10T10:00:03.944 | TQBR | 3590019324 | 50 | 228.22 | 114110 | 228.01 |
| 2021-02-10T10:00:04.169 | TQBR | 3590019403 | 318 | 228.23 | 725771 | 228.02 |
| ... | | | | | | |
| 2021-02-10T14:55:33.701 | TQBR | 3591155788 | 110 | 224.80 | 247280 | 225.73 |
| 2021-02-10T14:59:01.649 | TQBR | 3591163199 | 210 | 224.66 | 471786 | 225.72 |
| 2021-02-10T15:02:11.850 | PTEQ | 3591169831 | 820 | 227.65 | 186673 | 225.73 |
| 2021-02-10T15:03:47.779 | TQBR | 3591174026 | 74 | 224.72 | 166293 | 225.72 |
| 2021-02-10T15:06:20.916 | TQBR | 3591180971 | 144 | 224.75 | 323640 | 225.71 |
Посмотреть SQL запрос
SELECT datetime, class, trade_num, quantity, price, trade_value, waprice FROM (
SELECT datetime, class, trade_num, quantity, price,
ROUND((SUM(price*quantity*entity.tags.lot)/SUM(quantity*entity.tags.lot))/entity.tags."step")*entity.tags."step" AS waprice,
LAG(waprice) AS waprice_lag, ROUND(price*quantity*entity.tags.lot,0) AS trade_value
FROM atsd_trade
WHERE symbol = 'GAZP'
AND (
SEC_DEF.marketcode = 'FOND' AND class NOT IN('AUCT','AUBB','EQDP')
OR SEC_DEF.marketcode = 'FNDT' AND class NOT IN('TQDB')
OR SEC_DEF.marketcode = 'RPS' AND class IN('PSDB','PSDE','PSEO','PSEQ','PSEU','PSGO','PSIF','PSOB','PSQI','PSSD','PSTC','PSTD','PSTF','PSYO','IRK2')
OR SEC_DEF.marketcode = 'RPST' AND class NOT IN('SPEQ')
)
AND datetime BETWEEN '2021-02-10' AND '2021-02-11' EXCL
WITH ROW_NUMBER(symbol ORDER BY datetime, trade_num) >= 0
) WHERE (waprice != waprice_lag OR waprice_lag IS NULL)
WITH TIMEZONE = 'Europe/Moscow'
- Средневзвешенная цена последних N сделок
| datetime | trade_num | price | quantity | vwap |
|-------------------------|-----------:|-------:|---------:|-------:|
| 2021-02-10 09:59:40.000 | 3590016595 | 227.98 | 3 | 227.98 |
| 2021-02-10 10:00:02.030 | 3590018668 | 228.00 | 197 | 227.99 |
| 2021-02-10 10:00:02.503 | 3590018816 | 228.22 | 25 | 228 |
| 2021-02-10 10:00:02.953 | 3590018972 | 228.21 | 100 | 228.01 |
| 2021-02-10 10:00:04.169 | 3590019403 | 228.23 | 318 | 228.03 |
| 2021-02-10 10:00:05.023 | 3590019596 | 228.27 | 17 | 228.04 |
| 2021-02-10 10:00:05.052 | 3590019609 | 228.12 | 16 | 228.05 |
| 2021-02-10 10:00:07.317 | 3590020095 | 228.23 | 64 | 228.06 |
| 2021-02-10 10:00:08.241 | 3590020187 | 228.11 | 300 | 228.07 |
| 2021-02-10 10:00:11.276 | 3590020671 | 228.05 | 1 | 228.08 |
Посмотреть SQL запрос
SELECT datetime, trade_num, price, quantity, vwap
FROM (
SELECT datetime, class, symbol, trade_num, price, quantity,
ROUND(ROUND(SUM(price*quantity)/SUM(quantity)/entity.tags."step", 0)*entity.tags."step", entity.tags.scale) AS vwap,
LAG(vwap) AS vwap_lag
FROM atsd_trade
WHERE symbol = 'GAZP' AND class = 'TQBR'
AND datetime BETWEEN '2021-02-10' AND '2021-02-11' EXCL
WITH ROW_NUMBER(symbol ORDER BY datetime, trade_num) BETWEEN 100 PRECEDING AND CURRENT ROW
) WHERE (vwap != vwap_lag OR vwap_lag IS NULL)
WITH TIMEZONE = 'Europe/Moscow'
- Средневзвешенная цена сделок за последний интервал
| last_trade_dt | vwap |
|----------------------------|-------:|
| 2021-02-10T10:00:14.537144 | 228.07 |
Посмотреть SQL запрос
SELECT max(datetime) AS last_trade_dt, ROUND(vwap(), entity.tags.scale) AS vwap
FROM atsd_trade
WHERE symbol = 'GAZP' AND class = 'TQBR'
AND datetime BETWEEN '2021-02-10 10:00:00' AND '2021-02-10 10:00:15' EXCL
WITH TIMEZONE = 'Europe/Moscow'
GROUP BY exchange, class, symbol
- Средневзвешенная цена сделок за скользящий интервал
| datetime | trade_num | price | quantity | vwap |
|-------------------------|-----------:|-------:|---------:|-------:|
| 2021-02-10 09:59:40.000 | 3590016595 | 227.98 | 3 | 227.98 |
| 2021-02-10 10:00:02.030 | 3590018668 | 228.00 | 197 | 227.99 |
| 2021-02-10 10:00:02.503 | 3590018816 | 228.22 | 25 | 228 |
| 2021-02-10 10:00:03.944 | 3590019324 | 228.22 | 50 | 228.01 |
| 2021-02-10 10:00:04.169 | 3590019403 | 228.23 | 318 | 228.02 |
| 2021-02-10 10:00:05.028 | 3590019598 | 228.28 | 50 | 228.03 |
| 2021-02-10 10:00:07.317 | 3590020095 | 228.23 | 64 | 228.04 |
| 2021-02-10 10:00:11.413 | 3590020681 | 228.21 | 20 | 228.05 |
| 2021-02-10 10:00:17.660 | 3590021549 | 228.17 | 47 | 228.06 |
| 2021-02-10 10:00:19.556 | 3590021980 | 228.01 | 337 | 228.05 |
Посмотреть SQL запрос
SELECT datetime, trade_num, price, quantity, vwap
FROM (
SELECT datetime, class, symbol, trade_num, price, quantity,
ROUND(ROUND(SUM(price*quantity)/SUM(quantity)/entity.tags."step", 0)*entity.tags."step", entity.tags.scale) AS vwap,
LAG(vwap) AS vwap_lag
FROM atsd_trade
WHERE symbol = 'GAZP' AND class = 'TQBR'
AND datetime BETWEEN '2021-02-10' AND '2021-02-11' EXCL
WITH ROW_NUMBER(symbol ORDER BY datetime, trade_num) BETWEEN 10 MINUTE PRECEDING AND CURRENT ROW
) WHERE (vwap != vwap_lag OR vwap_lag IS NULL)
WITH TIMEZONE = 'Europe/Moscow'
- Средневзвешенная цена сделок за календарные периоды
| datetime | vwap |
|---------------------|-------:|
| 2021-02-10T10:00:00 | 227.85 |
| 2021-02-10T10:01:00 | 227.80 |
| 2021-02-10T10:02:00 | 227.92 |
| 2021-02-10T10:03:00 | 227.58 |
| 2021-02-10T10:04:00 | 227.60 |
Посмотреть SQL запрос
SELECT datetime, ROUND(vwap(), entity.tags.scale) AS vwap
FROM atsd_trade
WHERE symbol = 'GAZP' AND class = 'TQBR'
AND datetime BETWEEN '2021-02-10 10:00:00' AND '2021-02-10 10:05:00' EXCL
WITH TIMEZONE = 'Europe/Moscow'
GROUP BY exchange, class, symbol, PERIOD(1 MINUTE)