# v0.29 策略相关性与组合验证

## 使用范围

在「自选历史研究」采集或导入连续的真实 USDT 现货快照，选择「v0.29 · 策略分散与组合验证」，登记并运行实验。支持工作区自选币种、4h / UTC 日线。一次实验只比较同一币种、交易所、周期、快照和成本下的 C01 / C02 / C03 / C04 / C06。

本版是五策略的独立资金组合研究，不是跨币种资产配置。训练筛选组合与五策略等权组合使用完全相同的策略选参结果。两者现金和敞口可能不同，收益差异不能单独归因于分散效果。组合不进入自动扫描、持仓事件、模拟账户、推送或真实交易。

## 训练、筛选与初始分配

沿用 v0.27：260 根指标预热，365 天训练、1 根隔离、90 天测试，依次滚动。仅使用完整测试窗口。每项策略在既定参数邻域按训练 Sharpe 选参；原选参过程在训练成交不足时回退固定参数。新增组合筛选仍要求其最终参数具备足够的训练证据，不因该回退而自动入选。

| 组合参数 | 默认 | 可配置范围 |
|---|---:|---:|
| 正相关筛除阈值 | 0.80 | 0–1 |
| 单策略初始资金上限 | 40% | 20–100% |
| 最低训练 Sharpe | 0 | −2–3 |
| 共同回撤诊断阈值 | 5% | 1–30% |

每个窗口先冻结训练结果，再计算测试路径：

1. 以训练期至少 5 笔完成交易、有限且达到阈值的 Sharpe、正的有限净值波动率作为候选条件。
2. 按训练 Sharpe 降序；同分按策略 ID 排序。
3. 逐一检查与已入选策略的训练净收益相关系数；正相关严格大于阈值则排除。负相关可以入选；相关性不可估计也排除，并记录原因与对照策略。首个合格策略没有配对约束。
4. 对入选策略按训练期实际年化净值波动率倒数分配，波动率分母下限固定为 1%。归一化后逐项裁剪至初始资金上限，不重新分配被裁剪的资金，剩余作为零收益现金。
5. 无合格策略时该窗口持有 100% 现金；不借用测试结果挑选替补。

公式：`raw_i = 1 / max(trainVolPct_i, 1)`；`weight_i = min(maxWeightPct / 100, raw_i / sum(raw))`；`cash = 1 − sum(weight_i)`。

这是训练波动率倒数分配，不是严格风险平价。候选库 M03 的协方差风险预算及原建议再平衡规则尚未实现；C07 独立动量方向信号也仍为候选。本版不宣称复现附件自报收益。

## 资金与成交模型

每窗口初始组合研究资本 10,000 USDT，分别分配给独立的策略资金份额。各份额内使用已冻结的固定仓位模型：每次入场预算为该份额净值的 40%（包含买入成本），持有期间不主动再平衡。等权对照的五项初始资金份额各为 20%，初始未分配现金为零，但策略份额内仍有未投入资金。

组合资金只在窗口开始分配，窗口内不在策略间转账；各策略盈亏导致实际权重漂移。单项上限只约束窗口初始资金分配，不是实时持仓硬上限。不同策略即使同时交易同一币种，也各自计买卖成本，不做成交净额合并。

执行沿用固定仓位模型：上一根收盘信号、下一根开盘成交；保护单优先，止损止盈同根触及时止损优先；开盘跳空止损使用更差开盘价格，跳空止盈保守使用原目标价。每次买卖含手续费和不利滑点，末端强制扣费清仓。成本压力情景沿用原实验的每边手续费 +10 bp、滑点 +5 bp，各自封顶 100 bp，使用同一组事前权重，不重新筛选。

组合每根净值为：`cash × 100 + sum(weight_i × sleeveEquity_i / 100)`，其中每条份额曲线初始净值为 10,000。没有隐含的逐根组合再平衡。各测试窗口独立空仓起步、末端清仓，再复合成起点 100 的研究指数；这不是连续账户。

## 相关性、重叠与回撤

页面可分别查看所选窗口训练期、测试期及全部测试窗口的 5 × 5 矩阵：

