Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-08-08

Trade Condition Codes: दैनिक उच्चांक का बदलतो?

Trade condition codes ठरवतात की कोणता print high, low, close आणि volume अपडेट करेल. त्यामुळे एकाच स्टॉकसाठी प्लॅटफॉर्मनुसार वेगवेगळे दैनिक उच्चांक दिसू शकतात.

Trade condition codesमुळेच एकाच स्टॉकसाठी तीन प्लॅटफॉर्मवर तीन वेगवेगळे दैनिक उच्चांक दिसू शकतात आणि त्यापैकी एकही चुकीचा नसतो. Consolidated tapeवरील प्रत्येक printसोबत हे tags असतात. एखाद्या printमुळे last price, दिवसाचा high आणि low, अधिकृत open, अधिकृत close आणि consolidated volume total अपडेट होऊ शकतो की नाही, हे tags ठरवतात. एखादा व्यवहार खऱ्या किंमतीवर झालेला वास्तविक execution असू शकतो, तरीही त्याला यापैकी जवळजवळ कोणतेही field अपडेट करण्याची परवानगी नसते.

Trade condition codes म्हणजे काय?

Trade condition code, ज्याला sale condition असेही म्हणतात, हा reporting venueने trade report tapeवर पाठवताना जोडलेला tag असतो. Price आणि sizeमधून काय trade झाले ते समजते. Conditionमधून reportचा प्रकार समजतो: तो वेळेवर आला का, त्याची किंमत त्या क्षणी मान्य केलेली नसून इतर executionsवरून मोजली आहे का, व्यवहार regular hoursच्या बाहेर झाला का, आणि त्यात round lotमधील 100 sharesपेक्षा कमी shares आहेत का.

प्रत्येक codeसोबत eligibility flagsचा संच असतो. हा भाग जवळजवळ कोणालाच दिसत नाही. प्रत्येक code last price, high आणि low, open, close आणि consolidated volumeसाठी eligible किंवा ineligible म्हणून चिन्हांकित केलेला असतो. हे flags एकमेकांपासून स्वतंत्रपणे लागू होतात. High किंवा lowला स्पर्श करू न शकणारे अनेक prints volumeमध्ये मात्र मोजले जातात. म्हणून स्टॉकची reported share count आणि reported price extremes हे एकमेकांवर अंशतः जुळणाऱ्या, पण वेगवेगळ्या tradesच्या संचांवर आधारित असतात. यासोबत flagsचा आणखी एक संच असतो: एक संच consolidated tapeसाठी आणि दुसरा individual market centerसाठी. कारण exchangeचा स्वतःचा अधिकृत close फक्त त्याच्या स्वतःच्या printsवरून मोजला जातो.

Condition codes वेगवेगळ्या familiesमध्ये येतात. Trade काय अपडेट करू शकतो, हे फक्त एका familyमधून ठरते.

क्वेरीUS समभागांसाठी परिभाषित केलेली कंडिशन कोड कुटुंबे
प्रत्येक आकड्यामागील अचूक 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
Run this yourself

Stocks dictionaryमध्ये 8 families आहेत. त्यातील सर्वात मोठी family sale condition असून त्यात 40 स्वतंत्र codes आहेत. Quote conditions tradeऐवजी bid आणि offerची स्थिती दर्शवतात. Indicator families short sale restriction लागू असल्यासारख्या स्थिती दाखवतात. Sale condition familyमध्ये eligibility flags असतात. खालील प्रत्येक आकडा याच familyमधून घेतलेला आहे.

Tapeवर प्रत्यक्षात काय नोंदवले जाते

खालील panelमध्ये June 2026मधील एक निश्चित session घेतला आहे. 4:00 a.m.च्या premarket openपासून 8:00 p.m.च्या post-market trading समाप्तीपर्यंतचे प्रत्येक AAPL print, त्यासोबत असलेल्या sale conditionनुसार गटबद्ध केले आहे. SQLमध्ये ही वेळ निश्चित केली आहे. त्यामुळे हे आकडे फक्त त्या दिवसाचे आहेत. एखाद्या printसोबत एकाच वेळी अनेक codes असू शकतात आणि अनेक printsसोबत एकही code नसतो. म्हणून या columnsची बेरीज 100 होत नाही.

