# BTC / ETH / SOL 多资产 Walk-forward

最后更新：2026-07-19

## 数据边界

- 每个资产只读取自己的 `symbol_YYYY-MM-DD_depth20.jsonl.gz` 与 `aggtrade.jsonl.gz`。
- 只选择最近一个已经压缩完成的交易日，不读取当天仍在增长的明文文件。
- 深度与成交分别进行完整日等距抽样，默认每资产最多 12,000 个盘口快照和 60,000 笔成交。
- 报告记录首尾时间；覆盖不足 12 小时会直接标记 `insufficient`。
- 新闻文件按同一完成日关联，缺失时回测继续执行但明确记录为无新闻数据。

## 样本外流程

每个资产独立执行四折 expanding walk-forward：

1. 第一段作为初始训练窗。
2. 每个后续折只使用此前数据选择轻量参数。
3. 选出的参数在下一折纯样本外运行。
4. 汇总 OOS 收益、真实有交易折的胜率/PF、回撤、交易数和正收益折数。
5. 对每个参数统计折间投票、一致率和唯一值数量。

无交易折不会再以 `PF=999` 参与组合 PF，避免虚高。

## 研究门槛

资产只有同时满足以下条件才标记为 `candidate`：

- 窗口不少于 12 小时。
- 至少两个有效 OOS 折。
- OOS 交易不少于 20 笔。
- 平均 OOS 收益为正。
- 实际有交易折合并 PF 不低于 1。
- 正收益折不少于三分之二。
- 建议参数在折间达到至少三分之二一致率。

否则标记为 `watch` 或 `insufficient`。

## 安全策略

报告中的 `automatic_parameter_apply` 永远为 `false`。即使达到候选门槛，也只生成研究建议，不修改 `asset_params.json`、模拟账户或自动策略。

## 运行

```bash
sudo systemctl start warroom-walkforward.service
sudo systemctl status warroom-walkforward.service
journalctl -u warroom-walkforward.service -n 100 --no-pager
```

每日定时器：

```bash
systemctl status warroom-walkforward.timer
systemctl list-timers warroom-walkforward.timer
```

只重建汇总、不重新运行回测：

```bash
cd /var/www/yc2.flha.ru
python3 multi_asset_walkforward.py \
  --data-dir data \
  --symbols BTCUSDT,ETHUSDT,SOLUSDT \
  --json-out data/walkforward_multi_latest.json \
  --legacy-output data/walkforward_latest.json \
  --report-only
```

## 输出

- `/api/backtest/walkforward-multi`
- `/var/www/yc2.flha.ru/data/walkforward_multi_latest.json`
- `/var/www/yc2.flha.ru/data/walkforward_assets/walkforward_<symbol>_latest.json`
- `https://yc3.flha.ru/backtest.html`
