迭代 139:核心稳定性与工程治理收敛计划¶
计划日期:2026-03-24 适用分支:
dev/development计划定位:在迭代 138 完成 Tick 级架构推进之后,优先收敛核心运行链、工程工具链和仓库治理债务,为后续功能迭代提供稳定底座。
1. 迭代目标¶
本轮迭代不再继续扩张功能面,重点解决以下四类问题:
核心引擎文件过大、职责交叉,维护成本持续抬升。
关键交易路径仍有遗留
TODO/FIXME,部分已触及正确性和运行语义。文档、CI、发布元数据存在漂移,工具链可用性不足。
仓库中存在示例输出和大体量测试数据,工程治理边界不清晰。
本迭代的目标是把这些问题从“已识别”推进到“可执行、可验收、可持续维护”的状态。
2. 当前基线¶
2.1 代码结构基线¶
当前核心模块已经出现明显的单文件膨胀:
文件 |
行数 |
|---|---|
|
2349 |
|
2191 |
|
2166 |
|
2145 |
|
2066 |
|
1732 |
|
1702 |
|
1663 |
|
1656 |
|
1529 |
这些模块同时也是 mypy 规则放宽最集中的区域,说明复杂度已经影响到静态分析有效性。
2.2 质量债务基线¶
docs/TODO_FIXME_TRACKER.md当前记录了34个源码级TODO/FIXME。遗留项集中在
backtrader/cerebro.py、backtrader/brokers/bbroker.py、backtrader/feed.py、backtrader/dataseries.py等关键路径。其中多项并非纯注释清理,而是涉及循环条件、执行语义、佣金计算、未解释分支等问题。
2.3 测试与 CI 基线¶
tests/目录下当前有354个test_*.py文件。pytest --collect-only -q tests输出1820行,说明测试规模已经显著高于 README 中“478+ tests”的表述。.github/workflows/test.yml目前在 Ubuntu、macOS、Windows 上对 Python3.8到3.13跑全量测试矩阵,覆盖面高,但 PR 反馈成本也高。
2.4 文档与工具链基线¶
tools/doc_coverage_scanner.py可以打印覆盖率,但在生成报告阶段会抛出KeyError: 'module',当前无法稳定产出报告文件。同一脚本对顶层函数的识别逻辑存在误判风险,统计结果可信度不足。
.github/workflows/docs-auto-build.yml已依赖该脚本做文档覆盖检查,意味着当前文档 CI 有失效风险。
2.5 元数据与仓库治理基线¶
README.md声明 Python3.9+,但setup.py、pyproject.toml与测试矩阵实际支持3.8到3.13。README.md与LICENSE明确为GPLv3,但setup.pyclassifier 仍写成MIT License。仓库当前跟踪了
examples/output/*.html|json|pdf这类生成产物。仓库还跟踪了多个大体量测试/示例数据文件,例如:
tests/datas/bond_merged_all_data.csv约70 MBtests/datas/FG889.csv约31 MBexamples/DOGEUSDT_15m_20200710_20260126.csv约24 MB
3. 关键问题归纳¶
3.1 核心引擎耦合过深¶
当前 Cerebro、Strategy、Line* 系列和 Broker 相关实现都承担了多重职责:运行循环、通知路由、兼容分支、历史包袱和新功能桥接同时存在,导致:
代码阅读门槛高;
小改动的回归半径大;
静态检查需要大量例外;
新功能只能通过“继续打补丁”进入,而不是通过清晰扩展点进入。
3.2 观察器体系存在特化耦合¶
TradeLogger 已经从普通 observer 演变为带有专属分支的特殊组件。backtrader/strategy.py 中存在按类名字符串识别 TradeLogger 的逻辑,这说明:
observer 扩展边界被打破;
日志能力和策略运行链耦合过深;
后续继续扩展日志、监控、告警能力时会进一步放大侵入性。
3.3 工具链“可见但不可用”¶
文档覆盖扫描、质量文档、README 指标、发布元数据之间已经出现明显漂移。问题不在于“没有工具”,而在于:
工具结果不稳定;
指标口径不统一;
文档承诺和实际工程状态不一致;
CI 虽然覆盖广,但没有分层策略来平衡速度与成本。
3.4 仓库资产边界不清晰¶
示例输出、超大样例数据、长期保留的历史规划文档共同存在于主仓库中。虽然部分资产有合理性,但当前没有明确分层:
什么必须进 Git;
什么应该转为生成物;
什么应该压缩、裁剪或改为外部下载;
什么应该迁移到更适合的存储方式。
4. 迭代范围¶
4.1 本轮要做¶
清理关键运行链上的高风险遗留项。
为 observer/logging 建立更清晰的扩展边界。
修复失效的文档工具链并统一发布元数据。
建立测试矩阵分层和仓库资产治理规则。
4.2 本轮不做¶
不启动新一轮 Tick 架构大重构。
不新增大型外部数据源或交易接入。
不在本轮引入新的可视化前端系统。
不做以 Cython/Numba 为主线的性能重写。
5. 工作流与任务拆解¶
5.1 工作流 A:核心运行链稳定性清理¶
优先级:P0
目标:关闭关键运行路径上的解释不清、分支冗余和语义不确定问题。
任务:
审核
cerebro.py中 run loop 相关历史TODO,逐项给出“删除 / 修复 / 文档化保留”的结论。审核
bbroker.py中佣金、持仓价值和执行分支相关TODO,补充回归测试。审核
feed.py、dataseries.py中已标记FIXME,清理无效状态字段和不稳定兼容逻辑。为本轮处理过的每个遗留项补充对应测试或注释说明,禁止“只删 TODO 不补约束”。
交付物:
关键遗留项清单与处理结论
新增/修复的回归测试
清理后的运行链说明文档
5.2 工作流 B:Observer / Logging 解耦¶
优先级:P1
目标:把 TradeLogger 从“特殊 observer”还原成“通过显式接口接入的 observer 扩展”。
任务:
梳理
Strategy对TradeLogger的直接识别和专属通知路径。提炼 observer 事件接口,避免通过类名字符串做特殊分支。
将日志、监控、阈值告警等运行时能力下沉到独立适配层。
保持现有
TradeLogger对外 API 不破坏,必要时通过 shim 兼容旧路径。
交付物:
Observer 事件接口设计
TradeLogger解耦实施方案兼容性回归测试
5.3 工作流 C:工具链与发布元数据修复¶
优先级:P0
目标:让质量工具和发布口径重新可信。
任务:
修复
tools/doc_coverage_scanner.py的报告生成异常。修正文档覆盖统计逻辑,保证模块、类、函数、方法口径准确。
统一 README、
setup.py、CI、类型检查中的 Python 版本描述。统一许可证声明,消除 GPL 与 MIT classifier 冲突。
明确
requirements.txt、setup.py、开发依赖之间的职责边界,减少多源维护漂移。
交付物:
可运行的文档覆盖报告工具
一致的发布元数据
工具链基线检查清单
5.4 工作流 D:测试矩阵与仓库资产治理¶
优先级:P1
目标:缩短反馈链路,同时控制仓库膨胀。
任务:
将 CI 拆分为 PR 快速矩阵与夜间/手动全矩阵。
明确 smoke / core / full / docs 四层验证策略。
清理
examples/output/这类生成产物的版本管理策略。盘点大体量测试数据,标注“核心保留 / 可压缩 / 可外置 / 可生成”。
建立新增大文件的准入规则和审查标准。
交付物:
分层 CI 方案
仓库资产治理清单
大文件与生成物管理规范
6. 里程碑¶
Milestone 1:基线固化(1 周)¶
完成问题审计与优先级分级
修复文档覆盖扫描工具
确认 README / setup / CI 元数据差异清单
Milestone 2:关键路径收敛(1~2 周)¶
关闭
cerebro.py/bbroker.py/feed.py中的 P0 问题补齐关键回归测试
输出运行链语义说明
Milestone 3:边界解耦(1 周)¶
完成
TradeLogger相关通知链梳理引入显式 observer 事件接口或适配层
保证现有日志功能兼容
Milestone 4:工程治理落地(1 周)¶
CI 分层方案生效
生成产物和大文件治理规则落地
形成下一轮迭代的可度量基线
7. 验收标准¶
7.1 稳定性验收¶
本轮纳入范围的关键
TODO/FIXME均有结论,不保留“含义未知但继续放着”的状态。关键运行链改动必须具备回归测试覆盖。
TradeLogger相关运行时测试全部通过。
7.2 工程化验收¶
tools/doc_coverage_scanner.py可稳定输出报告文件。README、CI、包元数据中的 Python 版本与许可证信息保持一致。
CI 至少形成一套“快速反馈”路径,PR 不再默认跑全部 18 组全量矩阵。
7.3 仓库治理验收¶
examples/output/等生成产物有明确的版本管理结论。大文件清单完成分级,并给出后续迁移策略。
新增资产准入规则形成文档并纳入评审要求。
8. 风险与应对¶
风险 |
影响 |
应对 |
|---|---|---|
清理历史分支时引入行为回归 |
核心回测结果变化 |
先补测试,再动逻辑;对关键策略建立基线对比 |
|
日志功能不可用 |
保留旧 API,先引入适配层,再逐步迁移 |
CI 分层后出现“快测通过,慢测失败” |
质量信号延迟暴露 |
保留夜间/手动全矩阵,并将失败结果回灌到 PR 模板 |
大文件治理牵涉历史数据依赖 |
测试/示例不可复现 |
先做分级和替代方案,不一次性删除 |
9. 建议的执行顺序¶
先修工具链和元数据一致性,建立可信基线。
再处理
cerebro/bbroker/feed等关键路径遗留项。然后做 observer/logging 解耦,减少后续侵入式改动。
最后推进 CI 分层和仓库资产治理,将本轮成果制度化。
10. 本轮完成后的预期收益¶
完成本轮后,项目会得到以下直接收益:
核心运行链更可读、更可测;
日志与监控能力不再持续侵入策略主链;
文档和发布信息对外口径一致;
PR 反馈速度和仓库治理质量都有明确改善;
为后续性能优化、实盘接入和新功能迭代提供更稳的工程基础。