क्वेरीएक AAPL सत्र; प्रत्येक व्यवहाराचा प्रिंट sale condition नुसार गटबद्ध
प्रत्येक आकड्यामागील अचूक 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
Run this yourself

त्या दिवशी सर्वाधिक सामान्य tag Odd Lot Trade होता. तो sessionमधील 65.83% prints आणि 6.37% sharesवर होता. प्रत्येक rowमध्ये print share आणि volumeमधील share यांची तुलना करा. Print share volume shareपेक्षा खूप मोठा असेल, तर त्या codeने लहान executions दर्शवले आहेत. उलट असेल, तर त्या codeने मोजके पण अतिशय मोठे व्यवहार दर्शवले आहेत. Prints मोजणे आणि shares मोजणे हे वेगवेगळ्या प्रश्नांची उत्तरे देतात. त्यांच्यातील फरक condition code स्पष्ट करतो.

दोन प्लॅटफॉर्मवर वेगवेगळे दैनिक उच्चांक का दिसतात?

चार प्रकारचे prints वेगवेगळ्या fieldsमधून वगळले जातात.

  • उशिरा reported आणि out of sequence. 10:14 वाजता मान्य झालेला आणि 10:31 वाजता reported केलेला trade tapeवर out of sequence किंवा prior referenceवर आधारित किंमत म्हणून tag होतो. तो volumeमध्ये मोजला जातो. मात्र तो last price सेट करू शकत नाही आणि त्याची किंमत sessionमधील इतर प्रत्येक tradeपेक्षा जास्त असली, तरी दिवसाचा high वाढवू शकत नाही. Negotiated block trades आणि dark pool trading venuesमधून trade reporting facilityमार्फत पाठवलेले prints येथे अनेकदा येतात.
  • Derivatively priced. Average price trade किंवा VWAP fillची किंमत त्या क्षणी मान्य केलेली नसते. ती इतर अनेक executionsवरून मोजलेली असते. त्यामुळे असा trade last price आणि price extremesमधून वगळला जातो, कारण त्यात दाखवलेली किंमत live quote म्हणून कधी अस्तित्वात आलेली नसते.
  • Odd lot. 100 sharesपेक्षा कमी shares. Odd lots last price तसेच high आणि lowसाठी ineligible असतात, पण consolidated volumeमध्ये पूर्णपणे मोजले जातात. 2013च्या अखेरपर्यंत ते consolidated tapeवर reported केले जात नव्हते. त्या कालमर्यादेपूर्वीचा volume comparison म्हणजे या शब्दाच्या दोन वेगवेगळ्या व्याख्यांची तुलना आहे. याचे सविस्तर स्पष्टीकरण आमच्या average daily volume मार्गदर्शिकेत आहे.
  • Extended hours आणि form T. Premarket आणि post-close printsना tags लावले जातात. ते regular sessionच्या open, high, low आणि closeमधून वगळले जातात, पण consolidated volumeमध्ये मोजले जातात. त्यांना chartमध्ये समाविष्ट करणारा प्लॅटफॉर्म आणि त्यांना वगळणारा प्लॅटफॉर्म वेगवेगळे daily ranges दाखवतात. म्हणूनच after-hours and premarket trading एका chartवर दिसते आणि दुसऱ्यावर दिसत नाही.

पाच परिचित कंपन्यांसाठी, याच निश्चित दिवशी, प्रत्येक bucketचा sessionमधील वाटा पुढीलप्रमाणे आहे.

क्वेरीकिंमत-अनर्ह कंडिशन असलेल्या सत्रातील प्रिंट्सचा हिस्सा
प्रत्येक आकड्यामागील अचूक 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 DESC
Run this yourself

