程序员量化交易实战 15:策略晋升必须有门禁

第 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 篇把这些要求写成了可测试代码。下一组文章会进入纸面模拟盘,把通过门禁的候选放进可观察的组合状态里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值