股价与财务数据怎么合并:让交易日连接已发布的数据
日股价连接财务数据,应先把每个可靠发布事件转换为可用决策时点,处理重复与修订,再为每条价格行选择最新合格版本。交付是包含数值与来源事件的实际日级面板,不是一句避免未来信息的原则。扩大运行前,先测试披露边界两侧日期,明确哪些日行改变、哪些保持空值。
本文使用标准库对合成观测执行向后查找,发布时间外部提供,不从报告期标签自动恢复。CoTrading对应连接仍为规划或待核实,当前基本面响应也不能证明拥有完整历史可得库。本题重点是实际合并、边界执行和产物对账,不重讲既有PIT或回填定义。
声明每日截止与发布键
样例单一合成市场采用15:00、UTC+08:00研究截止,给定2026年10月19、20、21、22、23、26六个会话。每股只研究一个明确EPS字段和固定财务期间定义,价格与发布时刻均带时区。这是研究政策,不声称所有市场都在此时收盘,也不代表可交易执行时点。
发布必须严格早于截止,才能进入当日面板;恰好15:00发布延到下一给定会话。先写这条不等式,再执行;不同任务可以选择另一政策,但必须有对应边界预期。不能把解析器的默认日期处理当作已经确认的研究决定。
事件键包含证券与来源事件编号。真实系统还需指标、原报告期、单位、会计口径与修订关系。若有多个财年或季度,先按证券、指标、期间分区,并定义选取哪个期间,不能让任一最新时间戳覆盖目标观测。这里固定期间,是为了单独验收连接行为而非实现完整财务库。
准备价格表和发布表
AAA前两日没有合格EPS。原值1.0在20日16:00发布;修订1.1在22日14:00发布,同一来源事件被原样重复一次;1.2在23日恰好截止时发布;数值9在26日截止后才出现,不能进入本面板。价格六日收盘为10、11、12、13、14、15。
BBB在第一天截止前发布EPS2,CCC有数值3却没有发布时间。额外两只股票检验证券分区与缺时间分支。若全局查找,可能把BBB已知值接给AAA;若随意补一个时间,则会让CCC未经证明进入历史。两种错误都不是最后给表加免责声明可以解决。
SEC API说明描述申报与财务事实会更新,提供来源背景,但不证明本文所需发布时间都已存在。实际任务保留适当来源的发布或分发证据,不能用报告期末或当前取得时间替代。仅有申报日期时,盘中先后仍可能无法确定,应保留相应限制。
把发布时刻映射到生效会话
对每个有效事件,找到严格晚于发布的最早给定日截止。20日盘后事件生效于21日;22日盘前截止之前的修订生效于22日;23日周五同刻发布则到下一会话26日周一。日历通过输入给出,不靠加一天假设周末也交易。
published = datetime.fromisoformat(row["published"])
eligible = [cutoff for cutoff in cutoffs if published < cutoff]
if not eligible:
pending.append(row["id"])
else:
effective_at = min(eligible)
Python datetime参考支持带时区比较。本例不生成交易所假日或美股夏令时,给定会话序列必须覆盖目标范围。超出面板时间范围的事件进入待未来生效,不归入缺发布时间错误;两个队列后续处理不同。
发布时间未知的CCC单列排除。不要从标题猜小时,不默认午夜,也不凭旧报告期认为很早就知道。只有补齐证据才重新计算它的生效会话。这条分支直接作用于输出空值,不只是给已经放行的历史数字贴一个来源不确定标签。
去重后实际执行向后查找
去重键为(symbol, event_id)。同证券同编号且内容完全相同只用一次,同一键内容冲突抛conflicting_event_id;不同证券可以共享来源编号,分别处理。不同事件若生效和发布时刻都相同而无法确定先后,也停止,不让行序选择修订。其余事件在每股内部按生效与发布排序,价格表逐行查最近已生效事件。
values = prepared.get(price["symbol"], [])
position = bisect_right([event[0] for event in values], decision)-1
selected = values[position] if position >= 0 else None
bisect官方参考说明右侧插入及查找最后不大于给定值的模式。这里查的是已经依据严格发布政策生成的生效截止;生效时刻允许等号,不会取消之前发布必须早于截止的约束。把两个层级分开,边界行为才容易核对。
下载完整示例。使用Python 3.12+、标准库与合成数据,运行python R535.py。作者文件为docs/growth/research/round-5/examples/R535.py。
核对实际日级面板
| AAA日期 | 收盘 | 接入EPS | 来源事件 |
|---|---|---|---|
| 10月19日 | 10 | 不可用 | 无 |
| 10月20日 | 11 | 不可用 | 无 |
| 10月21日 | 12 | 1.0 | 原发布 |
| 10月22日 | 13 | 1.1 | 修订 |
| 10月23日 | 14 | 1.1 | 修订 |
| 10月26日 | 15 | 1.2 | 23日同刻事件 |
实际输出BBB接自己的EPS2,CCC为空。每条已接入行保留事件编号、发布时刻和生效时刻。断言核完整AAA序列、缺时间排除和超范围未来事件;反转发布表顺序,仍生成相同面板。重复1.1修订不会产生额外价格行,也不改变最终选择。
另注入同证券同编号不同数值99,执行明确拒绝;再让AAA和BBB共用filing-1,各接自己EPS,反转来源行序也不变。这些检查验证真正连接行为,不是只查看最终总结有没有未来日期。扩展真实文件时,还需检查价格自身唯一键及字段合法性,本例价格表预先给定,不宣称实现任意文件清洗。
分别诊断几个边界错误
按AAA财报期直接连所有价格,会把1.0放到20日16:00发布以前;只按发布日历日期连接也会犯同错。生效会话转换挡住它,同时允许22日14:00修订进入22日。正确政策不是全部推迟一天,而是根据真实发布时间与给定截止逐事件判断。
同刻发布是另一边界,本保守政策23日不接、26日才接。换不等式会改变结果,因此必须明确,而不是藏在日期舍入里。若实际取得存在额外延迟,应把可靠可用时间纳入生效计算,不把公开发布瞬间自动当作本系统已接收。
缺时间与冲突身份需不同修复。CCC补时间证据,复用编号冲突则核来源版本,二者都不能靠向前回填旧值或挑一个看起来合理数字修好。原始事件保留,修复后再跑同一测试,才能说明解除的是哪项阻挡。
连面板与证据一起交付
保存价格行、原发布集合、去重事件、排除与待生效清单、生效政策和日级输出。每条价格至多接一个同证券、同指标期间分区的事件,无合格来源时保留空。对账输入价格数与输出行数,不能因为缺值把某个交易日默默删除,导致下游时间轴改变。
更正发布时间后,重算生效会话及直到下一适用修订的日区间;更正数值则保留旧事件版本,重建依赖区间。价格表本身不变,也可能多个日行接入值改变。交付这些受影响日期,比笼统要求全部重新研究更具体,也方便核对未受影响行是否保持一致。
该方法完成实际as-of合并与边界验收,不证明何时可以成交,不消除全部前视风险,也不从当前数据制造历史预期。需要次日开盘决策的策略,应另设截止与执行规则。当前面板是可检查输入,哪些可得性假设已验证、哪些仍未知,都应随数据保留。
核所选事件,不只核数值
两个修订可能EPS相同,因此最终数字相等不足以证明历史选择正确。边界日还要比较事件编号和生效时刻,区分合法原观测与数值恰相同、当时却未可得的后来重述。面板记录这些字段,才能定位时间错误,而不是因为收益或比率没变就忽略连接偏差。
排除清单与超范围待生效清单分开供下一次任务使用。扩展日历可以让未来事件合法生效,却不能解决发布时间缺失。把二者统一当重试,会掩盖真正要改变的是时间范围还是证据。修复后只重开相应分支,并保留原来为何未接入的记录,方便对账变化。
真实集成还应记录研究系统接受的可得时钟。公开分发与本系统收到不同,政策可能需要较晚可靠时刻,必须在构造生效会话前执行。最后文字承诺只用已知信息,不能修复按报告期末连接或使用未经核实小时的程序。可重复的日级事件映射,才是这项合并任务的验收证据。
若扩大到多个指标,每项分别保留来源和生效关系,不因为某份财报已经发布,就默认报告内所有字段同时被正确取得。提取失败、单位未核或后续来源更正仍可能让部分格不可用。连接层只消费已经接受的字段版本,不能顺便用模型补齐整行。
对账时还应保持价格原行数量,未知值不丢日期。日面板中的空格说明该日没有可接受事实,不等于那天没有股票价格或没有研究任务;下游如何处理空格,应在自己的计算合同里明确,而不是由合并器静默删样本。
常见问题
报告期末决定哪天能接入吗?
不能,要用可靠发布或可得证据,以及明确决策截止。
同刻发布为什么这里延后?
因为政策要求严格早于截止;选择别的政策要另做边界测试。