पाचही नावांमधील एकूण printsपैकी odd lot printsचा वाटा 46.8% ते 85.14% इतका होता. हा column share priceशी जवळचा संबंध दाखवतो, कारण समान डॉलरच्या orderमधून जास्त किंमतीच्या नावात कमी shares खरेदी होतात. NVDAचा वाटा सर्वाधिक होता. त्यातील 2.4% printsना late किंवा derivatively priced tag होता आणि 3.53% printsना extended hours tag होता. या तिन्ही bucketsमधील प्रत्येक print हा वास्तविक किंमतीवर झालेला वास्तविक trade आहे. तरीही त्यांपैकी प्रत्येकाला high आणि low सेट करण्यास मनाई आहे.

High वाढवू न शकणारा print

पुढील panelमध्ये त्याच निश्चित AAPL sessionमधील regular 9:30 a.m. ते 4:00 p.m. कालावधीचे पंधरा-मिनिटांचे buckets केले आहेत. प्रत्येक bucketसाठी दोन highs दाखवले आहेत. एका lineमध्ये कोणत्याही printची सर्वाधिक किंमत घेतली आहे. दुसऱ्या lineमध्ये high सेट करण्यास eligible असलेल्या conditionsच्या printsमधील सर्वाधिक किंमत घेतली आहे.

क्वेरीत्याच AAPL सत्राच्या उच्चांकाच्या दोन आवृत्त्या; दर पंधरा मिनिटांनी
प्रत्येक आकड्यामागील अचूक 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
Run this yourself

Session 09:30 येथे सुरू होतो. Tape high $302.07 आहे, तर eligible high $302.07 आहे. Closeपर्यंत 26 buckets आहेत. Eligible prints हे सर्व printsचा उपसंच असल्यामुळे eligible line कधीही tape lineच्या वर जाऊ शकत नाही. दोन्ही lines एकमेकांवर असतील, तर त्या पंधरा मिनिटांत प्रत्येक printला high सेट करण्याची परवानगी होती. वरची line वेगळी होत असेल, तर त्या कालावधीत किमान एका printचा trade सर्वोच्च eligible priceपेक्षा जास्त किंमतीवर झाला आहे. Eligibility rules वापरून तयार केलेल्या कोणत्याही chartमध्ये तो print दिसणार नाही.

हा फरकच या विसंगतीचे अचूक कारण सांगतो. प्रत्येक printची maximum price घेणारा source एक high report करतो. Eligibility flags लागू करणारा source दुसरा high report करतो. Premarket आणि post-close sessions वगळणारा source तिसरा high report करतो. तिन्ही sources तोच tape वाचत असतात.

Eligibility layer किती विश्वासार्ह आहे?

मर्यादित. हे flags reference data आहेत आणि reference dataमध्ये दुरुस्ती केली जाऊ शकते. एका commercial market data providerने स्वतःच्या condition dictionaryमध्ये बदल केला. त्यात एका sale conditionची official open आणि official close सेट करण्याची eligibility पुन्हा वर्गीकृत करण्यात आली. कोणताही trade बदलला नाही. दुरुस्तीपूर्वी आणि दुरुस्तीनंतर प्रभावित प्रत्येक दिवसाचा tape सारखाच होता. Lookup tableमधील फक्त एक flag बदलला. त्यासोबत त्या dictionaryवर आधारित प्रत्येक chart आणि backtestमध्ये दाखवला जाणारा official open आणि close बदलला.

कोणत्याही एका vendorचा OHLC हा tapeचे एक वाचन समजा; tapeबद्दलचा अंतिम तथ्य म्हणून त्याकडे पाहू नका. दोन sourcesमध्ये फरक असल्यास, प्रत्येकाने कोणते eligibility rules लागू केले ते तपासा. Delayed and consolidated quote feeds याच समस्येची दुसरी आवृत्ती timingच्या पातळीवर आणतात; eligibilityच्या पातळीवर नाही.

अधिकृत trade condition code list कुठे आहे?

Tapes दोन national market system plansअंतर्गत चालतात. NYSE-listed securitiesसाठी CTA Plan आणि Nasdaq-listed securitiesसाठी UTP Plan लागू आहे. प्रत्येक plan त्याच्या अखत्यारीतील tapeसाठी sale condition specification प्रकाशित करतो. ही specificationsच अधिकृत मानली जातात. Panelsमागील id numbersसह downstream माहिती ही vendorsनी या specificationsचे स्वतःच्या numberingमध्ये केलेले mapping असते. एका providerचा code id दुसऱ्या providerकडे त्याच अर्थाचा असेलच असे नाही. Numbersपेक्षा categories समजून घ्या. Categories अनेक वर्षांपासून स्थिर आहेत. Numbers lookup tableचा भाग आहेत आणि lookup tablesमध्ये दुरुस्ती केली जाते.

