DevLog #003: no_signal_func 问题分析 — 741个策略中90个无法提取信号函数
日期: 2026-04-12 状态: 分析完成 Tags: strategy-factory, issue-analysis, signal-extraction, 平台兼容性
概述
对 out/ 目录下所有 741 个策略 JSON 进行分析,发现 90 个策略(12.1%)的 pure_alpha_function 字段为 null,无法参与回测。
总体统计
| 类别 | 数量 | 占比 | 处理建议 |
|---|---|---|---|
| A类(可直接修复) | ~5 个 | 0.7% | 通过 LLM 直接生成 |
| B类(可重新生成) | ~58 个 | 7.8% | 模拟 API 或替代数据 |
| C类(不可修复) | ~27 个 | 3.6% | 标记排除,不计入失败率 |
| 总可修复率 | ~70% | — | 修复后预估通过率 4.0% → 12.5% |
A类:可直接修复(5个)
判定条件:
pure_alpha_function为 nulllogic_extraction.entry_signals有实质性内容quality_assessment.completeness为medium或high- 策略描述清晰
典型案例:
| 文件 | 问题 | 修复方案 |
|---|---|---|
24 自选策略1.json | 框架模板,核心筛选函数为空占位符 | 已有详细 entry/exit signals,可直接生成 |
68 板块轮动不动?.json | 策略依赖外部CSV数据文件 | CSV文件路径已知,可补充数据源后生成 |
87 选股策略说明——张燕兰.json | 财务因子策略,6项指标清晰 | entry_signals 包含6个财务指标,可直接生成 pandas 实现 |
修复方案:使用 logic_extraction 中的 entry_signals 和 exit_signals 重新调用 LLM。
B类:可重新生成(58个)
判定条件:策略依赖平台私有 API,但策略描述完整,有可参考的输入输出逻辑。
主要问题类型
| 类型 | 典型案例 | 问题 | 修复方案 |
|---|---|---|---|
| JoinQuant 财务 API | 11.多因子选股策略——基于传统分析.json | 使用 get_fundamentals | 用 akshare/tushare 替代 |
| JoinQuant 行业API | 86.北上詹姆斯.json | 使用 get_industry_stocks | 用申万行业数据替代 |
| 机器学习预测依赖 | 97.基于机器学习的多因子选股策略.json | 依赖平台 ML 模型 | 需重新训练或使用替代 ML |
| 遗传算法/优化 | 40.基于遗传算法挖掘因子2.json | 遗传算法优化依赖平台 API | 使用 DEAP 库独立实现 |
★ Insight ───────────────────────────────────── 平台锁定是策略可移植性的最大障碍。 大多数"野生策略"都绑定了特定平台的私有 API(get_fundamentals、get_industry_stocks 等), 这也是为什么我们需要用 pure_alpha_function 将它们"净化"为纯 pandas/numpy 实现。 ──────────────────────────────────────────────────
修复方案
- 建立 API 模拟层:用
akshare/tushare替代 JoinQuant 财务 API - 因子库替代:使用开源因子库或自实现常用因子
- LLM 重建:对有清晰
logic_extraction的策略重新生成代码
C类:不可修复(27个)
判定条件:
- 非交易策略(研究工具、学习示例、数据采集工具)
- 完全依赖外部不可得数据
- entry_signals 为空数组
典型案例
| 文件 | 类型 | 原因 |
|---|---|---|
7.中文自然语言处理--情感分析.json | NLP研究 | 非交易策略,是文本情感分类教程 |
54.指数估值自动报表系统.json | 分析工具 | 无交易信号,仅数据报表生成 |
77.TensorFlow 学习之RNN.json | 学习示例 | ML 学习代码,非交易策略 |
43.ETF资源收集整合.json | 数据采集 | 仅数据采集和整理,无交易逻辑 |
100.全市场归因.json | 分析工具 | 归因分析,非交易策略 |
处理建议:
- 标记为"模板残留"或"非交易策略"
- 从评估集中排除,不计入失败率
- 如需利用,可作为 LLM 微调训练数据
失败原因分布
no_signal_func (90个)
├── A类可直接修复: 5个 (5.6%)
│ └── 框架模板占位符、财务因子逻辑完整
├── B类可重新生成: 58个 (64.4%)
│ ├── JoinQuant 财务API: ~15个
│ ├── JoinQuant 行业API: ~8个
│ ├── 机器学习依赖: ~10个
│ ├── 多因子策略: ~12个
│ └── 遗传算法/优化: ~5个
└── C类不可修复: 27个 (30.0%)
├── 研究/学习工具: ~12个
├── 分析/报表工具: ~8个
└── 外部数据依赖: ~7个
修复优先级
| 优先级 | 类别 | 数量 | 修复后预估通过率提升 |
|---|---|---|---|
| P1 | A类可直接修复 | 5 | +0.7% |
| P2 | B类可重新生成 | 58 | +7.8% |
| P3 | C类不可修复 | 27 | 0%(标记排除) |
如全部修复完成,预估通过率从 4.0% 提升至 12.5%(假设 B 类 50% 修复成功)。
核心洞察
★ Insight ───────────────────────────────────── 12.1% 的策略因为"平台锁定"而无法参与回测,这不是策略本身的问题,而是量化平台生态割裂的结果。
净化工作(pure_alpha_function 提取)的价值在于:将散落在各个平台的"野生策略"转化为"可移植的策略资产"。
但这也提醒我们:未来的策略生成应该直接输出平台无关的 pure_alpha_function,而不是先写平台特定代码再转换。 ──────────────────────────────────────────────────
Generated from: SAF/strategy_factory/docs/stratege_factory_issues.md