Files
tick-stock-panel/backend/app
kevin9327 e5f7f625fb fix(backtest): 信号回测统计里的 inf/NaN 不再让接口返回 500
_json_safe 先命中 `isinstance(v, (int, float, str, bool))` 分支, 原生 float 的
inf/NaN 被原样放行; numpy 分支也只挡 NaN 不挡 inf。pf.stats() 经 pandas
Series.to_dict() 出来时 numpy 标量已装箱成原生 float, 所以清洗实际全部落空。

Starlette 的 JSONResponse 用 json.dumps(allow_nan=False) 渲染, 响应体里出现
一个 inf/NaN 就是整个 POST /api/backtest/run 500
(ValueError: Out of range float values are not JSON compliant)。全部交易都盈利时
Profit Factor = inf、零波动时 Sharpe = NaN 都会触发。

把非有限判定提到原生标量分支之前, 与 app/api/backtest._json_safe 同口径。
2026-09-10 19:38:33 +09:00
..