跳到主要内容

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_dailyfox_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.pyORM 筛选引擎,读 ~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.pychangerate_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.pypopularity_rank(人气排名 top 300)东财独有字段,无 fox 等价物不迁移
app/services/data_quality/cross_source_check.pype9/pbnewmrq/new_price/total_market_cap跨源比对的一方就是 em 表本身不迁移

2.4 元数据引用(无需迁移)​

以下模块仅注册表名/列名,不直接查询数据:

模块引用方式
app/core/database.pyDDL 迁移(ALTER TABLE 加列)
app/services/scheduler_tasks.pyselection_sync 任务注册
app/services/data_quality/raw_consumers.pyREAD_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诊断工具表清单

这些是基础设施注册,不涉及数据查询逻辑,无需迁移。


三、迁移优先级与执行状态​

优先级模块行动状态
P1xuangu_hold.py / xuangu_market.py迁移到 fox 表✅ 已完成(2026-09-30)
P2dragon_score.pychangerate_5days 改读 fox_stock_indicators_daily.p_change✅ 已完成(2026-09-30)
P3xuangu_info.py / xuangu_scan.py多表 JOIN 替代单表查询✅ 已完成(2026-09-30)
P4system.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_daily251 天回测首选
K 线(OHLCV/amount)fox_kline_daily1995 至今910 万行
涨跌幅(p_change)fox_stock_indicators_daily251 天或从 kline 计算
多周期涨幅(5d/10d/年涨幅)从 fox_kline_daily 计算1995 至今需自定义 SQL
估值(PE/PB)fox_valuation / tencent_stock_quote_daily~13 天快照累积型,无法回填
人气排名 / DDX / 资金流排行em_stock_selection_daily9 天仅当日/近期可用,无法回测
基本面(ROE/营收/净利)fox_finance_indicator1991 至今财报指标
资金流向fox_fund_flow_daily部分年份缺口正在回补

回测铁律:

  1. 历史回测禁止依赖 em_stock_selection_daily(仅 9 天快照)
  2. 技术指标用 fox_stock_indicators_daily,K 线用 fox_kline_daily
  3. 需要 em 表独有字段(popularity_rank/ddx/net_inflow)时,回测结果必须标注 「仅限当日,无历史数据」
  4. 参考实现:tools/backtest_wisdom_trading.py(已验证 251 天回测可行)

相关文档​