第 14 篇已经能保存策略实验记录。现在要回答一个更关键的问题:哪些候选策略可以进入下一阶段?
第 15 篇实现策略晋升门禁。它不是判断策略能不能赚钱,而是判断这个候选是否具备进入纸面模拟盘观察的最低证据。

为什么要有门禁
没有门禁,策略研究会变成“谁的收益曲线更好看,谁就上线观察”。
这很危险。候选策略至少要回答:
- 总收益是否达到最低要求?
- 最大回撤是否没有太深?
- 交易次数是否不是 0?
- 是否清过基准策略?
这里的“晋升”不是上实盘,而是进入纸面模拟盘观察。它仍然只是下一阶段,不是最终认可。更严格的流程通常还会继续要求样本外验证、不同市场状态下的表现、交易容量检查、成本和滑点压力测试,以及人工复核。
晋升规则
第 15 章新增 app/promotion_gate.py。
@dataclass(frozen=True)
class PromotionRule:
min_total_return: float = 0.02
max_drawdown_floor: float = -0.2
min_trade_count: int = 1
require_baseline_passed: bool = True
这些阈值不是最终生产标准,只是第一版最低门槛。真实上线前还需要样本外、长历史、多市场状态和人工复核。
决策对象
门禁输出 PromotionDecision:
@dataclass(frozen=True)
class PromotionDecision:
accepted: bool
status: str
reasons: tuple[str, ...]
evidence: dict[str, Any]
reasons 很重要。被拒绝不是一句“不行”,而是明确告诉你为什么不行:收益太低、回撤太深、交易太少、没有清过基准。
收集所有拒绝原因
判断函数不会遇到第一个问题就返回,而是收集全部原因:
if total_return < rule.min_total_return:
reasons.append("total_return_below_minimum")
if max_drawdown < rule.max_drawdown_floor:
reasons.append("max_drawdown_too_deep")
if trade_count < rule.min_trade_count:
reasons.append("trade_count_too_low")
if rule.require_baseline_passed and not baseline_passed:
reasons.append("baseline_not_cleared")
这样后续前端或报告可以一次性告诉研究者该修哪里。
当前主线联动运行
第 15 篇继续使用同一条命令,把第 14 篇生成的实验记录送进晋升门禁:
uv run python -m scripts.chapter_examples strategy-promotion --source sample
真实输出如下:

这次样例的决策是 accepted_for_paper_observation。证据里能看到:总收益 0.119814,最大回撤 -0.025908,交易次数 1,并且 baseline_passed=True。这些条件都只是最低门槛,不代表策略已经可靠;它只说明这个候选有资格进入后面的模拟盘观察。
本章更新与代码仓库
本章更新内容:
- 新增
app/promotion_gate.py。 - 实现策略晋升规则、晋升决策、payload 输出和批量候选摘要。
- 新增
tests/test_promotion_gate.py,覆盖通过、拒绝、关闭基准要求和原因统计。 - 补充当前主线联动示例的策略晋升真实运行截图。
- 补充纸面模拟盘观察、样本外验证、交易容量和压力测试的策略准入背景。
- 完成第 11-15 篇阶段 review。
代码仓库:
https://github.com/ax2/zi-quant-platform
本章代码:
git clone https://github.com/ax2/zi-quant-platform.git
cd zi-quant-platform
git checkout chapter-15
uv sync --extra dev
uv run pytest tests/test_promotion_gate.py
第 15 章全量测试通过:187 passed,仍只有既有 FastAPI deprecation warning。
第 11-15 篇阶段 review
第三组五篇完成了“组合回测到策略准入”的闭环。
第 11 篇把单标的回测扩展到多标的组合回测,增加等权资金分配、权益聚合和交易摘要。
第 12 篇补齐回测指标,让策略比较不再只看最终收益。
第 13 篇实现参数网格搜索,生成可排序的策略候选。
第 14 篇把候选和基准比较保存成实验记录,避免研究结果只停留在终端输出。
第 15 篇增加策略晋升门禁,只有满足最低收益、回撤、交易次数和基准比较的候选,才允许进入纸面模拟盘观察。
这一组文章没有引入大模型,也没有直接推进模拟盘执行。原因很简单:策略候选如果没有严肃的回测指标和晋升规则,后面接再多自动化都只是放大噪声。
本篇小结
策略晋升不是“收益更高就过”。
一个候选必须有实验记录、有基准比较、有最低收益、有可接受回撤、有足够交易次数。第 15 篇把这些要求写成了可测试代码。下一组文章会进入纸面模拟盘,把通过门禁的候选放进可观察的组合状态里。

567

被折叠的 条评论
为什么被折叠?