डेटा टिपा

वरील panelsमधील condition buckets hardcoded id numbersवरून नव्हे, तर dictionaryवरून तयार केले आहेत. प्रत्येक bucket sale condition familyमधील name matchवर आधारित आहे: odd lot, form T आणि extended trading hours, out of sequence, prior reference price, derivatively priced, average price, price variation आणि seller. अचूक patterns पाहण्यासाठी कोणत्याही panelखालील SQL उघडा. Codes परस्परविसंगत नाहीत. एका printसोबत अनेक codes असू शकतात. त्यामुळे bucket percentages एकमेकांवर overlap होतात आणि sessionची बेरीज 100 होत नाही. दोन्ही AAPL panels आणि five-name panelमध्ये June 2026मधील SQLमध्ये निश्चित केलेले एकच session घेतले आहे. त्यामुळे नवीन sessions आल्यावर या पृष्ठावरील कोणताही आकडा बदलत नाही.

वारंवार विचारले जाणारे प्रश्न

Trade condition code म्हणजे काय?

Consolidated tapeवरील trade reportला जोडलेला हा tag असतो. Reportचा प्रकार, उदाहरणार्थ late reported, derivatively priced, odd lot किंवा extended hours, तो दर्शवतो. प्रत्येक codeसोबत flags असतात. त्या tradeमुळे last price, high आणि low, open, close आणि consolidated volume अपडेट होऊ शकतो की नाही, हे flags ठरवतात.

एकाच स्टॉकसाठी दोन websites वेगवेगळे दैनिक उच्चांक का दाखवतात?

प्रत्येक website त्याच printsवर वेगवेगळे eligibility rules लागू करते. एखादी website reported झालेल्या कोणत्याही tradeची सर्वाधिक किंमत घेऊ शकते. दुसरी high सेट करण्यास अडथळा आणणाऱ्या condition codes असलेले prints वगळू शकते. तिसरी premarket आणि post-close sessionsही वगळू शकते. तिन्ही websites तोच tape वाचत असतात.

Odd lot trades volumeमध्ये मोजले जातात का?

होय. Odd lot म्हणजे 100 sharesपेक्षा कमी shares. तो consolidated volumeमध्ये मोजला जातो, पण last price किंवा दिवसाचा high आणि low सेट करण्यासाठी ineligible असतो. 2013च्या अखेरपूर्वी odd lots consolidated tapeवर reported केले जात नव्हते. त्यामुळे दीर्घकालीन volume comparisonsमध्ये त्या काळात व्याख्या बदलते.

After-hours trades daily high आणि lowमध्ये मोजले जातात का?

Regular sessionच्या high आणि lowमध्ये नाही. Premarket आणि post-close printsना extended hours किंवा form T condition असतो. त्यामुळे ते regular sessionच्या open, high, low आणि closeमधून वगळले जातात. मात्र दिवसाच्या consolidated volumeमध्ये ते मोजले जातात.

Sale condition codesची अधिकृत list कुठे आहे?

CTA Plan आणि UTP Plan त्यांच्या अखत्यारीतील tapesसाठी sale condition specifications प्रकाशित करतात. ही documents अधिकृत मानली जातात. Vendor feeds conditionsना त्यांच्या स्वतःच्या id spaceमध्ये पुन्हा क्रमांक देतात. त्यामुळे एका providerचा numeric code दुसऱ्या providerकडील त्याच संख्येशी जुळेलच असे नाही.


येथील प्रत्येक panel तयार करणारा SQLसोबत दिलेला आहे. कोणताही panel उघडा, ticker किंवा date बदला आणि Strasmore terminalवर कोणत्याही sessionसाठी हाच condition breakdown चालवा.

#market data#trade conditions#consolidated tape#volume#ohlc