Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-07-25

Microstructure deep-dive: Hunyo 29, 2026

Sa ilalim ng Hunyo 29, 2026: buong trade at quote tape, dictionary-derived volume correction, nanosecond receipts, at truncatged FINRA file.

Ito ang kasamang nasa ilalim ng buod ng merkado noong Hunyo 29, 2026: ang raw feed sa ilalim ng minute bars — 156.1 milyong indibidwal na trades at 505.38 milyong NBBO quote updates sa isang karaniwang session ng Lunes. Bawat numero ay naka-imbak na resulta ng query (palawakin ang anumang panel para sa eksaktong SQL), at ang dalawang natuklasang forensic ng araw ay may kumpletong sulatin: isang pagwawastong volume na hinihingi ng sariling code dictionary ng tape, at isang vendor file na tahimik na nagtatapos sa titik S.

Ang trade tape, bawat print

Ang session check ang una, hindi ina-assume: naglalaman ang holiday calendar ng exchange ng 0 row para sa Hunyo 29, 2026, at nag-print ang SPY ng eksaktong 390 minute bar sa loob ng regular na window — isang buong session, mula 9:30 am hanggang 4:00 pm New York time. Sa kabuuan ng extended day, nag-record ang consolidated tape ng 156.1 milyong indibidwal na trade.

QueryIsang araw ng trades: session check at ang laki ng bawat print
Ang eksaktong SQL sa likod ng bawat numero
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'

Ang 72.61% sa lahat ng print ay odd lot — mga trade na wala pang 100 share — ngunit ang inilipat lang nila ay 8.79% ng raw share — ang uncorrected total na tine-trim ng volume-forensics section sa ibaba. Ang median print ay 21 share, sinusukat gamit ang self-verifying bracket probe — cumulative count mula 19 hanggang 23 share — na nagbabalik ng 0 kung mag-miss ang bracket, at bounded kaya hindi nababago ang post sa isang miss. 17.9 milyong print ay para sa eksaktong isang share at 4.73% ay may fractional size — isang pattern naaayon sa mga retail app na tumatama sa tape ng paisa-isa, kasama ang mga market maker na kumukuha ng kabilang side.

Forensic sa volume: pagkuha ng "matched volume" mula sa dictionary

Idagdag ang size field sa bawat print at nagpapakita ang June 29 ng 24.79 bilyong shares na na-trade. Mali ang numerong iyon, at sinasabi ito ng tape mismo. Ang bawat print ay may kasamang condition codes,at ang SIP — ang Securities Information Processor na nagko-consolidate ng bawat venue sa iisang stream — ay nagpapakabg ng dictionary na nagsasabi, code por code, kung ang isang print ay nag-uupdate ng consolidated volume. Ang ilang mensahe ay administrative re-broadcasts ng volume na nabilang na nang isang beses. Sa halip na ihardcode ang isang listahan ng "kilalang" codes, inii-derive ng post na ito ang exclusion set mula sa dictionary mismo:

QueryAng exclusion set, mula sa sariling code dictionary ng tape (isang row)
Ang eksaktong SQL sa likod ng bawat numero
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') = 0

May 3 sale conditions na may updates_volume = false sa consolidated feed: 15 Market Center Official Close · 16 Market Center Official Open · 38 Corrected Consolidated Close (per listing market). Narito ang aral: ang isang mas maagang draft ng daily recap ay naghardcode ng codes 15 at 16 — ang dalawang opisyal na open/close message na binabanggit ng bawat data guide — at na-miss ang code 38 nang buo. Ang dictionary, hindi isang natatandaang listahan ng code, ang source of truth.

Dalawang block ang sinadya: ang isang scalar subquery sa dictionary sa loob ng 156.1-million-row scan ay lumalampas sa 30-second cap natin. Kaya inirer-derive ng block sa itaas ang set bilang isang row — na may sanity bound sa code count at isang id checksum (69) — at ina-apply ng block sa baba ang mga nakahandang literals. Kung mag-drift ang dictionary, ang checksum bound ay magho-hold sa post na ito para sa review; ang mga literals ay hindi maaaring tahimik na mag-stale.

QueryRaw vs SIP-counted volume, na may applied na derived exclusion set
Ang eksaktong SQL sa likod ng bawat numero
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'

