Microstructure विश्लेषण: 29 जून 2026
29 जून 2026 के मार्केट डेटा का विस्तृत विश्लेषण: इसमें ट्रेड टेप, वॉल्यूम सुधार, नैनोसेकंड रिसीट्स और FINRA फ़ाइल का पूर्ण विवरण शामिल है।
यह 29 जून, 2026 के मार्केट रिकैप का विस्तृत विवरण है: मिनट बार के नीचे का कच्चा डेटा — एक सामान्य सोमवार सत्र में 156.1 मिलियन व्यक्तिगत ट्रेड और 505.38 मिलियन NBBO कोट अपडेट। प्रत्येक संख्या एक संग्रहीत क्वेरी परिणाम है (सटीक SQL देखने के लिए किसी भी पैनल का विस्तार करें)। दिन के दो महत्वपूर्ण निष्कर्षों का पूरा विवरण दिया गया है: एक वॉल्यूम सुधार जिसकी आवश्यकता मार्केट कोड डिक्शनरी द्वारा की गई थी, और एक वेंडर फ़ाइल जो चुपचाप अक्षर S पर समाप्त हो जाती है।
ट्रेड टेप, प्रिंट दर प्रिंट
सबसे पहले सत्र की जांच की जाती है: एक्सचेंज हॉलिडे कैलेंडर में 29 जून, 2026 के लिए 0 पंक्तियाँ दर्ज हैं, और SPY ने नियमित विंडो के भीतर ठीक 390 मिनट बार प्रिंट किए — यानी न्यूयॉर्क समय के अनुसार सुबह 9:30 बजे से शाम 4:00 बजे तक का पूरा सत्र। एक्सटेंडेड डे के दौरान, कंसोलिडेटेड टेप ने 156.1 मिलियन व्यक्तिगत ट्रेड दर्ज किए।
हर आंकड़े के पीछे का पूरा SQL
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% ऑड लॉट्स थे — यानी 100 शेयरों से कम के ट्रेड — फिर भी उन्होंने केवल 8.79% रॉ शेयर्स को मूव किया — वह अनकॉर्डेक्टेड टोटल जिसे नीचे वॉल्यूम-फोरेंसिक्स सेक्शन में कम किया गया है। मीडियन प्रिंट 21 शेयर्स था, जिसे सेल्फ-वेरिफाइंग ब्रैकेट प्रोब के साथ मापा गया था — 19 से 23 शेयरों के संचयी काउंट के साथ — जो ब्रैकेट मिस होने पर 0 लौटाता है, और इसकी सीमा तय है ताकि मिस होने पर पिछला मान बना रहे। 17.9 मिलियन प्रिंट्स ठीक एक शेयर के लिए थे और 4.73% में फ्रैक्शनल साइज थे — यह एक ऐसा पैटर्न है जो रिटेल ऐप्स के एक-एक स्लाइस के रूप में टेप पर आने के अनुरूप है, जहाँ मार्केट मेकर्स दूसरी तरफ ट्रेड लेते हैं।
Volume forensics: dictionary से "matched volume" निकालना
हर print के size field को जोड़ें, तो 29 June को 24.79 billion shares का व्यापार हुआ। यह आंकड़ा गलत है, और tape स्वयं यह स्पष्ट करता है। हर print में condition codes होते हैं, और SIP — जो सभी venues को एक stream में एकीकृत करता है — एक dictionary प्रकाशित करता है। यह dictionary बताती है कि कौन सा code consolidated volume को अपडेट करता है। कुछ messages ऐसे administrative re-broadcasts होते हैं जिनका volume पहले ही गिना जा चुका है। "known" codes की सूची को hardcode करने के बजाय, यह post exclusion set को सीधे dictionary से प्राप्त करता है:
हर आंकड़े के पीछे का पूरा SQL
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') = 0Consolidated feed पर 3 sale conditions में updates_volume = false होता है: 15 Market Center Official Close · 16 Market Center Official Open · 38 Corrected Consolidated Close (per listing market)। यहाँ एक उदाहरण दिया गया है: daily recap के एक पुराने draft में code 15 और 16 को hardcode किया गया था — ये वे दो official open/close messages हैं जिनका उल्लेख हर data guide में है — और code 38 पूरी तरह छूट गया था। code की यादृच्छिक सूची के बजाय, dictionary ही सत्य का एकमात्र स्रोत (source of truth) है।
दो blocks का उपयोग जानबूझकर किया गया है: 156.1-million-row scan के भीतर dictionary पर scalar subquery करने से हमारा 30-second का समय सीमा समाप्त हो जाता है। इसलिए, ऊपर वाला block इस set को एक row के रूप में प्राप्त करता है — जिसे code count और एक id checksum (69) द्वारा सीमित किया गया है — और नीचे वाला block प्राप्त literals को लागू करता है। यदि dictionary में कभी बदलाव आता है, तो checksum bound इस post को समीक्षा के लिए रोक देगा; literals कभी भी चुपचाप पुराने (stale) नहीं हो सकते।
हर आंकड़े के पीछे का पूरा SQL
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'सही गणना: 24.79 billion shares raw, 20.66 billion SIP-counted, 4.13 billion excluded (91175 administrative prints में)। एक सटीक परिभाषा: "matched volume" का अर्थ है वह volume जिसे SIP के अपने condition rules consolidated total में गिनते हैं — इससे अधिक कुछ नहीं। हम यह तय नहीं कर रहे हैं कि कौन से trades आर्थिक रूप से महत्वपूर्ण थे; हम tape की अपनी लेखांकन (accounting) पद्धति लागू कर रहे हैं।
सबसे बड़े प्रिंट्स का विश्लेषण
दिन के सबसे बड़े प्रिंट्स वे होते हैं जहाँ कंडीशन कोड्स केवल सामान्य जानकारी नहीं रह जाते:
हर आंकड़े के पीछे का पूरा SQL
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ऊपरी पंक्तियों को एक उदाहरण के रूप में देखें। दिन का सबसे बड़ा प्रिंट — 61.69 मिलियन CAG (Conagra) शेयर $13.98 पर, लगभग $862.5 मिलियन, जिसे 16:04:53 ET पर कोड 8, 41 (8 Closing Prints, 41 Trade Thru Exempt) के साथ दर्ज किया गया है — NYSE क्लोजिंग ऑक्शन का परिणाम है जो शाम 4:00 बजे के बाद प्रकाशित होता है। इसे वॉल्यूम में केवल एक बार गिना जाता है। वही 61.69 मिलियन शेयर फिर कोड 15, Market Center Official Close के तहत दिखाई देते हैं: यह एक री-रिपोर्ट है जिसे डिक्शनरी में शामिल नहीं किया जाता है, और यह ऊपर दिए गए 4.13 बिलियन का हिस्सा है। कोड-15 वाली पंक्ति को जानबूझकर ऊपर दी गई तालिका से हटा दिया गया है, इसलिए इसकी जानकारी के लिए एक अलग छोटा पैनल दिया गया है:
हर आंकड़े के पीछे का पूरा SQL
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'CAG के 6 ऑफिशियल-क्लोज संदेशों में सबसे बड़ा संदेश 61.69 मिलियन शेयर का है — जो ऑक्शन के 61.69 मिलियन शेयर के बराबर है (अंतर: 0) — जिसे एक्सचेंज आईडी 10 (स्टॉक्स डायरेक्टरी में NYSE) से 16:04:53 ET पर दर्ज किया गया है: यह लिस्टिंग मार्केट द्वारा अपने स्वयं के ऑक्शन का पुन: विवरण है।
अन्य CAG पंक्तियाँ अलग प्रकार की हैं — कोड 12, 2 (12 Form T / extended hours, 2 Average Price Trade) के तहत 15.17 मिलियन शेयर का प्रिंट और कोड 12 के तहत दो अन्य प्रिंट, ऑक्शन के बाद के प्रिंट हैं जिन्हें FINRA के माध्यम से रिपोर्ट किया गया है और जिनके कंडीशन में updates_volume = true शामिल है। SIP इन्हें वास्तविक प्रिंट मानता है, और हमारा मिलान किया गया आंकड़ा भी इन्हें यही मानता है।
अन्य स्थानों पर, कोड 9 Nasdaq क्लोजिंग क्रॉस को दर्शाता है — NVDA का $3389.5 मिलियन क्रॉस डॉलर के मामले में तालिका का सबसे बड़ा प्रिंट है — और SNAP प्रिंट (53, 41) के कोड में 53 शामिल है, जो एक Qualified Contingent Trade है।
समय: दस मिनट पूरे दिन पर हावी रहते हैं
मिनट-दर-मिनट के आधार पर, ट्रेडिंग वॉल्यूम लगभग पूरी तरह से सत्र के किनारों पर केंद्रित होता है:
हर आंकड़े के पीछे का पूरा SQL
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 1015:59 ET मिनट में 3.98 मिलियन ट्रेड हुए — यानी प्रति सेकंड साठ हजार से अधिक। क्या शीर्ष दस में शामिल अन्य ट्रेड भी बाजार खुलने और बंद होने के समय ही केंद्रित हैं, इसका माप एक पंक्ति में दिया गया है:
हर आंकड़े के पीछे का पूरा SQL
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 ट्रेड बाजार खुलने के पहले दस मिनट या बंद होने से पहले के अंतिम दस मिनटों के भीतर होते हैं। एकमात्र अपवाद — 10:15 ET, जहाँ 0.88 मिलियन ट्रेडों का उछाल देखा गया — सुबह के समय की एक असामान्य घटना है; इस डेटा से इसके कारण का पता नहीं चलता है, और हम इसके बारे में कोई अनुमान नहीं लगाएंगे। यही समय विवरण नीचे दिया गया है।
कोट स्ट्रीम: आधा अरब अपडेट्स
National Best Bid and Offer — जो हर एक्सचेंज पर सबसे अच्छी खरीद और बिक्री कीमत होती है और किसी भी बदलाव पर पुन: प्रकाशित होती है — 29 जून को 505.38 million times अपडेट हुई। इस दौरान 156.1 million ट्रेड्स हुए।
हर आंकड़े के पीछे का पूरा SQL
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'कोटिंग में इंडेक्स प्रोडक्ट्स का दबदबा है: अकेले QQQ ने 5.23 million अपडेट्स दर्ज किए, जबकि NVDA के लिए यह संख्या 1.8 million थी। NVDA हमारे द्वारा जाँचे गए सबसे अधिक कोट किया जाने वाला सिंगल स्टॉक है — यह अगले सिंगल स्टॉक से 0.67 million अपडेट्स अधिक है। हर लिस्टिंग का पूर्ण प्रति-टिकर डेटा 30-सेकंड की सीमा में नहीं आता है, इसलिए नीचे दी गई लीडरबोर्ड एक सत्यापित सेट है, न कि कोई व्यापक रैंकिंग:
हर आंकड़े के पीछे का पूरा SQL
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जाँचे गए सेट में QQQ 5.23 million अपडेट्स के साथ सबसे आगे रहा; बोर्ड के शीर्ष पर इंडेक्स फंड्स और उनके लेवरेज्ड विकल्प हैं, न कि सामान्य स्टॉक्स।
SPY under the microscope: nanosecond receipts, and the spread two ways
हर आंकड़े के पीछे का पूरा SQL
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 orderedSPY's quote changed 3.98 million times in regular hours alone. Its busiest second — 10:15:43 ET, inside the 10:15 minute flagged above — carried 1461 updates. The smallest gap between consecutive updates was 1375 nanoseconds, the median 245.6 microseconds, and 75138 consecutive pairs carried identical nanosecond stamps — even nanosecond resolution cannot fully order the modern tape.
Those nanoseconds earn their keep measuring the bid-ask spread. Counting every update equally, SPY's average spread was 2.72 cents; weighting each quote by how long it stood, 2.34 cents. The per-update figure reads 0.38 cents wider mechanically: updates cluster in exactly the moments when the spread is wide and moving, while a resting order lives in clock time. Whenever you see a spread statistic, ask which clock measured it. The census is disclosed, not hidden: 1544 regular-hours updates were momentarily crossed (ask below bid, an interleaving of quotes from different venues) and 0 carried a zero bid or ask; the spread statistics exclude both and count what they exclude.
स्प्रेड का एक समय चक्र होता है
SPY के कोटेड स्प्रेड को आधे घंटे के अंतराल में बांटने पर इसकी माइक्रोस्ट्रक्चर एक कर्व (curve) के रूप में दिखाई देती है, जिसका उपयोग कोई भी ट्रेडर कर सकता है:
हर आंकड़े के पीछे का पूरा SQL
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_time04:00 ET प्रीमार्केट बकेट में 8 सेंट का मीडियन, 09:30 ओपनिंग बकेट में 3 सेंट, और 14:00 तक 2 सेंट — प्रीमार्केट ओपन पर एक ही शेयर को ट्रेड करने की लागत दोपहर के शुरुआती ऑर्डर के स्प्रेड से लगभग चार गुना अधिक होती है। स्प्रेड स्थिर नहीं है; यह एक शेड्यूल है।
फोरेंसिक साक्ष्य: वह फ़ाइल जो S पर रुक गई
किसी भी संख्या को प्रकाशित करने से पहले, हम हर दैनिक वेंडर फ़ाइल की पूर्णता (completeness) की जाँच करते हैं: टिकर्स की गिनती, वर्णानुक्रम (alphabetical span) की जाँच, और पड़ोसी दिनों के डेटा से तुलना। 29 जून की FINRA off-exchange short-volume फ़ाइल इसका उदाहरण है:
हर आंकड़े के पीछे का पूरा SQL
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 date26 जून की फ़ाइल में 15052 टिकर्स शामिल हैं, A से ZYME तक। 29 जून की फ़ाइल में 5489 टिकर्स हैं, A से SSUS तक — यह S से शुरू होने वाले नामों के बीच में ही रुक जाती है। उस बिंदु के बाद के सभी वर्णानुक्रम वाले टिकर्स गायब हैं — इसमें TSLA भी शामिल है, जो 29 जून को 0 पंक्तियों पर है जबकि 26 जून को 1 पर था। 30 जून तक फ़ाइल वापस 15362 टिकर्स पर पहुँच जाती है। पूर्णता की जाँच (completeness probe) इस प्रकार के दैनिक डेटा की तुलना करने से अधिक कुछ नहीं है — यह एक सटीक आँकड़ा प्रकाशित करने और एक त्रुटिपूर्ण डेटा (artifact) प्रकाशित करने के बीच का अंतर है।
इस जानकारी के साथ — और केवल इसी के आधार पर — अनुपात इस प्रकार है: 29 जून को marked-short volume, रिपोर्ट किए गए off-exchange volume का 45.85% है, जबकि 26 जून को 46.89% और 30 जून को 48.82% था। 29 जून का आँकड़ा केवल A से S तक के हिस्से को कवर करता है, इसलिए इसे एक अधूरा डेटा मानें। लगभग आधा short share वह सामान्य स्तर है जो हर पड़ोसी सत्र में दिखाई देता है — और दैनिक short volume, short interest नहीं है।
डेटा नोट्स
पूर्ण डेटा नोट्स
- शाम 5 से 6 बजे के बीच उद्धरण (quote) में कमी। SPY का उद्धरण प्रवाह 17:00 ET आधे घंटे (233 अपडेट) में लगभग रुक जाता है और 18:00 (40608) तक फिर से शुरू हो जाता है — यह एक क्रॉस-टिकर फीड/सेशन पैटर्न है, डेटा की कमी नहीं।
- फ्रैक्शनल शेयर्स (Fractional shares) का व्यापक उपयोग। 4.73% प्रिंट्स में गैर-पूर्णांक (non-integer) आकार होते हैं; वॉल्यूम को दशमलव के रूप में जोड़ना आवश्यक है।
- कोड डिक्शनरी विभिन्न प्रकारों के लिए समान IDs का पुन: उपयोग करती है। Id 15 एक बिक्री स्थिति (Market Center Official Close) और एक उद्धरण स्थिति (Closed) दोनों है; यहाँ प्रत्येक डिक्शनरी क्वेरी asset_class = 'stocks' AND type = 'sale_condition' को फ़िल्टर करती है। केवल id द्वारा खोज करने से कोड गलत हो सकते हैं।
- उद्धरण-गुणवत्ता बहिष्करण (Quote-quality exclusions) को इन-लाइन गिना जाता है। Crossed और zero-bid-or-ask की गणना ऊपर दिए गए SPY माइक्रोस्कोप पैनल में दी गई है; कोई भी स्प्रेड सांख्यिकी इसके गिरावट को छिपाती नहीं है।
- Whole-tape स्कैन केवल बैच-ओनली पैनल हैं। यहाँ मापे गए मार्केट-वाइड ब्लॉक्स एक कोल्ड कैश (cold cache) पर लगभग 30 सेकंड तक चलते हैं (टाइम-आउट हुए ब्लॉक को एक बार फिर से प्रयास किया जाता है; वार्म पास सीमा को पार कर लेता है); ये लेखक के समय पर गेटेड रीड-ओनली पाथ के माध्यम से एक बार चलते हैं, पाठकों के लिए लाइव नहीं होते हैं, और संग्रहीत परिणाम ही रिकॉर्ड होते हैं।
कार्यप्रणाली
- Timestamps को UTC में स्टोर किया जाता है और उन्हें raw UTC bounds (29 जून के नियमित घंटे 13:30 से 20:00 UTC तक हैं) के साथ फ़िल्टर किया जाता है; toTimeZone केवल SELECT lists में दिखाई देता है।
- Session type की पुष्टि holiday calendar और देखे गए 390-bar regular window के आधार पर की जाती है — इसे कभी भी मानकर नहीं चलाया जाता।
- "SIP-counted (matched) volume" वह वॉल्यूम है जिसे SIP के अपने condition rules consolidated total में गिनते हैं; exclusion set को dictionary से प्राप्त किया जाता है, जिसे checksum-bounded रखा जाता है, इसे कभी भी hardcoded नहीं किया जाता।
- Per-update spread statistics प्रत्येक NBBO update को समान महत्व देते हैं; time-weighted statistics प्रत्येक quote को उसके टिकने की अवधि के आधार पर महत्व देते हैं। दोनों ही अपने exclusions का खुलासा करते हैं।
- Decimal price/size columns को natively जोड़ा जाता है और किसी भी ratio या price-times-size arithmetic से पहले 64-bit floats में बदल दिया जाता है।
- Tick tables में बिना किसी rolling expiry के पूरा इतिहास सुरक्षित रहता है; ये संग्रहीत, versioned परिणाम ही स्थायी रिकॉर्ड हैं। Warehouse की स्थिति 3 जुलाई, 2026 तक की है।
ऊपर दिया गया प्रत्येक panel एक संग्रहीत object है — जिसमें chart, table और SQL शामिल हैं। इनमें से किसी को भी खोलें, query को कॉपी करें, और Strasmore terminal पर उसका आगे उपयोग करें।