交易条件代码解释:高低点和成交量如何更新
了解交易条件代码如何决定哪些成交能更新最高价、最低价、开收盘价和成交量,并解释同一股票在不同平台显示不同高点的原因。
交易条件代码解释了为什么三个平台会显示同一只股票三个不同的日内高点,而且它们都可能没有错。合并行情带上的每笔成交都带有这些标签。标签决定该成交能否更新最新价、当日高低价、正式开盘价、正式收盘价以及合并成交量。一笔成交可以是真实执行、价格也是真实价格,但仍可能无法计入其中几乎所有字段。
什么是交易条件代码?
交易条件代码也称成交条件,是报告场所附加在成交报告上的标签,随后该报告会进入行情带。价格和数量说明成交了什么。交易条件则说明这是什么类型的报告:是否及时上报,价格是否由其他成交计算得出而不是当时协商确定,成交是否发生在常规交易时段之外,以及成交数量是否少于一手的100股。
每个代码都附带一组资格标志,而这恰恰是几乎没人能看到的部分。每个代码都会标明是否有资格更新最新价、最高价和最低价、开盘价、收盘价以及合并成交量。这些标志彼此独立。许多无法触及最高价或最低价的成交仍会计入成交量。因此,股票报告中的成交股数与价格极值,来自相互重叠但并不相同的成交集合。除第一组标志外,还有第二组并行标志:一组适用于合并行情带,另一组适用于单个市场中心,因为交易所自己的正式收盘价只根据该交易所自身的成交计算。
交易条件代码分为多个类别,但只有其中一个类别决定成交可以更新哪些字段。
每个数字背后的完整 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股票代码字典包含 8 个类别。其中最大的是 sale condition 类别,共有 40 个不同代码。报价条件描述的是买价和卖价,而不是成交。指标类别用于标记卖空限制生效等状态。成交条件类别携带资格标志,下面所有数字都来自这一类别。
行情带上实际记录了什么
下方面板选取2026年6月一个固定交易日:从凌晨4:00盘前开盘到晚上8:00盘后交易结束的所有 AAPL 成交,并按每笔成交所带的成交条件分组。时间窗口已固定在 SQL 中,因此这些数字只描述这一天。单笔成交可以同时带有多个代码,也有许多成交不带任何代码,所以各列相加不会等于100%。
每个数字背后的完整 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当天最常见的标签是 Odd Lot Trade,覆盖该交易时段成交笔数的 65.83% 和成交股数的 6.37%。逐行对比这两列。如果成交笔数占比明显高于成交量占比,说明该代码对应的是小额成交。反之,则说明少数几笔成交规模很大。成交笔数和成交股数回答的是不同问题,而交易条件代码正是区分二者的依据。
为什么两个平台会显示不同的日内高点?
有四类成交分别会被排除在不同字段之外。
- 延迟上报且顺序错乱。 一笔成交在10:14达成、10:31才上报时,会被标记为顺序错乱,或按此前参考价格计价。它会计入成交量,但不能更新最新价,也不能抬高当日最高价,即使其价格高于该交易日其他所有成交。协商完成的大宗交易,以及通过交易报告机制从暗池交易场所路由的成交,往往属于这一类。
- 衍生定价。 平均价成交或 VWAP 成交的价格,是根据其他多笔成交计算得出,而不是当时协商确定。因此,这类成交不会计入最新价或价格极值,因为其显示的价格从未作为实时报价存在。
- 零股。 成交数量少于100股。零股没有资格更新最新价、最高价和最低价,但会完整计入合并成交量。直到2013年末,零股才被报告到合并行情带。任何回溯到这一时间点之前的成交量比较,实际上比较的是两个不同定义下的成交量;我们的日均成交量指南对此有详细说明。
- 延长交易时段和 T 型成交。 盘前和收盘后的成交会带有相应标签,并被排除在常规交易时段的开盘价、最高价、最低价和收盘价之外,但仍计入合并成交量。显示这些成交的平台,其日内价格区间会不同于不显示这些成交的平台。这正是盘后及盘前交易会出现在一个图表上、却不出现在另一个图表上的原因。
下面显示同一固定交易日中,五只知名股票的各类成交占该交易时段的比例。
每个数字背后的完整 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在五只股票中,零股成交占全部成交笔数的 46.8% 至 85.14%。这一列与股价高度相关,因为在固定美元金额下单时,股价越高,买到的股数越少。NVDA 的占比最高,其成交笔数中有 2.4% 被标记为延迟上报或衍生定价,另有 3.53% 被标记为延长交易时段。三个类别中的每一笔都是以真实价格完成的真实交易,但都不能用来设定最高价或最低价。
一笔不能抬高最高价的成交
下方面板继续采用同一个固定的 AAPL 交易日,并将上午9:30至下午4:00的常规交易时段切分为每15分钟一个区间,为每个区间绘制两个最高价。一条线取所有成交中的最高价。另一条线只取那些根据交易条件有资格设定最高价的成交中的最高价。
每个数字背后的完整 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交易时段以 09:30 开始。行情带最高价为 $302.07,有资格计入的最高价为 $302.07,并经过 26 个区间后收盘。有资格计入的最高价不可能高于行情带最高价,因为前者只是全部成交的子集。如果两条线重合,说明该15分钟内的每笔成交都可以用来设定最高价。如果上方的线与下方的线分离,说明该区间至少有一笔成交高于有资格计入的最高价;任何遵循资格规则绘制的图表都不会显示这笔价格。
这一差异就是最直接的答案。取所有成交最高价的数据源会报告一个最高价。应用资格标志的数据源会报告另一个最高价。若数据源还剔除盘前和收盘后交易时段,则会报告第三个最高价。三者读取的都是同一条行情带。
资格标志的可靠性如何?
并不稳固。这些标志属于参考数据,而参考数据可能被修正。一家商业市场数据提供商曾修订自己的交易条件字典,将某一成交条件是否有资格设定正式开盘价和正式收盘价重新分类。没有任何成交发生变化。修订前后,所有受影响交易日的行情带完全相同。变化的只是查找表中的一个标志,以及由此变化而来的正式开盘价和正式收盘价;所有依赖该字典的图表和回测此前都在使用这些价格。
应将任何单一供应商提供的 OHLC 视为对行情带的一种解读,而不是行情带本身的事实。当两个数据源出现差异时,应先确认各自采用了哪些资格规则。延迟及合并报价源还会在资格规则之外,因时间差异叠加另一层相同问题。
权威交易条件代码列表在哪里?
行情带由两项全国市场系统计划管理:NYSE 上市证券适用 CTA Plan,Nasdaq 上市证券适用 UTP Plan。两项计划分别发布其管理行情带所适用的成交条件规范。这些规范具有权威性。下游数据,包括上述面板使用的代码编号,都是供应商将规范映射到自有编号体系后的结果。同一代码编号在不同供应商处不一定代表相同含义。应掌握类别,而不是死记编号。类别多年来基本稳定。编号只是查找表,而查找表可能被修改。
数据说明
上述面板中的交易条件类别直接根据字典构建,而不是使用硬编码的编号。每个类别都在成交条件类别内进行名称匹配,包括零股、T 型成交及延长交易时段、顺序错乱、此前参考价格、衍生定价、平均价格、价格变动以及卖方。打开任意面板下方的 SQL,即可查看具体匹配模式。代码并不互斥,单笔成交可以同时带有多个代码,因此各类别百分比会重叠,不会加总为该交易时段的100%。两个 AAPL 面板和五只股票面板都覆盖2026年6月一个固定交易时段,时间已固定在 SQL 中,因此随着新交易时段到来,本页面内容不会变化。
常见问题
什么是交易条件代码?
它是附加在合并行情带成交报告上的标签,用于说明报告的类型,例如延迟上报、衍生定价、零股或延长交易时段。每个代码都带有相应标志,用于说明该成交是否可以更新最新价、最高价和最低价、开盘价、收盘价以及合并成交量。
为什么两个网站会显示同一只股票不同的日内高点?
两者对同一批成交采用了不同的资格规则。一个网站可能直接取所有已报告成交中的最高价;另一个可能剔除因交易条件代码而无资格设定最高价的成交;第三个还可能剔除盘前和收盘后交易时段。它们读取的都是同一条行情带。
零股成交是否计入成交量?
是。零股即少于100股的成交,会计入合并成交量,但无资格更新最新价或当日最高价和最低价。2013年末之前,零股根本不会被报告到合并行情带,因此长期成交量比较在这一时间点跨越了定义变化。
盘后交易是否计入日内最高价和最低价?
不计入常规交易时段的最高价和最低价。盘前和收盘后的成交会带有延长交易时段或 T 型成交条件,因此不会计入常规交易时段的开盘价、最高价、最低价和收盘价,但仍会计入当日合并成交量。
官方成交条件代码列表在哪里?
CTA Plan 和 UTP Plan 分别发布其所管理行情带的成交条件规范,这些文件具有权威性。供应商会将这些条件重新编号到自己的编号体系中,因此一家供应商的数字代码不一定与另一家供应商的相同编号相对应。
本页面的每个面板都附有生成该面板的 SQL。打开任意面板,替换 ticker 或日期,即可在 Strasmore 终端上对任何交易时段运行相同的交易条件分析。