Ang tamang accounting: 24.79 bilyong shares na raw, 20.66 bilyong SIP-counted, 4.13 bilyong hindi kasama sa 91175 administrative prints. Isang depinsiyon, na sinabi nang tama: ang "matched volume" ay nangangahulugang ang volume na binibilang ng sariling condition rules ng SIP patungo sa consolidated total — wala nang iba. Hindi natin hinuhusgahan kung aling mga trade ang economically meaningful; ini-a-apply natin ang sariling accounting ng tape.

Ang mga pinakamalaking print, na-decode

Ang pinakamalaking print ng araw ay kung saan ang mga condition code ay tumitigil na maging trivia:

QueryAng pinakamalaking single prints ng Hunyo 29 (dictionary-excluded codes na-strip)
Ang eksaktong SQL sa likod ng bawat numero
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 10

Basahin ang mga top row bilang isang worked example. Ang pinakamalaking print ng araw — 61.69 milyong CAG (Conagra) na share sa $13.98, humigit-kumulang $862.5 milyon, na na-stamp ng 16:04:53 ET sa ilalim ng mga code na 8, 41 (8 Closing Prints, 41 Trade Thru Exempt) — ay ang resulta ng NYSE closing auction na na-publish pagkatapos ng 4:00 pm. Ito ay binibilang sa volume nang eksaktong isang beses. Ang parehong 61.69 milyong share ay muling lumalabas sa ilalim ng code 15, Market Center Official Close: isang re-report na hindi kasama sa dictionary, bahagi ng 4.13 bilyon na na-strip sa itaas. Ang code-15 row na iyon ay na-strip sa table sa itaas nang sagrado, kaya ang receipt nito ay nakakakuha ng sarili nitong cheap na one-row panel:

QueryAng receipt: closing auction ng CAG at ang code-15 re-report nito, magkasama
Ang eksaktong SQL sa likod ng bawat numero
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'

Ang pinakamalaki sa 6 na official-close na mensahe sa CAG ay nagdadala ng 61.69 milyong share — eksaktong 61.69 milyon ng auction (kaibahan: 0) — na na-stamp ng 16:04:53 ET mula sa exchange id na 10, NYSE sa stocks directory: ang listing market na muling nagdedeklara ng sarili nitong auction.

Ang iba pang CAG na row ay ibang hayop — ang 15.17 milyong-share na print sa ilalim ng mga code na 12, 2 (12 Form T / extended hours, 2 Average Price Trade) at dalawa pang nasa ilalim ng code 12 ay mga post-auction print na na-report sa pamamagitan ng FINRA na ang mga condition ay nagdadala ng updates_volume = true. Binibilang ng SIP ang mga ito bilang tunay na print, at gayon din ang aming matched figure.

Sa ibang lugar, ang code 9 ay nagmamarka sa mga Nasdaq closing cross — ang $3389.5 milyong cross ng NVDA ay ang pinakamalaking print sa table sa dolyar — at ang mga code sa SNAP print (53, 41) ay kinabibilangan ng 53, isang Qualified Contingent Trade.

Ang orasan: sampung minuto ang nagmamay-ari ng araw

Sa minuto-resolusyon, ang trade tape halos puro sa mga dulo ng sesyon nagkukumpol:

QuerySampung pinaka-busy na minuto ng trade tape (milyong-milyong prints)
Ang eksaktong SQL sa likod ng bawat numero
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

Ang 15:59 ET na minuto ay nakapag-print ng 3.98 milyong trades — mahigit sa animnapu’t libo kada segundo. Kung ang natitirang top ten ay yumakap ba sa open at sa close ay isang one-row na pagsusuri rin:

QueryIlan sa sampung pinaka-busy na minuto ang nasa labas ng open at ng close
Ang eksaktong SQL sa likod ng bawat numero
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 sa sampu ay nasa loob ng unang sampung minuto ng pagbubukas o sa huling sampung minuto bago ang pagsara. Ang isang pagbubukod — 10:15 ET, isang pagputok na 0.88 milyong prints — ay isang tunay na mid-morning anomaly; ang sanhi nito ay hindi malaman mula sa datos na ito, at hindi kami magsasalin-lahi ng dahilan. Ang parehong oras ay babalik sa ibaba.

Ang quote stream: kalahating bilyong update

Ang National Best Bid and Offer — ang pinakamainam na bid at ask na presyo sa bawat exchange, na ini-re-publish kapag may pagbabago sa alinman — ay nag-update ng 505.38 milyong beses noong Hunyo 29, laban sa 156.1 milyong trades.

QueryBuong NBBO stream sa isang row — QQQ at NVDA na-pin-by-name
Ang eksaktong SQL sa likod ng bawat numero
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'

Ang mga index product ang nangingibabaw sa pag-quote: ang QQQ lang ay nag-log ng 5.23 milyong update laban sa 1.8 milyon para sa NVDA, ang pinaka-quote na solong stock na tiningnan namin — 0.67 milyong update ang kalamangan sa susunod na solong pangalan. Ang buong per-ticker census ng bawat listing ay hindi kasya sa 30-segundong cap, kaya ang leaderboard sa ibaba ay isang checked set, hindi isang exhaustive ranking:

QueryNBBO quote updates para sa walong heavily-quoted tickers (milyon)
Ang eksaktong SQL sa likod ng bawat numero
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 DESC

Ang QQQ ang nanguna sa checked set na may 5.23 milyong update; ang tuktok ng board ay mga index fund at ang kanilang leveraged na pinsan, hindi mga pamilyar na stock.

SPY sa ilalim ng mikroskopyo: resibo sa nanosecond, at ang spread sa dalawang paraan

QuerySPY sa ilalim ng mikroskopyo: nanosecond gaps, spread sa dalawang paraan, quote quality
Ang eksaktong SQL sa likod ng bawat numero
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 ordered

Ang quote ng SPY ay nagbago 3.98 milyong beses sa regular hours lamang. Ang pinaka-abalang segundo nito — 10:15:43 ET, sa loob ng 10:15 minutong na-flag sa itaas — nagdala ng 1461 na update. Ang pinakamaliit na agwat sa pagitan ng magkasunod na update ay 1375 nanosecond, ang median ay 245.6 microsecond, at 75138 magkasunod na pares ang nagdala ng magkatulad na nanosecond stamp — kahit ang nanosecond resolution ay hindi ganap na maaaring i-order ang modernong tape.

