股票池基本面数据准备¶
财务因子目录描述计算能力;策略需要的财报、市值等观测值保存在
qd_fundamental_snapshots。AI 投研页面临时获取的数据,不等同于策略已经拥有完整的历史基本面。
管理员操作¶
- 在系统设置的市场数据管理区域,确认股票池及其成员已同步。
- 打开“基本面数据准备”,选择股票池。标普500策略选择
sp500。 - 选择所需字段。盈利、市值筛选至少需要
market_cap和net_income;这里的净利润为最近报告期,非自动 TTM。 - 美股选择“历史财报”,点击“同步股票池基本面”。港股、A股当前支持“当前快照”。
- 查看任务进度和失败股票。失败项自动最多尝试三次,之后可以单独重试失败股票。
- 按策略最近一根已完成行情的日期检查覆盖。日期默认上一个工作日,遇到交易所节假日需要调整。
- 可勾选每日检查。调度使用启用时选定的模式和字段;修改字段后需重新设置每日检查。
首次补齐与增量检查¶
手动同步和定时任务默认都先查本地数据库,仅为需要采集的股票创建任务项。 首次没有数据时会采集全池;已有可复用的历史数据时直接复用。每次检查都会重新读取股票池成员,新增成员缺少数据时自动补采。 页面显示本次采集数量和跳过数量;跳过也可能是失败后的冷却等待,不等于该股票数据已经齐全,实际完整性仍看覆盖表。
- 美股历史财报:所需字段缺失或财报过期时补采;字段齐全且财报期结束不足100天时,每7天复查一次;满100天后每24小时复查一次。
- 这是按报告期推算的轮询策略,没有接入准确的财报发布事件流。非密集检查期,新披露数据可能延迟约一周发现;数据源异常时更久。
- 当前快照:保持每24小时更新,避免把当前估值字段长期当作新鲜数据。
- 一轮三次尝试均失败后,等待24小时再进入下一批自动任务。新增字段要求不受旧要求的失败冷却限制。
- “重试失败股票”立即重试;“强制全量刷新”只作用于本次手动同步,不会把每日调度改回全量。
- 当前快照不会替代首次历史财报导入;历史检查只复用历史导入来源。
- 股价变化不触发历史财报重拉:策略面板已有的市值计算使用行情收盘价乘以已知股数。股数仍依赖财报更新,并非实时股本事件订阅。
增量粒度为股票。选中股票后仍使用原有历史导入器检查其可获取的财报期,按唯一键更新,非新增一套逐财报事件采集服务。
“字段齐全”只表示当前成员在指定日期存在要求的字段且财报期未超过200天。 它不代表行情完整、历史成分股准确、整个回测区间可用或跨币种估值口径一致。 负数或零净利润是有效数据,不应当作数据缺失;盈利条件由策略另行判断。
部署要求¶
同时更新前端、API、Celery Worker 和 Celery Beat。启动迁移会从 migrations/init.sql
创建任务、任务股票、调度三张表;独立 SQL 为
backend_api_python/migrations/20260913_fundamental_sync.sql。
Worker 必须消费 maintenance 队列。Beat 每分钟触发检查,任务逐只处理股票,
成功处理后继续排队。每日检查为约24小时间隔,并非固定交易所收盘时刻。
任务与重试状态保存在 PostgreSQL,服务重启后可以继续;失联任务租约为5分钟。
外部数据请求不占用数据库连接。重复提交同一股票池返回已有活动任务。
管理员接口:
GET /api/factors/fundamentals/universe/{id}:最新任务、调度和指定日期覆盖。POST /api/factors/fundamentals/universe/{id}/sync:批量同步或重试失败股票。POST /api/factors/fundamentals/universe/{id}/schedule:启用或关闭每日更新。
排队超过一分钟时,先检查 Beat、maintenance Worker 和 Redis。 失败原因显示为缺失/过期或采集/写入失败;详细异常可按股票和任务号查询后端日志。
数据和因子口径¶
- 当前快照不会回填到过去,不能用今天采集的数据伪造过去已知的信息。
- 美股历史导入使用数据源提供的财报披露日期,并保守地从次日生效;无法确定披露时间的记录跳过。
- 当前历史源为 yfinance 季度财报,历史长度和字段覆盖受数据源限制,也不能保证是未重述的原始披露版本。
- 账面市值比使用股东权益总额除以总市值,修正每股账面值与公司总市值混用的问题。
- 营收增长读取报告字段,历史导入按去年同季计算,修正按相邻交易日比较导致的零增长。
- 财务字段缺失时不再悄悄使用更早的非空值。净利润、权益回报和现金流收益口径不自动年化。
本地验收(2026-09-13)¶
在独立 Docker PostgreSQL、Redis、API、Celery Worker/Beat 环境中:
- 真实数据源对 AAPL 导入5期财报;AAPL、MSFT、ABBV 三股经真实任务队列全部落库,指定日期覆盖3/3。
- 实际挂载的管理面板完成同步、进度、覆盖展示;每日更新保存后由 Beat 再次执行,3/3成功。
- Docker 集成测试验证权限、落库后供策略读取、失败重试、并发领取、中断恢复、日期隔离和调度持久化。
- 前端行为测试验证股票池切换时旧响应不会覆盖新结果、清空字段不会卡住加载状态、非美股使用快照模式。
- 增量集成测试验证二次检查不再采集已更新股票、新成员只补采新增项、快照与历史隔离、失败冷却及手动强制刷新。
- 对已采集真实数据的三股股票池再次执行增量检查:任务41直接完成,跳过3只、采集0只。
- 增量版本后端回归2338项、Docker集成9项、前端247项通过;生产构建及后端质量检查通过。
浏览器测试使用隔离账号的组件测试页;完整应用登录因测试环境验证码配置未通过,本次不声称完整登录导航已验收。 测试没有提交真实证券订单,也未同步验收整个标普500。云端更新后仍需运行全股票池同步并检查实际覆盖。
