夜雨聆风学习资料网

ARTICLE · 1033491

AI 工具实践备忘 · 2026年9月第2-3周(双周报)

AI 工具实践备忘 · 2026年9月第2-3周(双周报)


一、W37:三层架构 Layer 0/1 代码框架落地

项目:FM_trade 生态 — Quant Signal Factory 信号工厂核心引擎:RD-Agent 0.8.0 + Qlib 0.9.7(LLM 因子挖掘 → 回测评估 → 信号导出)

W37(9/7–9/11)的主线是把架构图纸变成代码——基于已批准的三层架构设计,完成了 Layer 0 与 Layer 1 的全部代码框架,约 5,000 行 Python。

Layer 0 — 宏观资产配置(7 文件,2,484 行):宏观数据采集(13 EDB + 6 ETF + 2 指数)、四象限宏观环境分类(6 种 regime)、7 类资产 6 因子评分、Risk Parity + 主动观点组合构建、完整回测引擎、JSON 契约 v1.0。

Layer 1 — 板块轮动 ML(7 文件,2,461 行):31 个申万一级行业 K 线采集、约 50 个特征(6 组分类、PIT 安全)、GBDT/XGBoost 双模型强正则化、4 种聚合方法基准线、IC 分析 + Top-5 模拟回测。

Quality Gate:14 个 Python 文件语法检查全部通过。另有 Qlib bin 数据重建验证(2,841 个交易日、709 个特征、704 只标的)。

本周踩的一个坑:Wind MCP 数据采集。首次尝试用 Python subprocess 批量调用,21 次调用全部 GBK 编码乱码、配额耗尽,成功率 0%。修复编码问题后二次尝试也仅成功 1/21——配额限制比预期更紧(约 10 次/日)。教训有二:批量调用前必须先单次测试;Windows 上 Python subprocess 调用 Node.js CLI 必须显式 UTF-8。这个坑直接触发了 W38 最重要的决策——彻底迁移数据源。


二、W38:数据底座修复与回测现实性

Wind MCP → akshare 全量迁移

Wind MCP 下调每日调用额度,且有进一步收紧的风险。与其被动等待,不如主动切割:update_daily.py 移除 Wind 回退函数,8 个历史脚本标记废弃,自动化管线完全移除 Wind MCP,akshare 成为唯一数据源——个股日线、31 个申万板块指数、12 个宏观 EDB 指标、6 只 ETF、指数 K 线全部迁移。

东财 API 封锁应急响应

迁移刚完成,9/17 就发现 akshare 无法调用东方财富 API(TCP 层拒绝连接)——诊断确认是东财对当前 IP 启用了反爬/WAF 阻断,不是 akshare 版本问题。应对措施分三路:

  • 个股
    update_daily.py 连续 3 次失败自动切换 baostock,已解决
  • 板块
    :三级降级链——akshare 主通道 → Wind MCP 手动触发 → baostock 合成指数(第三级待实现)
  • 宏观
    :NBS/央行系指标(PMI/CPI/GDP/PPI/M2/社融)不走东财,不受影响

三仓数据底座修复(Phase 1-4 全部完成)

QSF、Qlib、FM_trade 三个仓库的 ETL 长期存在重复建设,本次集中收口:QSF wind_bridge.py 确立为唯一 canonical ETL,废弃 Qlib 侧同名工具,FM_trade 桥接层退化为纯透传;cn_data 删除 6 个裸代码目录,all.txt 去重 704→702,csi300.txt 起始日期修复(2021→2015);alpha_signals.json 注入 @contract 契约元数据(schema_version / as_of_date / staleness),全链路 staleness gate 上线——滞后超过 2 天的信号直接拒绝同步。

存续偏差修复(#12)

用 baostock 全量扫描出 296 只退市股,逐一比对后发现0 只混入数据集——数据集自然免疫退市股存续偏差。另外产出 st_calendar.csv:697 条 ST/停牌异常记录(2 只 ST 股 + 41 只停牌股、343 条记录),覆盖 2025 年以来 323 个交易日。

回测撮合现实性(#13)

新增 220 行的 execution_gate.py,四项改进让回测从"理想国"回到"现实世界":

改进
内容
费率修正
买入 0.025% / 卖出 0.075%(佣金+印花税),最低 5 元
涨跌停门禁
涨停封死禁买 / 跌停封死禁卖,板块差异化(10/20/30/5%),5bp 容差
ST/停牌过滤
接入 st_calendar.csv,323 个交易日有排除
成交量约束
持仓不超过日成交额 1%

向后兼容:不传 realism_config 时行为与旧版一致。


三、两周关键数据与 W39 展望

代码产出:55+ 文件,约 5,400 行 Python + 配置 + 文档。中期路线 12/13 个技术任务已完成,仅 #14(signal_tracker 分层归因)需等 20 日数据积累。

Quality Gate 对比最能说明这两周的变化:回测费率从 0.03%/0.13%(不准确)修正为 0.025%/0.075%;ST/停牌回测排除从无到有;三仓数据底座从 3 个 P0 待修到全部修复;契约元数据与 staleness gate 从无到全链路。

W39 高优先级待办:Sector 数据 baostock 合成实现(降级链第三级)、baostock 增量更新端到端验证、XGBoost 模型修复(已延期 4 周)、Layer 0 回测验证。

待决策:东财封锁应对策略(等待解封 vs 主动切 baostock vs 混合方案);封锁期间是否临时恢复 Wind MCP;Layer 0/1 回测是等数据稳定还是先用缓存跑通。


四、沉淀

🔗 数据源单点依赖是定时炸弹

Wind MCP 额度下调、东财 API 封锁,两周内连续两次外部依赖"断供"。共同启示:任何单一免费数据源都不能当长期地基。这次能较快恢复,靠的是提前铺好的降级链——但第三级(baostock 合成)还没实现,说明降级链本身也要有"完工度检查"。

通用规则:数据源选型时先问"它明天消失我怎么办",答案不清晰就不算就绪。


🛡️ 回测的可信度取决于最不真实的那个假设

费率不准、涨跌停可以照常成交、ST 股可以照常买入——这些"小偏差"单看都无害,叠起来却能把一个亏损策略美化成盈利策略。#13 的四项改进没有引入任何新模型,但让回测结果的含金量实质性提升。

通用规则:回测引擎的升级方向不是更复杂的模型,而是更诚实的撮合假设。


📜 契约先行,防患于未然

@contract 契约元数据 + staleness gate 的组合,把"数据新不新鲜"从"靠人看"变成"系统强制拒绝"。这与上期 v2.0 方案的"验证先于产能"一脉相承——不新鲜的数据进了下游,比没有数据危害更大。

通用规则:跨系统数据流必须自带时间戳与版本号,下游要有拒绝陈旧数据的硬门槛。


🧪 批量操作前先单点验证

Wind MCP 首次调用 21 连败、配额全耗尽,根源是没做单次测试就批量开跑。配额型资源(API 额度、Token、积分)的试错成本是不对称的——失败不仅浪费这一次,还可能烧光当天全部额度。

通用规则:任何批量自动化,第一版永远先跑单例 smoke test。


*— 记录于 2026.09.18*

相关学习资料