Ang mga nanosecond na iyon ay nagkakahalaga sa pagsusukat ng bid-ask spread. Sa pagbibilang ng bawat update nang pantay-pantay, ang average spread ng SPY ay 2.72 cents; sa pag-weight ng bawat quote ayon sa kung gaano katagal ito tumayo, 2.34 cents. Ang per-update na figure ay nagbabasa ng 0.38 cents na mas malawak nang mekanikal: ang mga update ay nagkukumpol sa eksaktong mga sandali kung kailan ang spread ay malawak at gumagalaw, habang ang isang resting order ay nabubuhay sa orasan. Sa tuwing makakita ka ng spread statistic, tanungin kung aling orasan ang sumukat nito. Ang census ay isinisiwalat, hindi nakatago: 1544 regular-hours na update ay pansamantalang crossed (ask sa ibaba ng bid, isang interleaving ng mga quote mula sa iba't ibang venue) at 0 ang nagdala ng zero bid o ask; ang mga spread statistic ay hindi kasama ang dalawa at binibilang ang mga hindi kasama.

Ang spread ay may oras

Ang pagbu-bucket sa quoted spread ng SPY sa kalahating oras ay ginagawang kurba ang microstructure na maaaring gamitin ng kahit sinumang trader:

QueryMedian quoted spread ng SPY kada kalahating oras, 4:00 am hanggang 8:00 pm ET
Ang eksaktong SQL sa likod ng bawat numero
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_time

Median na 8 cents sa 04:00 ET premarket bucket, 3 cents sa 09:30 opening bucket, at 2 cents sa 14:00 — ang pag-trade ng parehong share sa premarket open ay nagbabayad ng halos apat na beses kumpara sa spread ng isang early-afternoon order. Hindi konstante ang spread; ito ay isang iskedyul.

Eksibit na pang-imbestigasyon: ang file na huminto sa S

Bawat pang-araw na vendor file ay sumasailalim sa completeness probe bago kami mag-publish ng numero mula rito: bilangin ang mga ticker, suriin ang alphabetical na saklaw, ihambing ang mga kapitbahay. Ang FINRA off-exchange short-volume file noong Hunyo 29 ay ang eksibit para ipakita kung bakit:

QueryCompleteness probe: FINRA short-volume file coverage, Hunyo 26-30
Ang eksaktong SQL sa likod ng bawat numero
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 date

Ang file noong Hunyo 26 ay sumasaklaw sa 15052 na ticker, A hanggang ZYME. Ang file noong Hunyo 29 ay sumasaklaw sa 5489, A hanggang SSUS — simpleng humihinto ito sa gitna ng mga pangalang nagsisimula sa S. Ang bawat ticker na alphabetically pagkatapos ng puntong iyon — kasama ang TSLA, na may 0 na row para sa Hunyo 29 kumpara sa 1 noong Hunyo 26 — ay nawawala; sa Hunyo 30 ang file ay bumalik na sa 15362 na ticker. Ang completeness probe ay walang iba kundi ang one-row-per-day na resibong ito — ang pagkakaiba sa pag-publish ng istatistika at pag-publish ng isang artifact.

Kapag ang disclosure na iyon ay naka-inline — at tanging sa ganoon — narito ang ratio: ang marked-short volume ay nakakalkula sa 45.85% ng reported off-exchange volume noong Hunyo 29, kasama ang 46.89% noong Hunyo 26 at 48.82% noong Hunyo 30. Ang numero noong Hunyo 29 ay sumasaklaw lamang sa A-hanggang-S na hiwa, kaya ituring itong isang partial na pagbasa. Ang halos kalahating short share ay ang karaniwang antas na ipinapakita ng bawat kalapit na session — at ang pang-araw na short volume ay hindi short interest.

Mga tala sa datos

Buong mga tala sa datos
  • Ang katahimikan ng quote mula 5 hanggang 6 ng gabi. Ang quote stream ng SPY halos tumitigil sa 17:00 ET na kalahating oras (233 na update) at muling nabubuhay sa 18:00 (40608) — isang pattern ng feed/session na tumatawid sa mga ticker, hindi nawawalang datos.
  • Ang mga fractional share ay karaniwan. 4.73% ng mga print ay may non-integer na laki; ang volume ay dapat i-sum bilang mga decimal.
  • Ang code dictionary ay muling gumagamit ng mga id sa iba't ibang uri. Ang id 15 ay parehong sale condition (Market Center Official Close) at quote condition (Closed); ang bawat dictionary query dito ay nagfi-filter ng asset_class = 'stocks' AND type = 'sale_condition'. Ang isang simpleng lookup ayon sa id ay mali ang pag-label ng mga code.
  • Ang mga pagbubukod sa kalidad ng quote ay binibilang in-line. Ang mga bilang ng crossed at zero-bid-or-ask ay nasa SPY microscope panel sa itaas; walang spread statistic na nagtatago ng mga drop nito.
  • Ang mga whole-tape scan ay batch-only na mga panel. Ang market-wide na mga block dito ay sumukat ng humigit-kumulang 30 segundo bawat isa sa isang cold cache (ang isang na-time-out na block ay sinusubukan muli nang isang beses; ang warmed pass ay nililinis ang cap); tumatakbo ang mga ito nang isang beses sa oras ng pag-aauthorship sa pamamagitan ng gated read-only na landas, hindi kailanman live para sa mga mambabasa, at ang mga nakaimbak na resulta ang siyang rekord.

Metodolohiya

  • Ang mga timestamp ay nakaimbak sa UTC at sinasala gamit ang mga raw UTC na hangganan (ang regular na oras noong Hunyo 29 ay 13:30 hanggang 20:00 UTC); ang toTimeZone ay lumilitaw lamang sa mga SELECT list.
  • Ang uri ng session ay nasuri laban sa holiday calendar at sa na-obserbahang 390-bar na regular na window — hindi kailanman ipinapalagay.
  • Ang "SIP-counted (matched) volume" ay ang bolyum na binibilang ng sariling condition rules ng SIP para sa consolidated total; ang exclusion set ay hinango mula sa diksyunaryo, checksum-bounded, hindi kailanman naka-hardcode.
  • Ang per-update spread statistics ay nagbibigay ng pantay na timbang sa bawat NBBO update; ang time-weighted statistics ay nagbibigay ng pantay na timbang sa bawat quote batay sa kung gaano katagal ito nanatili. Ipinapakita ng pareho ang kanilang mga pagbubukod.
  • Ang mga decimal na price/size column ay sinusuma nang native at ini-cast sa 64-bit floats bago ang anumang ratio o price-times-size arithmetic.
  • Ang mga tick table ay nagpapanatili ng buong kasaysayan na walang rolling expiry; ang mga nakaimbak at versioned na resulta na ito ang matibay na rekord anuman ang mangyari. Katayuan ng warehouse mula Hulyo 3, 2026.

Ang bawat panel sa itaas ay isang nakaimbak na object — chart, table, at SQL na magkasama. Magbukas ng alinman sa kanila, kopyahin ang query, at dalhin ito nang higit pa sa Strasmore terminal.