Skip to content

v0.5.2 回测提速 + JSON 严格化

Choose a tag to compare

@oldfunk oldfunk released this 19 Oct 12:20
· 297 commits to main since this release

v0.5.2 — 回测提速 + JSON 严格化

上一版修好了账,这一版让工具好用:参数网格从"几分钟没反应"变成秒级,
面板的网格结果不再静默卡住。

提速:参数网格从几分钟到 23 秒

回测器原来每个交易日都线性扫一遍 K 线找当天收盘(days × bars × 变体数),
参数网格一轮 32 个变体 × 250 天 × 4 只票,代价是几百万次无谓扫描。

改法:

  • 每只票建一次 {day: close} 价格索引,查询 O(1)
  • 规则判定需要的"截至某日的收盘序列"用二分切点定位后切片(O(log n + k))
  • 基准买入持有同样走索引

效果:Pi 上 32 变体 × 250 日 × 4 票 = 23 秒(原来好几分钟)。
面板默认用 120 日(更快),要 250 日用 CLI。

修:面板参数网格静默卡住

真机上点"参数网格",页面永远停在"搜索中…",控制台报
SyntaxError: Unexpected token 'I', ... "_factor": Infinity。

原因:profit_factor 在"没有亏损单"时是 float('inf'),json.dumps 写成
Infinity —— 这不是合法 JSON,浏览器的 response.json() 直接抛异常,
整块功能连报错都没有。

两处都改了:

  • 源头:profit_factor 无亏损时用 None(表示"无亏损"),不再是无穷
  • 加了一层安全网:paper_trading/utils/jsonx.py 的 safe() 递归把
    NaN / ±Infinity 换成 null;面板与 CLI 的所有 JSON 出口都过一遍,
    并用 allow_nan=False 卡死(漏了就直接报错,不静默吐非法 JSON)

新增 tests/test_json_safety.py 锁定。

面板小修

  • 撤销条件单后给出明确回执(之前状态栏还留着上一条错误信息)
  • 网格结果附注"另有 N 组几乎不触发已剔除"
  • 回测的"注意"只提示配置/数据级问题(没有 symbol 的那类),逐笔跳过原因不刷屏

验证

129 个离线单测全绿。Pi 真机验证:面板回测、参数网格、挂条件单、撤销条件单、
非法代码 fail-closed,浏览器端全部走通,控制台无报错。

兼容性

无 schema 变更、无配置项变更。