Codici trade condition: quali prezzi aggiornano
Scopri perché tre piattaforme mostrano massimi diversi sullo stesso titolo e come i trade condition codes influenzano high, low, close e volume.
I codici delle condizioni di negoziazione spiegano perché tre piattaforme possono mostrare tre massimi giornalieri diversi per lo stesso titolo, senza che nessuna sia in errore. Ogni print sul consolidated tape riporta questi tag, che determinano se il print può aggiornare l’ultimo prezzo, il massimo e il minimo della giornata, l’apertura ufficiale, la chiusura ufficiale e il volume consolidato. Un trade può essere un’esecuzione effettiva a un prezzo effettivo e restare comunque escluso da quasi tutti questi campi.
Cosa sono i codici delle condizioni di negoziazione?
Un codice della condizione di negoziazione, chiamato anche sale condition, è un tag che la sede di reporting associa a una segnalazione di trade prima che questa raggiunga il tape. Prezzo e quantità indicano che cosa è stato scambiato. La condizione indica di quale tipo di segnalazione si tratta: se è arrivata puntualmente, se il prezzo è stato calcolato a partire da altre esecuzioni invece di essere concordato in quel momento, se il trade è avvenuto fuori dall’orario regolare o se riguardava meno delle 100 azioni di un round lot.
A ogni codice è associato un insieme di flag di idoneità, ed è questo l’aspetto che quasi nessuno vede. Ogni codice è contrassegnato come idoneo o non idoneo per l’ultimo prezzo, per il massimo e il minimo, per l’apertura, per la chiusura e per il volume consolidato. Questi flag operano indipendentemente gli uni dagli altri. Molti print che non possono aggiornare il massimo o il minimo contano comunque nel volume. Per questo il numero di azioni riportato per un titolo e i suoi estremi di prezzo derivano da insiemi di trade diversi ma parzialmente sovrapposti. Accanto al primo insieme di flag ne esiste un secondo: uno disciplina il consolidated tape, l’altro la singola sede di mercato, perché la chiusura ufficiale di una borsa viene calcolata solo sui suoi print.
I codici delle condizioni appartengono a diverse famiglie, ma solo una determina quali campi un trade può aggiornare.
L'esatto SQL dietro ogni numero
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 DESCIl dizionario dei titoli contiene 8 famiglie. La più ampia è la famiglia sale condition, con 40 codici distinti. Le quote conditions descrivono il bid e l’offer, non un trade. Le famiglie degli indicatori segnalano stati come l’entrata in vigore di una short sale restriction. La sale condition family è quella che contiene i flag di idoneità, ed è la famiglia da cui deriva ogni numero riportato sotto.
Che cosa compare effettivamente sul tape
Il pannello qui sotto prende una sessione fissata di giugno 2026: tutti i print su AAPL dall’apertura del premarket alle 4:00 a.m. fino alla chiusura del post-market alle 8:00 p.m., raggruppati in base alla sale condition associata a ciascun print. La finestra è fissata nella query SQL, quindi questi dati descrivono solo quella giornata. Un print può riportare più codici contemporaneamente e molti non ne riportano nessuno. Per questo le colonne non totalizzano 100.
L'esatto SQL dietro ogni numero
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 12Il tag più comune della giornata è stato Odd Lot Trade, associato al 65.83% dei print della sessione e al 6.37% delle azioni scambiate. Confrontate le due colonne riga per riga. Quando la quota di print è molto superiore alla quota di volume, il codice identifica esecuzioni di piccole dimensioni. Quando accade il contrario, il codice identifica un numero ridotto di esecuzioni molto grandi. Contare i print e contare le azioni risponde a domande diverse, e il codice della condizione è ciò che le distingue.
Perché due piattaforme mostrano massimi giornalieri diversi?
Quattro tipi di print sono esclusi, ciascuno, da un insieme diverso di campi.
- Segnalati in ritardo e fuori sequenza. Un trade concordato alle 10:14 e segnalato alle 10:31 raggiunge il tape con il tag out of sequence, oppure con un prezzo basato su un riferimento precedente. Conta nel volume. Non può aggiornare l’ultimo prezzo e non può fissare il massimo della giornata, anche se il suo prezzo è superiore a quello di ogni altro trade della sessione. I block trade negoziati e i print inoltrati tramite una trade reporting facility da sedi di dark pool trading ricadono spesso in questa categoria.
- Prezzo derivato. Un trade a prezzo medio o un’esecuzione VWAP riporta un prezzo calcolato su molte altre esecuzioni, non concordato in quel momento. Viene escluso dall’ultimo prezzo e dagli estremi, perché il prezzo indicato non è mai esistito come quotazione live.
- Odd lot. Meno di 100 azioni. Gli odd lot non sono idonei per l’ultimo prezzo né per il massimo e il minimo, ma contano integralmente nel volume consolidato. Non sono stati riportati sul consolidated tape fino alla fine del 2013. Qualsiasi confronto dei volumi che risalga oltre quel limite mette a confronto due definizioni diverse del termine, come illustrato in dettaglio nella nostra guida all’average daily volume.
- Orari estesi e form T. I print del premarket e del post-close sono contrassegnati e esclusi dall’apertura, dal massimo, dal minimo e dalla chiusura della sessione regolare, pur contando nel volume consolidato. Una piattaforma che li include nel grafico mostra un range giornaliero diverso da una che li esclude. Questo spiega perché il trading after-hours e premarket compare su un grafico ma non su un altro.
Ecco quale quota della sessione rappresenta ciascun gruppo per cinque titoli molto seguiti, nella stessa giornata fissata.
L'esatto SQL dietro ogni numero
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 DESCI print odd lot rappresentavano dal 46.8% al 85.14% di tutti i print sui cinque titoli. Questa colonna segue da vicino il prezzo dell’azione, perché un ordine di valore fisso acquista meno azioni quando il prezzo del titolo è più alto. NVDA era in testa, con 2.4% dei suoi print contrassegnati come segnalati in ritardo o con prezzo derivato e 3.53% contrassegnati come operazioni in orari estesi. Ogni print di tutti e tre i gruppi è un trade effettivo a un prezzo effettivo, ma nessuno può fissare il massimo o il minimo.
Un print che non aggiorna il massimo
Il pannello successivo utilizza la stessa sessione AAPL fissata, suddivide la finestra regolare dalle 9:30 a.m. alle 4:00 p.m. in intervalli di quindici minuti e traccia due massimi per ciascun intervallo. Una linea mostra il prezzo massimo di qualsiasi print. L’altra mostra il prezzo massimo tra i print le cui condizioni li rendono idonei ad aggiornare il massimo.
L'esatto SQL dietro ogni numero
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_timeLa sessione apre a 09:30, con un massimo del tape di $302.07 contro un massimo idoneo di $302.07, e comprende 26 intervalli fino alla chiusura. La linea dell’massimo idoneo non può mai trovarsi sopra quella del tape, perché i print idonei sono un sottoinsieme di tutti i print. Quando le due linee coincidono, ogni print di quel quarto d’ora poteva aggiornare il massimo. Quando la linea superiore si distacca, almeno un print di quell’intervallo è stato eseguito a un prezzo superiore al massimo idoneo, e nessun grafico costruito secondo le regole di idoneità lo mostrerà.
Questo scostamento è la spiegazione corretta della discrepanza. Una fonte che prende il prezzo massimo di ogni print riporta un massimo. Una fonte che applica i flag di idoneità ne riporta un altro. Una fonte che esclude anche il premarket e il post-close ne riporta un terzo. Tutte e tre leggono lo stesso tape.
Quanto è solido il livello di idoneità?
Poco. I flag sono dati di riferimento, e i dati di riferimento vengono corretti. Un provider commerciale di market data ha distribuito una correzione al proprio dizionario delle condizioni, riclassificando l’idoneità di una singola sale condition a determinare l’apertura e la chiusura ufficiali. Nessun trade è cambiato. Il tape di ogni giornata interessata era identico prima e dopo la correzione. È cambiato un solo flag in una tabella di lookup, e con esso sono cambiati l’apertura e la chiusura ufficiali riportate da ogni grafico e backtest che utilizzava quel dizionario.
Considerate l’OHLC di un singolo vendor come una lettura del tape, non come un fatto assoluto. Quando due fonti non coincidono, verificate quali regole di idoneità ha applicato ciascuna. I Delayed and consolidated quote feeds aggiungono una seconda versione dello stesso problema, legata alla tempistica e non all’idoneità.
Dove si trova l’elenco autorevole dei codici delle condizioni di negoziazione
I tape operano nell’ambito di due piani del national market system: il CTA Plan per i titoli quotati al NYSE e l’UTP Plan per quelli quotati al Nasdaq. Ciascun piano pubblica le specifiche delle sale condition del tape che amministra. Queste specifiche sono la fonte autorevole. Tutto ciò che viene elaborato a valle, compresi gli identificativi alla base dei pannelli sopra, è una mappatura effettuata da un vendor nella propria numerazione. L’id di un codice assegnato da un provider non indica necessariamente la stessa condizione presso un altro. Imparate le categorie, non i numeri. Le categorie sono stabili da anni. I numeri sono una tabella di lookup, e le tabelle di lookup vengono modificate.
Note sui dati
I gruppi di condizioni nei pannelli sopra sono costruiti direttamente dal dizionario, non da id numerici codificati manualmente. Ogni gruppo è identificato tramite una corrispondenza testuale nella sale condition family: odd lot, form T ed extended trading hours, out of sequence, prior reference price, derivatively priced, average price, price variation e seller. Aprite la query SQL sotto ogni pannello per leggere i pattern esatti. I codici non sono mutuamente esclusivi e un singolo print può riportarne diversi. Per questo le percentuali dei gruppi si sovrappongono e non totalizzano la sessione. Entrambi i pannelli AAPL e il pannello sui cinque titoli coprono una singola sessione fissata di giugno 2026, indicata nella query SQL. Di conseguenza, nessun dato della pagina cambia con l’arrivo di nuove sessioni.
FAQ
Che cos’è un codice della condizione di negoziazione?
È un tag associato a una segnalazione di trade sul consolidated tape, che descrive il tipo di segnalazione, per esempio segnalata in ritardo, con prezzo derivato, odd lot o in orari estesi. Ogni codice contiene flag che indicano se il trade può aggiornare l’ultimo prezzo, il massimo e il minimo, l’apertura, la chiusura e il volume consolidato.
Perché due siti mostrano massimi giornalieri diversi per lo stesso titolo?
Ciascuno applica un insieme diverso di regole di idoneità agli stessi print. Uno può prendere il prezzo massimo di qualsiasi trade segnalato, un altro può escludere i print i cui codici di condizione impediscono di fissare il massimo, e un terzo può escludere anche le sessioni premarket e post-close. Tutti leggono lo stesso tape.
I trade odd lot contano nel volume?
Sì. Un odd lot, cioè meno di 100 azioni, conta nel volume consolidato, ma non può aggiornare l’ultimo prezzo né il massimo e il minimo della giornata. Gli odd lot non sono stati riportati sul consolidated tape prima della fine del 2013. I confronti dei volumi su periodi lunghi attraversano quindi un cambiamento di definizione in quel punto.
I trade after-hours contano nel massimo e nel minimo giornalieri?
Non nel massimo e nel minimo della sessione regolare. I print del premarket e del post-close riportano una condizione extended hours o form T, che li esclude dall’apertura, dal massimo, dal minimo e dalla chiusura della sessione regolare, pur facendoli contare nel volume consolidato della giornata.
Dove si trova l’elenco ufficiale dei codici delle sale condition?
Il CTA Plan e l’UTP Plan pubblicano le specifiche delle sale condition per i tape che amministrano, e questi documenti sono la fonte autorevole. I feed dei vendor rinumerano le condizioni nel proprio spazio di id. Per questo un codice numerico di un provider non corrisponde necessariamente allo stesso numero presso un altro.
Ogni pannello include la query SQL che lo ha prodotto. Apritene uno, sostituite il ticker o la data ed eseguite la stessa analisi delle condizioni per qualsiasi sessione sul terminale Strasmore.