Códigos de negociação: como afetam os preços
Entenda por que plataformas mostram máximas diferentes e como os códigos de condição definem último preço, máxima, mínima, fechamento e volume.
Os códigos de condição de negociação explicam por que três plataformas podem mostrar três máximas diárias diferentes para a mesma ação, sem que nenhuma esteja errada. Cada print no consolidated tape traz essas etiquetas, e elas determinam se o print pode atualizar o último preço, a máxima e a mínima do dia, a abertura oficial, o fechamento oficial e o volume consolidado. Uma operação pode ser uma execução legítima a um preço efetivo e, ainda assim, ficar impedida de atualizar quase todos esses campos.
O que são códigos de condição de negociação?
Um código de condição de negociação, também chamado de condição de venda, é uma etiqueta que o mercado responsável pelo reporte associa ao relatório da operação antes de enviá-lo ao tape. Preço e quantidade informam o que foi negociado. A condição informa que tipo de relatório é aquele: se chegou no prazo, se o preço foi calculado a partir de outras execuções em vez de ter sido acordado naquele instante, se a operação ocorreu fora do horário regular ou se envolveu menos de 100 ações, o chamado round lot.
Cada código vem acompanhado de um conjunto de flags de elegibilidade, e essa é a parte que quase ninguém vê. Cada código é classificado como elegível ou inelegível para o último preço, para a máxima e a mínima, para a abertura, para o fechamento e para o volume consolidado. Essas flags funcionam de forma independente. Muitos prints que não podem alterar a máxima ou a mínima ainda entram no volume. Por isso, a quantidade de ações reportada e os extremos de preço de uma ação são calculados a partir de conjuntos de operações que se sobrepõem apenas parcialmente. Há ainda um segundo conjunto de flags: um rege o consolidated tape e o outro rege cada centro de mercado individual, pois o fechamento oficial de uma bolsa é calculado apenas a partir dos seus próprios prints.
Os códigos de condição são organizados em famílias, mas apenas uma delas determina o que uma operação pode atualizar.
O SQL exato por trás de cada número
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 DESCO dicionário de ações contém 8 famílias. A maior é a família sale condition, com 40 códigos distintos. As condições de cotação descrevem a oferta de compra e a oferta de venda, não uma operação. As famílias de indicadores sinalizam situações como a vigência de uma restrição a short sale. A família de condições de venda é a que contém as flags de elegibilidade, e é dela que vem cada número apresentado abaixo.
O que efetivamente aparece no tape
O painel abaixo usa uma sessão fixa de junho de 2026: todos os prints de AAPL desde a abertura do premarket, às 4h, até o encerramento do post-market, às 20h, agrupados pela condição de venda de cada print. A janela está definida no SQL. Portanto, os números descrevem apenas aquele dia. Um print pode trazer vários códigos ao mesmo tempo, e muitos não trazem nenhum. Por isso, as colunas não somam 100%.
O SQL exato por trás de cada número
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 12A etiqueta mais comum do dia foi Odd Lot Trade, presente em 65.83% dos prints da sessão e em 6.37% das ações negociadas. Compare as duas colunas linha a linha. Quando a participação nos prints supera amplamente a participação no volume, o código identifica execuções pequenas. Quando ocorre o contrário, o código identifica algumas operações muito grandes. Contar prints e contar ações responde a perguntas diferentes. O código de condição é o que faz essa separação.
Por que duas plataformas mostram máximas diárias diferentes?
Quatro tipos de print são excluídos de subconjuntos diferentes de campos.
- Reportado com atraso e fora de sequência. Uma operação acordada às 10h14 e reportada às 10h31 chega ao tape identificada como fora de sequência ou com preço baseado em uma referência anterior. Ela entra no volume. Não pode atualizar o último preço nem estabelecer a máxima do dia, mesmo que seu preço esteja acima de todas as outras operações da sessão. block trades negociados e prints encaminhados por uma trade reporting facility de plataformas de dark pool trading aparecem com frequência nessa categoria.
- Com preço derivado. Uma operação a preço médio ou um preenchimento a VWAP tem um preço calculado a partir de várias outras execuções, em vez de acordado naquele momento. Ela é excluída do último preço e dos extremos, pois o preço exibido nunca existiu como uma cotação disponível em tempo real.
- Odd lot. Menos de 100 ações. Odd lots são inelegíveis para o último preço e para a máxima e a mínima, mas entram integralmente no volume consolidado. Eles só passaram a ser reportados no consolidated tape no fim de 2013. Qualquer comparação de volume que recue além desse marco está comparando duas definições diferentes do termo, como explicamos em nosso guia sobre volume médio diário.
- Horário estendido e form T. Prints do premarket e do post-market recebem essas etiquetas e ficam fora da abertura, da máxima, da mínima e do fechamento da sessão regular, embora continuem entrando no volume consolidado. Uma plataforma que os inclui no gráfico mostra uma faixa diária diferente da plataforma que os exclui. Esse é o mecanismo pelo qual negociação no after-hours e no premarket aparece em um gráfico, mas não em outro.
Veja quanto cada categoria representa da sessão em cinco ações conhecidas, no mesmo dia fixo.
O SQL exato por trás de cada número
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 DESCOs prints de odd lot representaram de 46.8% a 85.14% de todos os prints das cinco ações. Essa coluna acompanha de perto o preço da ação, porque uma ordem de valor fixo compra menos ações quando o preço é mais alto. NVDA ficou no topo, com 2.4% de seus prints identificados como reportados com atraso ou com preço derivado e 3.53% identificados como operações em horário estendido. Todos os prints das três categorias são operações reais a preços reais. Ainda assim, nenhum deles pode estabelecer a máxima ou a mínima.
Um print que não eleva a máxima
O painel seguinte usa a mesma sessão fixa de AAPL, divide o intervalo regular, das 9h30 às 16h, em blocos de quinze minutos e traça duas máximas para cada bloco. Uma linha usa o maior preço de qualquer print. A outra usa o maior preço entre os prints cujas condições permitem estabelecer a máxima.
O SQL exato por trás de cada número
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_timeA sessão abre em 09:30, com máxima de $302.07 no tape contra máxima elegível de $302.07, e percorre 26 blocos até o fechamento. A linha elegível nunca pode ficar acima da linha do tape, porque os prints elegíveis são um subconjunto de todos os prints. Quando as duas coincidem, todos os prints daquele intervalo de quinze minutos puderam estabelecer a máxima. Quando a linha superior se afasta, pelo menos um print daquele intervalo foi negociado acima do maior preço elegível. Nenhum gráfico que aplique as regras de elegibilidade mostrará esse preço.
Essa diferença é a explicação correta para a divergência. Uma fonte que usa o preço máximo de todos os prints informa uma máxima. Uma fonte que aplica as flags de elegibilidade informa outra. Uma fonte que também exclui o premarket e o post-market informa uma terceira. As três estão lendo o mesmo tape.
Quão confiável é a camada de elegibilidade?
Ela é frágil. As flags são dados de referência, e dados de referência são corrigidos. Um provedor comercial de dados de mercado corrigiu seu próprio dicionário de condições e reclassificou a elegibilidade de uma única condição de venda para estabelecer a abertura oficial e o fechamento oficial. Nenhuma operação mudou. O tape de todos os dias afetados era idêntico antes e depois da correção. O que mudou foi uma flag em uma tabela de referência. Com ela, mudaram também a abertura e o fechamento oficiais exibidos por todos os gráficos e backtests baseados naquele dicionário.
Trate o OHLC de um único fornecedor como uma leitura do tape, não como um fato absoluto sobre ele. Quando duas fontes divergirem, verifique quais regras de elegibilidade cada uma aplicou. Feeds de cotações atrasadas e consolidadas acrescentam uma segunda versão do mesmo problema, desta vez relacionada ao timing, não à elegibilidade.
Onde está a lista oficial de códigos de condição de negociação
Os tapes operam sob dois planos do National Market System: o CTA Plan, para valores mobiliários listados na NYSE, e o UTP Plan, para os listados na Nasdaq. Cada plano publica a especificação das condições de venda do tape que administra. Essas especificações são a autoridade. Todo o restante, incluindo os ids por trás dos painéis acima, é um mapeamento feito por cada fornecedor para sua própria numeração. O id de um código em um provedor não necessariamente significa a mesma coisa em outro. Aprenda as categorias, não os números. As categorias permanecem estáveis há anos. Os números são uma tabela de referência, e tabelas de referência são editadas.
Notas sobre os dados
As categorias dos painéis acima são construídas a partir do próprio dicionário, não de ids fixos. Cada categoria é definida por uma correspondência de nome dentro da família de condições de venda: odd lot, form T e horário de negociação estendido, fora de sequência, preço de referência anterior, preço derivado, preço médio, variação de preço e vendedor. Abra o SQL de qualquer painel para consultar os padrões exatos. Os códigos não são mutuamente exclusivos, e um único print pode trazer vários. Por isso, os percentuais das categorias se sobrepõem e não somam o total da sessão. Os dois painéis de AAPL e o painel com cinco ações cobrem uma única sessão fixa de junho de 2026, definida no SQL. Portanto, nada nesta página muda com a chegada de novas sessões.
Perguntas frequentes
O que é um código de condição de negociação?
É uma etiqueta anexada a um relatório de operação no consolidated tape que descreve o tipo de relatório. Alguns exemplos são operação reportada com atraso, com preço derivado, odd lot ou em horário estendido. Cada código traz flags que indicam se a operação pode atualizar o último preço, a máxima e a mínima, a abertura, o fechamento e o volume consolidado.
Por que dois sites mostram máximas diárias diferentes para a mesma ação?
Cada site aplica um conjunto diferente de regras de elegibilidade aos mesmos prints. Um pode usar o maior preço de qualquer operação reportada. Outro pode excluir os prints cujos códigos de condição os impedem de estabelecer a máxima. Um terceiro pode também excluir as sessões de premarket e post-market. Todos estão lendo o mesmo tape.
Operações de odd lot entram no volume?
Sim. Um odd lot, ou seja, uma operação com menos de 100 ações, entra no volume consolidado, mas não pode atualizar o último preço nem a máxima e a mínima do dia. Odd lots não eram reportados no consolidated tape antes do fim de 2013. Portanto, comparações de volume de longo prazo atravessam uma mudança de definição nesse ponto.
Operações no after-hours entram na máxima e na mínima do dia?
Não na máxima e na mínima da sessão regular. Prints do premarket e do post-market recebem a condição de horário estendido ou form T. Isso os exclui da abertura, da máxima, da mínima e do fechamento da sessão regular, embora continuem entrando no volume consolidado do dia.
Onde está a lista oficial de códigos de condição de venda?
O CTA Plan e o UTP Plan publicam as especificações das condições de venda dos tapes que administram. Esses documentos são a autoridade. Os feeds dos fornecedores renumeram as condições em seu próprio espaço de ids. Por isso, um código numérico de um provedor não necessariamente corresponde ao mesmo número em outro.
Cada painel desta página vem acompanhado do SQL que o produziu. Abra um deles, troque o ticker ou a data e execute a mesma análise de condições para qualquer sessão no terminal da Strasmore.