Analiza mikrostruktury rynku 29 czerwca 2026
Szczegółowa analiza danych tape, korekta wolumenu oraz plik FINRA. Poznaj surowe dane z sesji, aby zrozumieć mechanizmy rynkowe i precyzyjną dynamikę handlu.
To techniczne uzupełnienie podsumowania rynku z 29 czerwca 2026: surowe dane zawarte w minutowych słupkach — 156.1 milionów pojedynczych transakcji oraz 505.38 milionów aktualizacji kwotowań NBBO w ciągu jednej zwykłej sesji poniedziałkowej. Każda liczba jest wynikiem zapytania SQL (można rozwinąć dowolny panel, aby zobaczyć dokładny kod), a dwa kluczowe ustalenia z tego dnia zostały szczegółowo opisane: korekta wolumenu wymagana przez słownik kodu rejestru oraz plik dostawcy, który kończy się na literze S.
Zapis transakcji, minuta po minucie
Weryfikacja sesji jest pierwszym krokiem: kalendarz świąt giełdowych zawiera 0 wierszy dla dnia 29 czerwca 2026 roku, a SPY odnotował dokładnie 390 minutowych słupków świec w ramach regularnych godzin handlu — pełna sesja od 9:30 do 16:00 czasu nowojorskiego. W całym dniu handlu skonsolidowany zapis odnotował 156.1 milion pojedynczych transakcji.
Dokładny kod SQL dla każdej liczby
WITH
(SELECT count() FROM global_markets.stocks_market_holidays WHERE date = '2026-06-29') AS holiday_rows,
(
SELECT countIf(window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2026-06-29 00:00:00' AND window_start < '2026-06-30 00:00:00'
) AS spy_bars
SELECT
holiday_rows AS holiday_rows_jun29,
spy_bars AS spy_regular_session_bars,
round(count() / 1e6, 1) AS trades_m,
round(100.0 * countIf(size < 100) / count(), 2) AS odd_lot_pct_of_trades,
round(100.0 * toFloat64(sumIf(size, size < 100)) / toFloat64(sum(size)), 2) AS odd_lot_pct_of_shares,
multiIf(
countIf(size <= 19) >= 0.5 * count(), 19,
countIf(size <= 20) >= 0.5 * count(), 20,
countIf(size <= 21) >= 0.5 * count(), 21,
countIf(size <= 22) >= 0.5 * count(), 22,
countIf(size <= 23) >= 0.5 * count(), 23,
0) AS median_print_shares,
round(countIf(size = 1) / 1e6, 1) AS one_share_trades_m,
round(100.0 * countIf(size != round(size)) / count(), 2) AS fractional_pct_of_trades
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'72.61% wszystkich transakcji stanowiły niepełne pakiety — czyli transakcje mniejsze niż 100 akcji — jednak objęły one jedynie 8.79% surowej liczby akcji — nieskorygowany całkowity wolumen, który zostaje usunięty w poniższej sekcji analizy wolumenu. Mediana transakcji wynosiła 21 akcji, zmierzona za pomocą sondy nawiasowej z autoweryfikacją — skumulowane liczniki w zakresie od 19 do 23 akcji — która zwraca 0 w przypadku braku dopasowania i posiada ograniczenie, aby błąd nie wpływał na wynik końcowy. 17.9 milion transakcji dotyczyło dokładnie jednej akcji, a 4.73% obejmowało ułamkowe wielkości — wzorzec ten jest zgodny z działaniem aplikacji detalicznych, które realizują zlecenia pojedynczymi fragmentami, podczas gdy market makerzy zajmują drugą stronę.
Analiza wolumenu: wyznaczanie „matched volume” na podstawie słownika
Suma pola wielkości (size) ze wszystkich transakcji wskazuje, że 29 czerwca obrócono 24.79 miliarda akcji. Wartość ta jest błędna, co potwierdzają dane z rejestru transakcji. Każda transakcja zawiera kody warunków, a SIP — Securities Information Processor, który konsoliduje dane ze wszystkich giełd w jeden strumień — publikuje słownik określający, czy dany kod aktualizuje wolumen skonsolidowany. Niektóre komunikaty to administracyjne retransmisje wolumenu, który został już raz policzony. Zamiast tworzyć sztywną listę „znanych” kodów, niniejszy artykuł wyznacza zbiór wykluczeń bezpośrednio ze słownika:
Dokładny kod SQL dla każdej liczby
SELECT
count() AS excluded_codes,
sum(id) AS excluded_id_checksum,
arrayStringConcat(arraySort(groupArray(concat(toString(id), ' ', name))), ' · ') AS codes
FROM global_markets.stocks_condition_codes
WHERE asset_class = 'stocks'
AND type = 'sale_condition'
AND JSONExtractBool(update_rules, 'consolidated', 'updates_volume') = 03 warunków sprzedaży na skonsolidowanym feedzie występuje z parametrem updates_volume = false: 15 Market Center Official Close · 16 Market Center Official Open · 38 Corrected Consolidated Close (per listing market). Oto wynik analizy: we wcześniejszej wersji podsumowania dziennego sztywno wpisano kody 15 i 16 — dwa oficjalne komunikaty otwarcia/zamknięcia, o których wspominają wszystkie przewodniki danych — całkowicie pomijając kod 38. To słownik, a nie zapamiętana lista kodów, stanowi jedyne źródło prawdy.
Zastosowano dwa bloki kodu: podzapytanie skalarne nad słownikiem wewnątrz skanowania 156.1 milionów wierszy przekracza nasz limit 30 sekund. Dlatego powyższy blok wyznacza zbiór jako jeden wiersz — z ograniczoną liczbą kodów i sumą kontrolną id (69) — a poniższy blok stosuje wyznaczone literały. Jeśli słownik ulegnie zmianie, suma kontrolna wymusi weryfikację artykułu; literały nie mogą stać się nieaktualne bez wiedzy użytkownika.
Dokładny kod SQL dla każdej liczby
SELECT
round(toFloat64(sum(size)) / 1e9, 2) AS raw_shares_bn,
round(toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]))) / 1e9, 2) AS matched_shares_bn,
round(toFloat64(sumIf(size, hasAny(conditions, [15, 16, 38]))) / 1e9, 2) AS excluded_shares_bn,
countIf(hasAny(conditions, [15, 16, 38])) AS excluded_prints
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'Poprawione rozliczenie: 24.79 miliarda akcji surowych, 20.66 miliarda liczonych przez SIP, 4.13 miliarda wykluczonych w ramach 91175 komunikatów administracyjnych. Jedna definicja, sformułowana precyzyjnie: „matched volume” oznacza wolumen, który według własnych reguł warunków SIP wchodzi w skład sumy skonsolidowanej — nic więcej. Nie oceniamy, które transakcje miały znaczenie ekonomiczne; stosujemy własną księgowość rejestru transakcji.
Analiza największych transakcji
Największe transakcje dnia stanowią kluczowe dane rynkowe:
Dokładny kod SQL dla każdej liczby
SELECT
ticker,
formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') AS et_time,
round(toFloat64(size) / 1e6, 2) AS shares_m,
toFloat64(price) AS price,
round(toFloat64(size) * toFloat64(price) / 1e6, 1) AS notional_usd_m,
round(100 * (toFloat64(size) * toFloat64(price)) / max(toFloat64(size) * toFloat64(price)) OVER (), 1) AS pct_of_biggest_dollar_print,
arrayStringConcat(arrayMap(c -> toString(c), conditions), ', ') AS condition_id
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
AND size >= 10000000
AND NOT hasAny(conditions, [15, 16, 38])
ORDER BY size DESC
LIMIT 10Powyższe wiersze stanowią przykład praktyczny. Największa transakcja dnia — 61.69 mln akcji CAG (Conagra) po cenie 13.98 USD, co daje około 862.5 mln USD, zarejestrowana 16:04:53 ET pod kodami 8, 41 (8 Closing Prints, 41 Trade Thru Exempt) — to wynik aukcji zamknięcia NYSE opublikowany po godzinie 4:00 pm. Liczy się ona do wolumenu tylko raz. Te same 61.69 mln akcji pojawiają się ponownie pod kodem 15 (Market Center Official Close); jest to ponowne raportowanie, które zgodnie ze słownikiem nie jest wliczane do kwoty 4.13 mld wyodrębnionej powyżej. Wiersz z kodem 15 jest celowo usuwany z powyższej tabeli, dlatego jego rejestracja otrzymuje własny, oddzielny panel:
Dokładny kod SQL dla każdej liczby
SELECT
round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS auction_print_shares_m,
round(toFloat64(maxIf(size, has(conditions, 15))) / 1e6, 2) AS official_close_reprint_shares_m,
round(toFloat64(maxIf(size, has(conditions, 8))) - toFloat64(maxIf(size, has(conditions, 15))), 2) AS share_difference,
formatDateTime(toTimeZone(argMaxIf(sip_timestamp, size, has(conditions, 15)), 'America/New_York'), '%H:%i:%S') AS reprint_et,
argMaxIf(exchange, size, has(conditions, 15)) AS reprint_exchange_id,
countIf(has(conditions, 15)) AS cag_code15_prints
FROM global_markets.stocks_trades
WHERE ticker = 'CAG'
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'Największa z 6 wiadomości dotyczących zamknięcia oficjalnego dla CAG obejmuje 61.69 mln akcji — czyli dokładnie 61.69 mln z aukcji (różnica: 0) — zarejestrowana 16:04:53 ET z identyfikatorem giełdy 10, czyli NYSE w katalogu akcji: jest to ponowne potwierdzenie aukcji przez rynek notowań.
Pozostałe CAG wiersze mają inny charakter — transakcja o wolumenie 15.17 mln akcji pod kodami 12, 2 (12 Form T / extended hours, 2 Average Price Trade) oraz dwie dodatkowe pod kodem 12 to transakcje poaukcyjne raportowane przez FINRA, których warunki zawierają parametr updates_volume = true. System SIP oraz nasze dopasowane dane zaliczają je do rzeczywistych transakcji.
W innych miejscach kod 9 oznacza aukcje zamknięcia Nasdaq — transakcja NVDA o wartości 3389.5 mln USD jest największą transakcją w tabeli pod względem wartości dolarowej — natomiast kody dla transakcji SNAP (53, 41) obejmują kod 53, czyli Qualified Contingent Trade.
The clock: ten minutes own the day
At minute resolution, the trade tape concentrates almost entirely at the edges of the session:
Dokładny kod SQL dla każdej liczby
SELECT
formatDateTime(toTimeZone(toStartOfMinute(sip_timestamp), 'America/New_York'), '%H:%i') AS et_minute,
round(count() / 1e6, 2) AS trades_m
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_minute
ORDER BY trades_m DESC
LIMIT 10The 15:59 ET minute printed 3.98 million trades — over sixty thousand a second. Whether the rest of the top ten hugs the open and the close is itself a one-row measurement:
Dokładny kod SQL dla każdej liczby
SELECT
countIf(NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS entries_outside_open_close,
countIf(et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00') AS entries_in_open_close,
maxIf(et_minute, NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS outside_entry_minute,
maxIf(trades_m, NOT (et_minute BETWEEN '09:30' AND '09:39' OR et_minute BETWEEN '15:50' AND '16:00')) AS outside_entry_trades_m
FROM (
SELECT
formatDateTime(toTimeZone(toStartOfMinute(sip_timestamp), 'America/New_York'), '%H:%i') AS et_minute,
round(count() / 1e6, 2) AS trades_m
FROM global_markets.stocks_trades
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_minute
ORDER BY trades_m DESC
LIMIT 10
)9 of the ten sit inside the opening ten minutes or the final ten before the close. The one exception — 10:15 ET, a burst of 0.88 million prints — is a genuine mid-morning anomaly; its cause is unknown from this data, and we won't invent one. The same clock time returns below.
Strumień kwotowań: pół miliarda aktualizacji
National Best Bid and Offer — najlepsza cena kupna i sprzedaży na wszystkich giełdach, publikowana ponownie przy każdej zmianie — odnotował 505.38 milion aktualizacji dnia 29 czerwca, przy 156.1 milionach transakcji.
Dokładny kod SQL dla każdej liczby
WITH
(
SELECT (round(countIf(ticker = 'QQQ') / 1e6, 2), round(countIf(ticker = 'NVDA') / 1e6, 2),
round(countIf(ticker = 'AAPL') / 1e6, 2), round(countIf(ticker = 'TSLA') / 1e6, 2))
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('QQQ', 'NVDA', 'AAPL', 'TSLA')
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
) AS pinned
SELECT
round(count() / 1e6, 2) AS updates_m,
pinned.1 AS qqq_updates_m,
pinned.2 AS nvda_updates_m,
round(pinned.1 - pinned.2, 2) AS qqq_minus_nvda_updates_m,
round(pinned.2 - greatest(pinned.3, pinned.4), 2) AS nvda_minus_next_single_m
FROM global_markets.cache_stocks_quotes
WHERE sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'Produkty indeksowe dominują w zestawieniu kwotowań: sam QQQ odnotował 5.23 milion aktualizacji, podczas gdy dla NVDA było to 1.8 milion, co czyni tę spółkę najczęściej kwotowaną pojedynczą akcją w naszym zestawieniu — przewaga nad kolejną spółką wynosi 0.67 milion aktualizacji. Pełny spis wszystkich instrumentów nie mieści się w 30-sekundowym limicie czasu, dlatego poniższa lista przedstawia zweryfikowany zestaw, a nie wyczerpujące zestawienie:
Dokładny kod SQL dla każdej liczby
SELECT ticker, round(count() / 1e6, 2) AS updates_m
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('QQQ', 'SPY', 'TQQQ', 'IWM', 'SQQQ', 'NVDA', 'AAPL', 'TSLA')
AND sip_timestamp >= '2026-06-29 00:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY ticker
ORDER BY updates_m DESCQQQ prowadzi zweryfikowany zestaw z wynikiem 5.23 milion aktualizacji; na szczycie listy znajdują się fundusze indeksowe oraz ich lewarowane odpowiedniki, a nie powszechnie znane akcje spółek.
SPY pod lupą: nanosekundowe zestawienia i dwukierunkowy spread
Dokładny kod SQL dla każdej liczby
WITH
(
SELECT (formatDateTime(toTimeZone(toStartOfSecond(sip_timestamp), 'America/New_York'), '%H:%i:%S'), count())
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
GROUP BY toStartOfSecond(sip_timestamp)
ORDER BY count() DESC, toStartOfSecond(sip_timestamp) ASC
LIMIT 1
) AS busiest_sec,
ordered AS (
SELECT
toFloat64(ask_price - bid_price) AS spread,
bid_price,
ask_price,
toFloat64(sip_timestamp - lagInFrame(sip_timestamp) OVER (ORDER BY sip_timestamp, sequence_number)) AS gap_s,
greatest(toFloat64(least(leadInFrame(sip_timestamp, 1, toDateTime64('2026-06-29 20:00:00', 9)) OVER (ORDER BY sip_timestamp, sequence_number ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING), toDateTime64('2026-06-29 20:00:00', 9)) - sip_timestamp), 0) AS dwell_s,
rowNumberInAllBlocks() AS rn
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 13:30:00' AND sip_timestamp < '2026-06-29 20:00:00'
)
SELECT
round(count() / 1e6, 2) AS spy_updates_m,
busiest_sec.1 AS busiest_second_et,
toUInt8(startsWith(busiest_sec.1, '10:15')) AS busiest_second_in_1015,
busiest_sec.2 AS busiest_second_updates,
round(minIf(gap_s, rn > 0 AND gap_s > 0) * 1e9) AS min_gap_between_updates_ns,
round(quantileExactIf(0.5)(gap_s, rn > 0) * 1e6, 1) AS median_gap_us,
countIf(rn > 0 AND gap_s = 0) AS identical_timestamp_pairs,
round(sumIf(spread * dwell_s, bid_price > 0 AND ask_price >= bid_price) / sumIf(dwell_s, bid_price > 0 AND ask_price >= bid_price) * 100, 2) AS time_weighted_avg_spread_cents,
round(avgIf(spread, bid_price > 0 AND ask_price >= bid_price) * 100, 2) AS per_update_avg_spread_cents,
round((avgIf(spread, bid_price > 0 AND ask_price >= bid_price) - sumIf(spread * dwell_s, bid_price > 0 AND ask_price >= bid_price) / sumIf(dwell_s, bid_price > 0 AND ask_price >= bid_price)) * 100, 2) AS per_update_premium_cents,
countIf(bid_price > 0 AND ask_price > 0 AND ask_price < bid_price) AS crossed_updates,
countIf(bid_price <= 0 OR ask_price <= 0) AS zero_bid_or_ask_updates
FROM orderedWycena SPY zmieniła się 3.98 milionów razy wyłącznie w godzinach sesji regulowanej. Najbardziej aktywna sekunda — 10:15:43 ET, w obrębie oznaczonej powyżej 10:15 minuty — zawierała 1461 aktualizacji. Najmniejsza przerwa między kolejnymi aktualizacjami wynosiła 1375 nanosekund, mediana wynosiła 245.6 mikrosekund, a 75138 kolejnych par posiadało identyczne znaczniki nanosekundowe — nawet rozdzielczość nanosekundowa nie pozwala na pełne uporządkowanie współczesnego rejestru transakcji.
Te nanosekundy służą do pomiaru spreadu bid-ask. Przy równej wadze każdej aktualizacji średni spread dla SPY wynosił 2.72 centów; po uwzględnieniu czasu trwania każdej wyceny, wynosił 2.34 centów. Wartość w przeliczeniu na jedną aktualizację jest mechanicznie o 0.38 centa szersza: aktualizacje koncentrują się dokładnie w momentach, gdy spread jest szeroki i zmienny, podczas gdy zlecenie oczekujące jest mierzone czasem zegarowym. Przy każdej statystyce dotyczącej spreadu należy sprawdzić, który zegar został użyty do pomiaru. Dane są jawne: 1544 aktualizacji w godzinach sesji regulowanej miało chwilowo przekreślone ceny (cena ask poniżej bid, wynikające z przeplatania się wycen z różnych platform) oraz 0 miało zerową cenę bid lub ask; statystyki spreadu wykluczają oba te przypadki i uwzględniają to, co zostało wykluczone.
Spread ma swój harmonogram
Podział spreadu notowań SPY na półgodzinne przedziały pozwala przekształcić mikrostrukturę w krzywą użyteczną dla każdego tradera:
Dokładny kod SQL dla każdej liczby
SELECT
formatDateTime(toTimeZone(toStartOfInterval(sip_timestamp, INTERVAL 30 MINUTE), 'America/New_York'), '%H:%i') AS et_time,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price >= bid_price) * 100, 1) AS median_spread_cents,
count() AS quote_updates
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY' AND sip_timestamp >= '2026-06-29 08:00:00' AND sip_timestamp < '2026-06-30 00:00:00'
GROUP BY et_time
ORDER BY et_timeMediana wynosi 8 centów w przedziale premarket dla 04:00 ET, 3 centów w przedziale otwarcia 09:30 oraz 2 centów do godziny 14:00 — handel tym samym akcjami na otwarciu premarketu kosztuje w przybliżeniu cztery razy więcej niż realizacja zlecenia wczesnym popołudniem. Spread nie jest stały; stanowi on harmonogram.
Dowód rzeczowy: plik, który zatrzymał się na literze S
Każdy codzienny plik dostawcy przechodzi test kompletności przed publikacją danych: liczymy tickery, sprawdzamy zakres alfabetyczny, porównujemy z danymi z poprzednich dni. Plik FINRA dotyczący wolumenu krótkich pozycji poza rynkiem (off-exchange) z 29 czerwca stanowi przykład takiej potrzeby:
Dokładny kod SQL dla każdej liczby
SELECT
date,
uniqExact(ticker) AS tickers,
min(ticker) AS first_ticker,
max(ticker) AS last_ticker,
countIf(ticker = 'TSLA') AS tsla_rows,
round(100 * sum(short_volume) / sum(total_volume), 2) AS short_pct_of_reported
FROM global_markets.stocks_short_volume
WHERE date BETWEEN '2026-06-26' AND '2026-06-30'
GROUP BY date
ORDER BY datePlik z 26 czerwca obejmuje 15052 tickerów, od A do ZYME. Plik z 29 czerwca obejmuje 5489, od A do SSUS — po prostu kończy się w połowie nazw zaczynających się na S. Każdy ticker występujący alfabetycznie po tym punkcie — w tym TSLA, przy 0 wierszach dla 29 czerwca wobec 1 dla 26 czerwca — nie został uwzględniony; do 30 czerwca plik powraca do poziomu 15362 tickerów. Test kompletności to nic innego jak taka weryfikacja — różnica między publikacją statystyki a publikacją błędu danych.
Przy uwzględnieniu powyższego zastrzeżenia — i wyłącznie przy jego uwzględnieniu — przedstawiamy wskaźnik: wolumen marked-short stanowi 45.85% raportowanego wolumenu off-exchange w dniu 29 czerwca, przy 46.89% w dniu 26 czerwca oraz 48.82% w dniu 30 czerwca. Wartość z 29 czerwca obejmuje jedynie zakres od A do S, dlatego należy ją traktować jako niepełny odczyt. Poziom bliski połowie udziału krótkich pozycji jest standardowy dla wszystkich sąsiednich sesji — a dzienny wolumen krótkich pozycji nie jest short interest.
Uwagi do danych
Pełne uwagi do danych
- Spadek aktywności kwotowań między 17:00 a 18:00. Strumień kwotowań SPY niemal ustaje w półgodzinie 17:00 ET (aktualizacje 233) i wzrasta ponownie około 18:00 (40608) — jest to wzorzec sesyjny/kanału między tickerami, a nie brak danych.
- Udziały ułamkowe występują powszechnie. 4.73% transakcji posiada niecałkowite wielkości; wolumen należy sumować jako wartości dziesiętne.
- Słownik kodów powtarza identyfikatory dla różnych typów. Id 15 jest jednocześnie warunkiem sprzedaży (Market Center Official Close) oraz warunkiem kwotowania (Closed); każde zapytanie do słownika w tym miejscu filtruje asset_class = 'stocks' ORAZ type = 'sale_condition'. Samo wyszukiwanie po id prowadzi do błędnego etykietowania kodów.
- Wykluczenia jakości kwotowań są liczone wewnątrz zestawienia. Liczby transakcji typu crossed oraz zero-bid-or-ask znajdują się w panelu SPY microscope powyżej; żadna statystyka spread nie ukrywa tych spadków.
- Skanowanie całego rejestru (whole-tape) to panele działające wyłącznie w trybie wsadowym. Blokady rynkowe mierzone tutaj trwały do około 30 sekund każda na zimnym cache (blokada po wygaśnięciu czasu jest ponawiana raz; przetworzenie na rozgrzanym cache usuwa ograniczenie); działają one raz w momencie tworzenia treści poprzez ograniczoną ścieżkę tylko do odczytu, nigdy nie są dostępne na żywo dla czytelników, a zapisane wyniki stanowią oficjalny zapis.
Metodologia
- Znaki czasu są przechowywane w formacie UTC i filtrowane przy użyciu surowych granic UTC (godziny sesji regulowanej 29 czerwca obejmują okres od 13:30 do 20:00 UTC); funkcja toTimeZone występuje wyłącznie w listach SELECT.
- Typ sesji jest weryfikowany względem kalendarza dni wolnych oraz obserwacji 390-barowego okna sesji regulowanej — nie jest on przyjmowany domyślnie.
- „Wolumen liczony przez SIP (dopasowany)” to wolumen, który zgodnie z regułami warunkowymi SIP stanowi część całkowitego wolumenu skonsolidowanego; zestaw wykluczeń jest pochodną słownika i jest ograniczony sumą kontrolną, a nie wpisany na stałe.
- Statystyki spreadu w ujęciu na aktualizację przypisują każdemu NBBO równe wagi; statystyki ważone czasem przypisują każdej wycenie wagę zależną od czasu jej trwania. Obie metody ujawniają zakres wykluczeń.
- Kolumny cenowe i wolumenowe w formacie dziesiętnym są sumowane natywnie i konwertowane na typy 64-bit float przed wykonaniem jakichkolwiek obliczeń wskaźników lub iloczynu ceny i wolumenu.
- Tabele ticków zachowują pełną historię bez okresu wygaśnięcia; te przechowywane, wersjonowane wyniki stanowią trwały zapis danych. Stan magazynu danych na dzień 3 lipca 2026 r.
Każdy powyższy panel stanowi jeden zapisany obiekt — wykres, tabelę oraz zapytanie SQL. Można otworzyć dowolny z nich, skopiować zapytanie i przeprowadzić dalszą analizę na terminalu Strasmore.