两只行情源报出同一个标的的价格,数值却对不上,未必是其中哪一只坏了。差异可能来自时间戳、交易时段、缺失观测、历史数据调整,或者数据源各自的覆盖范围。在把两张图摆到一起下结论之前,先得确认这些观测本身是不是可比的。
这里用一个假想标的 DEMO 的六行观测做演示:13:29 报 101.20,13:30 报 101.25 且出现两次,13:31 报 -1.00,13:32 报 101.40,13:35 报 101.60,来源均为 A。乍看只是六行行情,细看问题一串:13:30 为什么重复?负价格对这种数据类型是否成立?这些观测是否都落在预期的交易时段内?13:32 到 13:35 之间又发生了什么?光看一张图,这些毛病未必显眼。
演示采用的时段定义是美股常规交易时段,即美东时间上午 9:30 到下午 4:00。这只是一个示例性的时段口径,不是通用的行情规则,也没有考虑市场假日、提前收盘、集合竞价或具体标的的交易安排。代码里用 Python 的 zoneinfo 模块处理时区,而不是假定一个固定的 UTC 偏移。
校验流程先解析时间戳:不带时区的记录直接抛错,其余统一换算成 UTC。再按美东时间给每条记录打时段标签,周末归为常规时段之外。随后逐条跑规则,把命中的问题打印出来。按演示数据,预期输出三类结果:
- 13:29 的记录落在常规交易时段之外
- 13:30 的记录在同一来源、同一标的下时间戳重复
- 13:31 的记录价格非正
被标记不等于该删。包含盘前活动的分析里,扩展时段的观测完全可能有效;重复时间戳也可能意味着数据摄入环节出了问题、对早先观测做了更新,或者该数据源本身就允许同一时刻存在多条事件。校验只负责把问题指出来,怎么处理由研究口径决定。
剔除被标记的行之后,再看剩余记录的时间序列,按分钟逐一比对相邻时间戳。预期输出两处缺口:13:30 之后缺 1 分钟,13:32 之后缺 2 分钟。前者是因为 13:31 那条无效记录被排除,后者对应 13:33 和 13:34 两条缺失的分钟观测。
但时间戳缺失并不自动等于源数据缺失。事件驱动的成交数据源,在清淡的一分钟里可能本来就没有成交;而完整的分钟线数据源,按理应为每个计划内的分钟都提供一根 bar。解读缺口之前,得先搞清楚数据契约是什么。
价格列之外,还有几件事决定数据能不能比:
- 复权与不复权:经过拆股等公司行为调整的历史序列,可能与未调整序列相差很大
- 时间戳语义:它代表区间起点、bar 的终点、单条市场事件,还是数据商处理该记录的时刻
- 时段覆盖:数据源只含常规时段,还是也包含盘前与盘后
- 数据商修订:源方能否更新此前发布的观测,若能,版本如何追踪
这些细节即使所有价格在技术上都是合法值,也会影响比较结果。可复现的研究流程应当把它们和数值观测一起留存。
与其只记下一句看图结论,不如把日后复查所需的上下文一并存下来。演示中的研究记录包含标的、来源、数据类型(一分钟 bar)、时区、时段时区、时段范围(常规时段)、调整口径(不复权)、所用校验规则清单,以及一条研究备注:样本观测需先校验,再做基于图表的比较。生产环境还应保留标的标识、来源版本、取数时间、预期市场日历、调整方法和校验结果本身。原则很简单:另一位分析师能据此重建当时的条件,这条研究观测才更有用。
行情数据质量不只是工程问题,它直接影响分析解读。一个可操作的顺序是:筛查、补充上下文、看图、核对来源、记录观测。公开材料中关于 Ositrustees 的描述,将其定位为金融数据与分析技术平台,聚焦市场筛选器、板块监控、基于图表的研究和结构化的行情数据流程。需要说明的是,上述 Python 示例是数据校验概念的独立教学演示,不是 Ositrustees 的生产代码、API 示例,也不能作为该平台内部实现的证据。
可靠的市场研究在图表渲染之前就开始了。一小段校验程序能暴露重复记录、无效价格、时段边界错配和缺失观测。更关键的一步,是结合标的、来源和研究问题,判断每一条警告到底意味着什么。把时间戳、来源身份、时段假设、调整规则和校验结果保留下来,研究才更容易被复核和复现。
热门跟贴