| 指标 | 定义 |
|---|---|
| 净收益相关系数 | 对齐逐根简单净值收益的 Pearson 相关，包含实际交易成本；近乎常数的序列显示不可估计 |
| 收盘持仓重叠 | 同时持仓根数 / 至少一方持仓根数；双方从未持仓时不可估计 |
| 共同回撤占比 | 双方同时较各自窗口净值峰值下跌至少指定阈值的根数 / 全部观察根数 |
| 同时持仓占比（报告） | 同时持仓根数 / 全部观察根数 |
| 同时亏损占比（报告） | 双方逐根净收益同时为负的根数 / 全部观察根数 |

全测试诊断将各测试窗口的观测顺序拼接；每窗口的诊断回撤峰值重新开始，不在未测试间隔插入虚构收益。它不等于连续账户的共同回撤。共同回撤阈值只影响诊断，不影响分配。

训练矩阵来自训练净值；测试矩阵是事后诊断，绝不进入事前筛选或初始权重。改变未来测试行情不会改变已有训练选择和权重。

## 组合指标与对账

- 收益：链接各窗口的扣费净收益。最大回撤：链接后的完整收盘净值峰谷，包含末端结算费用。
- 实际年化波动：测试期逐根简单净收益的样本标准差（分母 n−1），乘 `sqrt(365.25 × barsPerDay)`；4h 每天 6 根、日线每天 1 根。
- 平均 / 最大敞口：组合各策略收盘持仓市值之和 / 组合净值。v0.29 的窗口最后一点使用清仓后零敞口；v0.28 独立仓位报告的汇总敞口保留其原来的末端结算前口径，不重写旧结果。
- 成交笔数：仅统计得到正资金分配的策略完成交易；不把一笔买入和一笔卖出重复当作两笔交易。
- 手续费、滑点和单边换手：先按份额资金缩放，再按进入窗口时的链接资本换算，最终均相对于整段研究初始资本。滑点已在成交价中体现，不再重复扣除。
- 每项测试贡献：该窗口初始资金权重 × 该策略份额净收益，单位为组合收益百分点。各项贡献之和等于该窗口组合收益；不同窗口贡献不直接相加解释复合收益。

完整组合报告含每窗口训练摘要、两组相关性诊断、筛选原因、现金比例、贡献，以及等权 / 筛选 / 压力三种情景的逐笔记录。每窗口逐笔数量、手续费、滑点、剩余现金已按初始资金份额缩放，统一相对于窗口初始组合资本 10,000；跨窗口金额需另乘该情景的进入窗口链接资本比例。未分配现金为 `10,000 × cashPct / 100`。

逐笔 `weightAfterPct`、`targetWeightPct` 仍表示策略份额内部的仓位，不能当作整个组合权重。OHLC 无法提供真实柱内成交时刻，保护单时间记为该根结束时间，信号成交记为开盘时间。账本是研究执行模型，不能替代交易所成交记录。

## 保存、复算及恢复

配置版本 `research-experiment-0.29.0`，组合版本 `portfolio-validation-0.29.0`。五项原始选参报告继续使用 `validation-history-0.27.0`，不混入 v0.28 动态仓位叠加。配置、组合协议、数据哈希及五项报告身份共同确定实验身份。

浏览器计算，先登记冻结配置，再提交工作区隔离的摘要；终态不可覆盖。完整研究包包含快照、五项报告和组合报告，上限仍为 32 MiB。云端保留配置、状态和客户端摘要（`client_computed`），不声称服务端重新验证收益，也不保存完整行情和逐笔数据。离开页面前请下载完整研究包；单独的组合报告不包含复算所需快照。

导入研究包先校验结构、来源元数据和哈希，再重新计算比较结果；导入收益不直接作为本次计算结果展示。哈希证明文件一致性，不认证行情来源。离线工具识别三种版本：

```sh
node scripts/reproduce-research.mts --file package.json --out reproduction.json
```

沿用绝对 1e-8 + 相对 1e-10 的数值比较容差，同时报告精确哈希是否一致。v0.27、v0.28 冻结样例结果保持不变。

没有新数据库迁移，仍为 35 张业务备份表。恢复工具支持三代实验共存，核对组合参数、窗口维度和资金和为 100%。旧 v0.28 恢复工具冻结在 `public/integration/v028/`；`release-v029.json` 新增必需模型 `research-portfolio-v1`，阻止直接回退到不认识组合记录的旧程序。应用回退应使用兼容修复版本，不能删除新实验来绕过检查。

本版自动验证中的合成行情仅用于验证因果关系、核算、权限、恢复与容量，不是新增投资绩效证据。仍属于回顾式滚动研究，不能声称盲测样本外验证或保证盈利。
