Коди умов угод: як читати біржові дані
Коди умов угод пояснюють, чому три платформи показують різні денні максимуми однієї акції та як print впливає на максимум, мінімум, закриття й обсяг.
Коди умов угод пояснюють, чому три платформи можуть показувати три різні денні максимуми для однієї акції, і жодна з них не помиляється. Кожен print у консолідованій стрічці має такі позначки. Вони визначають, чи може print оновити останню ціну, денний максимум і мінімум, офіційне відкриття, офіційне закриття та загальний консолідований обсяг. Угода може бути реально виконаною за реальною ціною, але водночас не враховуватися майже в жодному з цих показників.
Що таке коди умов угод?
Код умови угоди, який також називають умовою продажу, — це позначка, яку майданчик, що звітує, додає до звіту про угоду перед його передачею у стрічку. Ціна й обсяг показують, що саме торгувалося. Умова визначає тип звіту: чи надійшов він вчасно, чи була його ціна розрахована на основі інших виконаних угод, а не узгоджена в цей момент, чи відбулася угода поза звичайними торговими годинами, чи охоплювала вона менше ніж 100 акцій стандартного лота.
З кожним кодом пов’язаний набір прапорців допуску. Саме цю частину майже ніхто не бачить. Для кожного коду визначено, чи має він право впливати на останню ціну, максимум і мінімум, відкриття, закриття та консолідований обсяг. Ці прапорці діють незалежно один від одного. Чимало print, які не можуть змінити максимум або мінімум, все одно враховуються в обсязі. Тому заявлена кількість торгованих акцій і заявлені цінові екстремуми формуються з частково спільних, але різних наборів угод. Поруч із першим набором діє другий: один набір правил стосується консолідованої стрічки, а інший — окремого торгового центру, оскільки офіційне закриття біржі розраховується лише за її власними print.
Коди умов поділяються на сімейства, але лише одне з них визначає, які показники може оновлювати угода.
Точний SQL-код для кожного числа
SELECT
replaceAll(type, '_', ' ') AS condition_family,
countDistinct(id) AS codes
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
GROUP BY condition_family
ORDER BY codes DESCСловник акцій містить 8 сімейств. Найбільше — сімейство sale condition, до якого входить 40 окремих кодів. Quote conditions описують bid і offer, а не угоду. Сімейства індикаторів позначають такі стани, як дія обмеження на short sale. Саме сімейство sale condition містить прапорці допуску, і всі наведені нижче числа взято з нього.
Що саме потрапляє у стрічку
Наведена нижче панель охоплює одну зафіксовану сесію в червні 2026 року: кожен print AAPL від відкриття premarket о 4:00 до завершення post-market о 20:00, згрупований за умовою продажу, яку він мав. Часове вікно зафіксоване в SQL, тому ці показники описують лише цей день. Один print може мати кілька кодів, а багато print не мають жодного. Саме тому стовпці не дають у сумі 100%.
Точний SQL-код для кожного числа
WITH
(SELECT count()
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')) AS day_prints,
(SELECT sum(size)
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')) AS day_shares
SELECT
multiIf(t.code = -1, 'Regular way (no code)',
c.code_name = '', concat('Unmapped code ', toString(t.code)),
c.code_name) AS condition_name,
round(100 * count() / day_prints, 2) AS pct_of_prints,
round(100 * sum(t.size) / day_shares, 2) AS pct_of_shares
FROM
(
SELECT
size,
arrayJoin(if(empty(conditions),
[toInt32(-1)],
arrayMap(x -> toInt32(x), conditions))) AS code
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
) AS t
LEFT JOIN
(
SELECT toInt32(id) AS code_id, any(name) AS code_name
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
GROUP BY code_id
) AS c ON c.code_id = t.code
GROUP BY condition_name
ORDER BY pct_of_prints DESC
LIMIT 12Найпоширенішою позначкою цього дня була Odd Lot Trade: вона припадала на 65.83% print сесії та 6.37% її обсягу в акціях. Порівнюйте два стовпці в кожному рядку. Якщо частка print значно перевищує частку обсягу, код позначає невеликі виконання. Якщо співвідношення протилежне, код стосується невеликої кількості дуже великих угод. Підрахунок print і підрахунок акцій відповідають на різні запитання. Саме код умови показує цю різницю.
Чому дві платформи показують різні денні максимуми?
Чотири типи print виключаються з різних наборів показників.
- Звіт із запізненням і поза послідовністю. Угода, укладена о 10:14 і подана о 10:31, потрапляє у стрічку з позначкою out of sequence або з ціною, розрахованою від попереднього орієнтира. Вона враховується в обсязі. Вона не може встановити останню ціну й не може підняти денний максимум, навіть якщо її ціна вища за всі інші угоди сесії. Узгоджені блокові угоди та print, передані через trade reporting facility від майданчиків dark pool trading, часто належать до цієї категорії.
- Ціна, похідна від інших угод. Угода за середньою ціною або VWAP-виконання має ціну, розраховану за багатьма іншими виконаннями, а не узгоджену в цей момент. Така угода не враховується в останній ціні та цінових екстремумах, оскільки її ціна ніколи не існувала як поточна котирувальна ціна.
- Odd lot. Менше ніж 100 акцій. Odd lots не мають права впливати на останню ціну, максимум і мінімум, але повністю враховуються в консолідованому обсязі. До кінця 2013 року вони взагалі не передавалися в консолідовану стрічку. Тому будь-яке порівняння обсягів, що охоплює період до цієї межі, зіставляє два різні визначення цього показника. Докладніше це описано в нашому матеріалі про середній денний обсяг.
- Розширені торгові години та form T. Print у premarket і після закриття мають відповідні позначки й не враховуються у відкритті, максимумі, мінімумі та закритті звичайної сесії. Водночас вони входять до консолідованого обсягу. Платформа, яка показує такі print на графіку, відображатиме інший денний діапазон, ніж платформа без них. Саме тому торгівля після закриття та в premarket може бути на одному графіку й відсутня на іншому.
Нижче показано, яку частку сесії кожна категорія становить для п’яти відомих акцій за той самий зафіксований день.
Точний SQL-код для кожного числа
WITH
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND name ILIKE '%odd lot%') AS odd_lot_codes,
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['form t', 'extended trading hours'])) AS extended_codes,
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['out of sequence', 'prior reference', 'derivatively priced',
'average price', 'price variation', 'seller'])
AND NOT multiSearchAnyCaseInsensitive(name,
['form t', 'extended trading hours'])) AS late_or_derived_codes
SELECT
ticker,
round(100 * countIf(hasAny(conditions, odd_lot_codes)) / count(), 2) AS odd_lot_pct,
round(100 * countIf(hasAny(conditions, late_or_derived_codes)) / count(), 2) AS late_or_derived_pct,
round(100 * countIf(hasAny(conditions, extended_codes)) / count(), 2) AS extended_hours_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'KO', 'MSFT', 'NVDA', 'SPY')
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
GROUP BY ticker
ORDER BY odd_lot_pct DESCPrint odd lot становили від 46.8% до 85.14% усіх print для п’яти акцій. Цей стовпець тісно пов’язаний із ціною акції: за однакового обсягу в доларах дорожча акція купується меншою кількістю акцій. Найвищий показник мала NVDA: 2.4% її print були позначені як подані із запізненням або з похідною ціною, а 3.53% — як такі, що відбулися в розширені торгові години. Кожен print у всіх трьох категоріях є реальною угодою за реальною ціною. Але жоден із них не може встановити максимум або мінімум.
Print, який не підвищує максимум
Наступна панель охоплює ту саму зафіксовану сесію AAPL і ділить період звичайних торгів із 9:30 до 16:00 на п’ятнадцятихвилинні інтервали. Для кожного інтервалу вона показує два максимуми. Одна лінія відображає найвищу ціну будь-якого print. Інша — найвищу ціну серед print, умови яких дозволяють їм встановити максимум.
Точний SQL-код для кожного числа
WITH
(SELECT groupArray(toInt32(id))
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND multiSearchAnyCaseInsensitive(name,
['odd lot', 'form t', 'extended trading hours', 'out of sequence',
'prior reference', 'derivatively priced', 'average price',
'price variation', 'seller'])) AS not_high_low_codes
SELECT
formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(toFloat64(max(price)), 2) AS tape_high,
round(toFloat64(maxIf(price, NOT hasAny(conditions, not_high_low_codes))), 2) AS eligible_high
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-06-17 08:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-06-18 00:00:00', 'UTC')
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
+ toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 960
GROUP BY et_time
HAVING countIf(NOT hasAny(conditions, not_high_low_codes)) > 0
ORDER BY et_timeСесія відкривається на рівні 09:30. Максимум за всіма print становить $302.07, тоді як допустимий максимум — $302.07. До закриття проходить 26 інтервалів. Допустима лінія не може бути вищою за лінію всіх print, оскільки допустимі print є підмножиною всіх print. Якщо дві лінії збігаються, кожен print у цьому п’ятнадцятихвилинному інтервалі міг встановити максимум. Якщо верхня лінія віддаляється, щонайменше один print у цьому інтервалі торгувався вище за найвищу допустиму ціну. Жоден графік, побудований за правилами допуску, не покаже такий print як денний максимум.
Саме цей розрив пояснює розбіжність. Джерело, яке бере максимальну ціну кожного print, повідомляє один максимум. Джерело, яке застосовує прапорці допуску, повідомляє інший. Джерело, яке додатково вилучає premarket і торги після закриття, повідомляє третій. Усі три читають одну й ту саму стрічку.
Наскільки надійним є шар допуску?
Не дуже. Прапорці є довідковими даними, а довідкові дані виправляють. Один комерційний постачальник market data оновив власний словник умов і перекласифікував право одного sale condition встановлювати офіційне відкриття та офіційне закриття. Жодна угода не змінилася. Стрічка за всі відповідні дні до виправлення й після нього була однаковою. Змінився один прапорець у таблиці відповідностей. Разом із ним змінилися офіційні відкриття та закриття, які відображали всі графіки й backtest, що використовували цей словник.
Розглядайте OHLC окремого постачальника як один варіант прочитання стрічки, а не як безумовний факт. Якщо два джерела розходяться, з’ясуйте, які правила допуску застосував кожен із них. Відкладені та консолідовані потоки котирувань створюють додатковий рівень тієї самої проблеми, але вже у сфері часу, а не допуску.
Де міститься офіційний перелік кодів умов угод
Стрічки працюють у межах двох планів national market system: CTA Plan для цінних паперів, що котируються на NYSE, і UTP Plan для цінних паперів Nasdaq. Кожен план публікує специфікацію sale condition для стрічки, якою він адмініструє. Саме ці специфікації є джерелом повноважень. Усі похідні дані, зокрема ідентифікатори, використані на наведених вище панелях, є відображенням цих специфікацій у власній системі нумерації постачальника. Ідентифікатор коду одного постачальника не обов’язково означає те саме в іншого. Вивчайте категорії, а не номери. Категорії залишаються стабільними роками. Номери — це таблиця відповідностей, а такі таблиці редагують.
Примітки щодо даних
Категорії умов на наведених вище панелях побудовано безпосередньо зі словника, а не на основі жорстко заданих ідентифікаторів. Кожна категорія визначається збігом назви всередині сімейства sale condition: odd lot, form T і extended trading hours, out of sequence, prior reference price, derivatively priced, average price, price variation, seller. Відкрийте SQL під будь-якою панеллю, щоб переглянути точні шаблони. Коди не є взаємовиключними. Один print може мати кілька кодів, тому відсотки категорій перетинаються й не дають у сумі показник сесії. Обидві панелі AAPL і панель для п’яти акцій охоплюють одну зафіксовану сесію в червні 2026 року, визначену в SQL. Тому показники на цій сторінці не змінюються з появою нових сесій.
Часті запитання
Що таке код умови угоди?
Це позначка, прикріплена до звіту про угоду в консолідованій стрічці. Вона описує тип звіту, наприклад угоду, про яку повідомили із запізненням, угоду з похідною ціною, odd lot або угоду в розширені торгові години. Кожен код має прапорці, які визначають, чи може така угода оновити останню ціну, максимум і мінімум, відкриття, закриття та консолідований обсяг.
Чому два вебсайти показують різні денні максимуми для однієї акції?
Кожен застосовує до тих самих print власний набір правил допуску. Один може взяти найвищу ціну будь-якої повідомленої угоди, інший — виключити print, умови яких не дозволяють встановити максимум, а третій — додатково вилучити premarket і торги після закриття. Усі вони читають одну й ту саму стрічку.
Чи враховуються угоди odd lot в обсязі?
Так. Odd lot, тобто угода менш ніж на 100 акцій, враховується в консолідованому обсязі, але не може встановити останню ціну, денний максимум або мінімум. До кінця 2013 року odd lots взагалі не передавалися в консолідовану стрічку. Тому довгострокові порівняння обсягів перетинають межу зміни визначення цього показника.
Чи враховуються угоди after hours у денному максимумі та мінімумі?
Не в максимумі та мінімумі звичайної сесії. Print у premarket і після закриття мають умову extended hours або form T. Вона не дозволяє враховувати їх у відкритті, максимумі, мінімумі та закритті звичайної сесії. Водночас вони входять до денного консолідованого обсягу.
Де міститься офіційний перелік кодів умов продажу?
CTA Plan і UTP Plan публікують специфікації sale condition для стрічок, якими вони адмініструють. Ці документи є офіційним джерелом. Постачальники market data перенумеровують умови у власному просторі ідентифікаторів. Тому числовий код одного постачальника не обов’язково відповідає тому самому номеру в іншого.
Кожна панель на цій сторінці містить SQL, за допомогою якого її побудовано. Відкрийте панель, замініть ticker або дату й запустіть такий самий аналіз умов для будь-якої сесії в терміналі Strasmore.