em_stock_selection_daily 依赖评估
评估日期:2026-09-30。 背景:「炒股的智慧」策略回测(
tools/backtest_wisdom_trading.py)已成功绕过em_stock_selection_daily(仅 9 天数据),改用fox_stock_indicators_daily(251 天数据)完成 2020 至今全量回测。本文评估项目中其他消费者是否也应迁移。
一、两表核心差异
| 维度 | em_stock_selection_daily | fox_stock_indicators_daily |
|---|---|---|
| 数据源 | 东财选股器全市场快照(单一源) | 多源融合(腾讯 K 线 + TDX + 新浪财报) |
| 列数 | ~112 列 | ~84 列 |
| 历史深度 | 9 天(2026-09-16 ~ 09-29) | 251 天(2020-01-02 ~ 2026-09-29) |
| 数据性质 | 覆盖式快照(每日全量替换) | 时序累积(每日增量追加) |
| 定时任务 | selection_sync(17:30) | quant_calc(17:30) |
| 独有能力 | popularity_rank / pe9 / pbnewmrq / ddx / net_inflow / changerate_5d/10d/ty / total_market_cap / free_cap / roe_weight / zxgxl / 机构持股分类 / 人气趋势 | MA 多周期 / MACD / KDJ / BOLL / RSI / CCI / WR / VR / CR / ATR / BIAS / OBV / pos_5~180 / cross_ma250 / days_since_cross_up / vol_accel / limit_up_count / turnover_pct |
结论:两表列集合几乎不重叠。em 表侧重东财预计算的基本面/资金面排行, indicators 表侧重自算技术指标。迁移不是简单的「换表名」,而是需要重新设计 字段映射与 JOIN 逻辑。
二、消费者分类评估
2.1 核心筛选引擎(不可迁移)
| 模块 | 使用方式 | 可替代性 | 理由 |
|---|---|---|---|
app/api/screener.py | _MAIN_TABLE = "em_stock_selection_daily",DSL 筛选引擎主表,_FIELD_ALIASES 全部映射 em 列名 | 不可迁移 | 整个字段别名系统(~80 个 DSL 字段名)绑定 em 列名;subquery JOIN 的 fox 表只提供技术指标补充 |
app/services/selection_service.py | ORM 筛选引擎,读 ~80 列做多维过滤 | 不可迁移 | 依赖东财独有列(pe9/pbnewmrq/popularity_rank/ddx/net_inflow/changerate_*等),indicators 表无这些列 |
建议:保持现状。这两张引擎是智能选股页的核心,其 DSL 字段体系与东财宽表 深度耦合。迁移成本极高且无增量收益(em 表每日 17:30 准时刷新,当日数据可用)。
2.2 辅助工具(已迁移 ✅)
| 模块 | 原使用方式 | 迁移方案 | 状态 |
|---|---|---|---|
app/mcp/tools/xuangu_hold.py | 存在性检查(死代码,结果未使用) | 移除死代码块 | ✅ 已迁移 |
app/mcp/tools/xuangu_market.py | 涨跌幅排行 → em_stock_selection_daily | 改读 fox_stock_indicators_daily(close/p_change)+ fox_stock_master(name) | ✅ 已迁移 |
app/api/system.py | _DIMENSION_TABLES 注册 freshness 检查 | 改为 fox_stock_indicators_daily | ✅ 已迁移 |
2.3 中度依赖(已迁移 ✅ / 不迁移)
| 模块 | 使用字段 | 迁移方案 | 状态 |
|---|---|---|---|
app/services/dragon_score.py | changerate_5days(5 日涨幅) | 改读 fox_stock_indicators_daily.p_change(当日涨跌幅) | ✅ 已迁移 |
app/mcp/tools/xuangu_info.py | 基本信息/估值/资金流 | 基本信息→fox_stock_indicators_daily+fox_stock_master;估值→fox_valuation;资金流→fox_fund_flow_daily | ✅ 已迁移 |
app/mcp/tools/xuangu_scan.py | 多周期位置 | 改读 fox_stock_indicators_daily.pos_20/pos_60/pos_180(位置百分位) | ✅ 已迁移 |
app/services/social_sentiment.py | popularity_rank(人气排名 top 300) | 东财独有字段,无 fox 等价物 | 不迁移 |
app/services/data_quality/cross_source_check.py | pe9/pbnewmrq/new_price/total_market_cap | 跨源比对的一方就是 em 表本身 | 不迁移 |
2.4 元数据引用(无需迁移)
以下模块仅注册表名/列名,不直接查询数据:
| 模块 | 引用方式 |
|---|---|
app/core/database.py | DDL 迁移(ALTER TABLE 加列) |
app/services/scheduler_tasks.py | selection_sync 任务注册 |
app/services/data_quality/raw_consumers.py | READ_PATH_TABLES 集合 |
app/services/data_quality/history_contracts.py | 审计契约注册 |
app/services/data_manager/queries.py | _ALL_TABLES 注册 |
tools/diag_schema.py / diag_gaps.py / diag_coverage.py | 诊断工具表清单 |
这些是基础设施注册,不涉及数据查询逻辑,无需迁移。
三、迁移优先级与执行状态
| 优先级 | 模块 | 行动 | 状态 |
|---|---|---|---|
| P1 | xuangu_hold.py / xuangu_market.py | 迁移到 fox 表 | ✅ 已完成(2026-09-30) |
| P2 | dragon_score.py | changerate_5days 改读 fox_stock_indicators_daily.p_change | ✅ 已完成(2026-09-30) |
| P3 | xuangu_info.py / xuangu_scan.py | 多表 JOIN 替代单表查询 | ✅ 已完成(2026-09-30) |
| P4 | system.py freshness | 替换为 indicators 表 | ✅ 已完成(2026-09-30) |
| 不动 | screener.py / selection_service.py | 保持 em 表主表 | — |
| 不动 | social_sentiment.py | 保持读 popularity_rank | — |
| 不动 | cross_source_check.py | 保持现状 | — |
迁移效果:MCP 工具(xuangu_info/scan/hold/market)与龙头评分
(dragon_score)现在可访问 251 天历史数据,不再受 em 表 9 天快照限制。
回测工具(backtest_wisdom_trading.py)已验证此路径可行。
四、回测场景的数据源选择指南
对于需要历史数据的策略回测任务,数据源选择优先级:
| 需求字段 | 首选表 | 历史深度 | 备注 |
|---|---|---|---|
| 技术指标(MA/MACD/KDJ/RSI/BOLL/pos_/cross_) | fox_stock_indicators_daily | 251 天 | 回测首选 |
| K 线(OHLCV/amount) | fox_kline_daily | 1995 至今 | 910 万行 |
| 涨跌幅(p_change) | fox_stock_indicators_daily | 251 天 | 或从 kline 计算 |
| 多周期涨幅(5d/10d/年涨幅) | 从 fox_kline_daily 计算 | 1995 至今 | 需自定义 SQL |
| 估值(PE/PB) | fox_valuation / tencent_stock_quote_daily | ~13 天 | 快照累积型,无法回填 |
| 人气排名 / DDX / 资金流排行 | em_stock_selection_daily | 9 天 | 仅当日/近期可用,无法回测 |
| 基本面(ROE/营收/净利) | fox_finance_indicator | 1991 至今 | 财报指标 |
| 资金流向 | fox_fund_flow_daily | 部分年份 | 缺口正在回补 |
回测铁律:
- 历史回测禁止依赖
em_stock_selection_daily(仅 9 天快照) - 技术指标用
fox_stock_indicators_daily,K 线用fox_kline_daily - 需要 em 表独有字段(popularity_rank/ddx/net_inflow)时,回测结果必须标注 「仅限当日,无历史数据」
- 参考实现:
tools/backtest_wisdom_trading.py(已验证 251 天回测可行)