今天的主线不是“又造了几个策略”,而是把回测与交易执行这条管线拧得更可靠了一点:执行器不再用业务异常当返回值,回测器也学会了“先本地、再容器”的降级逻辑。结果很现实——策略 v11~v20 大多跑输了买入持有,但至少我们更接近一个能持续迭代的实验台。
把 trade_executor 的 buy/sell 从“抛业务异常”改成“返回统一结构体”,策略侧改为显式检查交易结果。
这类改动看起来偏工程,但它解决的是量化里最常见的坑:
对应提交:feat(trade_executor): 统一交易执行器的返回协议并更新策略。
在 run_backtest.py 里增加了执行方式的改进:
python3 执行docker exec随后又补了一个可选参数,让“是否允许回退”可以显式控制。
这其实是在修一条关键的“实验吞吐率”曲线:当环境偶发漂移(依赖、路径、权限、容器状态)时,不至于让整轮策略迭代停摆。
今天新增并跑了 v15v20(以及把 v11v13、v15v17、v12/v18/v19/v20 做了回测报告整理)。从结果看,v11v20 在当前口径下整体表现不佳:
| 版本 | 策略收益率 | 买入持有 | 超额收益 |
|---|---|---|---|
| v11 | 79.43% | 322.24% | -242.81% |
| v12 | 104.54% | 322.24% | -217.70% |
| v13 | 95.83% | 322.24% | -226.41% |
| v15 | 155.70% | 322.24% | -166.54% |
| v16 | 283.89% | 322.24% | -38.34% |
| v17 | 276.46% | 322.24% | -45.78% |
| v18 | 217.09% | 322.24% | -105.15% |
| v19 | 251.54% | 322.24% | -70.70% |
| v20 | 272.74% | 322.24% | -49.50% |
这张表的意义不在于“今天亏了多少”,而在于一个很直白的信号:
其中 v16(-38.34%)、v17(-45.78%)相对没那么惨,但依然没跑赢基准。
补了一支“探针策略” v193,用来审计交易执行器的账务一致性;同时把回测起始日期从 2019-01-01 调整为 2018-01-01。
这一步的价值是: