批量研究多只股票:用同一任务逐股执行并保留失败结果
批量研究股票,要统一问题与交付结构,同时保留不能完成的公司。先固定股票名单、目标财年、估值日期和EPS口径,再逐股独立处理,保证每个输入都有一行结果,最后才汇总状态。某家公司的来源失败不能吞掉其他公司的成果,也不能从统计分母里消失,否则批量结果的覆盖范围无法判断。
本文使用六只虚构A股风格证券和外供年度稀释EPS预测,独立程序在条件满足时计算前瞻PE。来源函数返回合成记录或故意抛出超时,不获取真实行情,不让模型编预测,也不证明CoTrading拥有A股、港股、美股完整预期覆盖。真实研究需要分别取得合法、兼容、可追溯的价格与预测数据。
在循环之前固定共同问题
任务是:使用2026年10月26日快照,为每只股票计算价格除2027财年正的稀释EPS预测,币种人民币。证券输入顺序保持不变。真实名单要先确定重复项、不同股类与跨市场同代码如何处理,不能只凭一段ticker字符串就把不同证券合并。本例标识是虚构的,实际适配器应使用带市场和证券类别的合格标识。
预测来源需要目标年度、预测时点、币种、稀释口径和来源引用。IAS 33官方说明涉及EPS的分子和分母,本文据此要求明确可比口径,不意味着准则能提供券商预测或认证合成数值。真实预测若为调整后口径,应和法定口径区别保存,不能仅因都叫EPS就拼在同一列比较。
全部结果使用相同字段:证券、年度、快照日、币种、口径、状态、价格、EPS、PE、原因和来源。未知数字用null,不用0。success表示价格、兼容正EPS和计算PE齐全;partial表示有效价格已经取得,但估值未完成;failed表示价格前置步骤本身没有完成。这样既能汇总,也能看出下次应从哪步继续。
每只公司都是独立工作单元
函数一开始就创建结果行,然后获取价格,检查日期、币种、有限性与正值。价格超时就写入原因并返回该行,不必继续请求这只公司的EPS,其他公司照常运行。依赖顺序因此明确,不会因为一个异常跳出整个循环,也不会在缺价时继续做一个无法形成指定时点估值的下游动作。
接着取得预测载荷,先验证所需键齐全,再读取内容。严格检查2027年,不用相邻年度代替,随后检查快照、币种和稀释口径。Python JSON文档支持统一结构交换,但可解析JSON不等于金融字段含义正确。必须验证字段语义和期间,不能让格式检查替代研究口径检查。
数字统一通过有限数入口。Python Decimal能够表示NaN和无穷,解析成功仍需拒绝这些值。有限的零EPS可以保留为已观察数,但按本例正EPS规则不计算PE;非有限输入则不能进入已接受EPS列,应把错误原因写到诊断。两者都没PE,却不是相同数据状态。
六个结果逐项核对
AAA价格24,兼容2027年EPS1.2,PE20,是唯一完整成功。Decimal输出可能写2E+1,它是20的科学计数法,不是另一个倍数。展示层可格式化为20.00,但源数据和计算仍按原精度保留。断言要比较数值含义和来源口径,不应因展示样式不同误判财务结果发生变化。
BBB价格30,但只找到2028年预测,状态partial,原因missing_requested_forecast_year,接受的EPS和PE留空。不能算30除2028年预测再贴2027标签。下一步是取得缺少的2027年版本,或者明确改变整批研究的问题;改变问题时要重新审查全部公司,而不是给这一只临时放宽年度要求。
CCC价格源抛price_source_timeout,状态failed,价格和EPS都空,EPS步骤不执行。DDD价格20,实际取得EPS0,属于有效观察值,状态partial,理由nonpositive_eps_pe_not_applicable,EPS保留0、PE为空。CCC缺前置价格,DDD是估值方法不适用,即使最后都没倍数,也不能安排相同的盲目重试。
EEE价格18,EPS原字段为NaN,接受的价格保留,EPS为空,原因明确是无效数。FFF价格15,但所谓预测结果只有一句“业绩增长稳定”,缺年度、数值、口径和来源键,返回eps_schema_missing_fields。流畅文字不能替代数值表,也不能让模型从“稳定”自动填一个EPS,再把推测当来源结果。
results = [run_one(symbol) for symbol in SYMBOLS]
assert len(results) == len(SYMBOLS)
assert [row["symbol"] for row in results] == SYMBOLS
下载完整示例。使用Python 3.12+、标准库和合成数据,运行python R553.py。文件完整实现来源替身、校验、公式、统一结构和断言,最终统计1个成功、4个部分完成、1个失败,合计与六只输入一致,不能删除失败后再宣称覆盖全部。
不同原因对应不同补查动作
CCC需要重取指定日价格,BBB需要补2027年预测,DDD不能靠再请求同一数据解决正EPS估值不适用,应保留观测并改用另一个已定义研究任务。EEE需要核实数值源,FFF需要真实结构化提取或外部字段表。对五只都重复相同宽泛提示,会浪费请求并掩盖真正缺口。补查清单应直接引用原因和仍可复用的数据。
不要用0或其他公司的均值填未知。DDD已经有真实合成零EPS,若同时拿0代表来源失败,就无法区分经济含义与技术缺失。也不要先删除失败行,再计算成功比例;本例是六个任务结果全部返回、只有一个估值算完,不是“可用样本1/1所以成功率100%”。两个完成度指标都能报告,但定义必须分别清楚。
遇到相互矛盾的来源,保留引用并暂停该公司计算,直到存在明确选择政策。不能依据希望得到的PE挑更顺眼的EPS。此例展示多种局部失败,并不覆盖每家供应商schema或真实财务对账;接入新来源前要用其实际字段和边界建立额外检查,而不是把合成例的成功当作通用提取保证。
先汇总覆盖,再解释估值
输出各状态数量以及对应证券和原因。估值比较只能使用兼容完整行,并在旁边说明受限覆盖。本例只有AAA一个成功,不足以形成六股估值排名。批任务可以成功履行“每输入有结果”的报告合同,同时大部分公司估值尚未完成,这不是矛盾。把两个层面说清楚,才能避免最终文章对研究完成度的夸大。
逐行检查source列表,部分有效价格保留其引用,后续补EPS时可以在仍有效的日期政策下复用。错误或错口径字段可放诊断记录,但不能进入已接受EPS。真实系统还应保存原始数据版本、核验时间、授权范围和源响应;本例简短source_id只指向合成来源,不是任何券商真实报告的可验证证据。
按相同合同定向重跑
补到预测或修正数值后,只重跑对应公司并保留旧尝试。先确认原价格仍满足估值日期要求;新一天价格属于新研究版本,不能悄悄混进昨天已经完成的批表。目标年、口径或币种改变时,要让相关行整体失效并标出新合同,避免一张表上看似同列、实际各算各的。
本例串行执行以便观察;增加并发需要限制请求数量、遵守来源限制并保持异常隔离,同时继续保证每输入一行。并发不能解决历史预期缺失、字段定义不明或来源授权不足。研究规模扩大后,先核对证券总数、返回行数、状态合计和重复项,再解释任何估值分布,避免技术吞行被误当成筛选排除。
对于可补查项,可以增加下一步字段,例如重试价格、查目标年度、核实原文或改用其他估值方法,但这些动作不能自动修改原合同。将补查提议和实际执行分开,留下一次次尝试的状态,才方便审阅者知道哪些数据已经获得、哪些仍在等待、哪些属于方法本身不适用,而不只是看到一个最终“已完成”的文字回答。
给后续使用者传递完整状态
导出表格时保留null与原因列,不要只导出成功倍数,再另用一段文字说“其他有问题”。机器消费也应先检查status,再读取PE;部分结果的有效价格可以用于补查,但不能被重新包装成完整估值。若生成研究摘要,先由结构结果限定哪些公司可比较、哪些尚缺数据,写作不能自行填空。
重复运行时还应核对输入输出证券顺序和数量,让每个外部请求都能找到对应结果。人为追加一只股票后,旧覆盖统计不能继续沿用。可将输入名单版本与研究合同一起保存,补查完成再输出新的批次记录,旧版继续说明当时覆盖。批量规模增大时,这些基数检查比一份长篇流畅总结更能发现真实遗漏。
常见问题
有partial行代表整批失败吗?
整批可以完成结果记录合同,同时部分公司的估值未完成,需要同时展示。
文字预测能参加数值比较吗?
只有取得并验证必需数字和口径后才行,摘要本身不能替代字段。