11 个权重类含限额与目标波动
6 个再平衡/成交类Rebalance / RebalanceOverTime 等
依赖 selected权重算法依赖选券结果
证据bt/algos.py(2026-09-20)
Weight algos
权重算法有哪些、分别适合什么场景?
下表把权重相关算法按「需要什么输入 / 适用场景 / 注意点」列清楚,方便按研究问题选择。
| bt 权重算法 | 需要什么输入 | 适用场景 | 注意点 |
|---|---|---|---|
WeighEqually | 仅需选券结果 | 基准组合、等权对照 | 最常用;上一步没有 selected 时无权重可用 |
WeighSpecified | 手工指定的权重 | 固定配置(如 60/40) | 权重之和与杠杆上限以实现为准 |
WeighTarget | 目标权重序列 | 按外部信号给权重 | 序列长度要覆盖回测区间 |
WeighInvVol | 波动率估计 | 降波动、风险均衡 | 估计窗口不足时结果会退化 |
WeighERC | 协方差估计 | 风险平价 | 对估计误差敏感,需做稳健性测试 |
WeighMeanVar | 收益与协方差估计 | 经典均值方差优化 | 输入估计决定结果,谨慎解读 |
ScaleWeights | 已有权重 | 整体缩放(含留现金) | 常与选券类算法配合使用 |
LimitWeights / LimitDeltas / TargetVol | 上限 / 换手阈值 / 目标波动 | 风控与换手控制 | 放在权重之后、再平衡之前生效 |
Rebalance
再平衡算法之间差在哪?
再平衡是把「目标权重」变成交易的机制,bt 提供多种方式,差别在「一次调到位还是分次调」「要不要限换手」。
| bt 再平衡算法 | 行为 | 适用场景 | 注意点 |
|---|---|---|---|
Rebalance | 把持仓调整到目标权重(差额成交) | 常规月度/季度再平衡 | 通常放在算法链最后;不写它就不会成交 |
RebalanceOverTime | 把调整分摊到多个周期完成 | 大额调仓、降低冲击 | 分摊期数与调度频率要匹配 |
PTE_Rebalance | 按阈值触发再平衡 | 只在意偏离容忍度 | 阈值越小换手越高 |
LimitDeltas | 限制单期权重变化幅度 | 控制换手与成本 | 会牺牲跟踪精度,需权衡 |
CapitalFlow | 处理外部资金流入流出 | 定投、资金分期投入 | 现金流假设要写清 |
SetNotional | 按名义金额设置仓位 | 固定金额建仓 | 与按权重分配的算法用法不同 |
Example
等权月度再平衡怎么改成别的方案?
以官方 README 的示例为基线,只改一个算法就能做对照实验——这正是 bt 算法树的用途,也是 bt 与逐根 K 线式回测库最明显的写法差异。
| 改哪里 | 改成什么 | 得到什么方案 | 注意点 |
|---|---|---|---|
| 调仓频率 | RunMonthly → RunWeekly | 周度等权再平衡 | 换手上升,必须叠加成本模型再比较 |
| 权重方式 | WeighEqually → WeighInvVol | 逆波动加权 | 需要波动率估计窗口 |
| 选券范围 | SelectAll → SelectN(3) | 只持前 3 名 | 集中度上升,需看 herfindahl_index |
| 成交方式 | Rebalance → RebalanceOverTime | 分步建仓 | 分摊期数影响跟踪误差 |
| 加风控 | 权重后插 LimitWeights | 单券上限约束 | 上限会改变有效权重分布 |
| 加成本 | Backtest 配成本模型 | 含摩擦的净收益 | 成本假设要写进报告,见「成本与固收」页 |
对照纪律:一次只改一个变量,并固定区间、标的池与成本假设,否则无法判断差异来自哪一环;结果口径以官方文档与 ffn 文档为准。
Misuse
权重与再平衡最容易误用在哪?
下面六种误用会让「代码跑得通、结论不可用」,属于自建回测最常见的问题。
| 误用 | 结果 | 怎么避免 |
|---|---|---|
| 只设权重不写再平衡 | 完全不成交,等于买入持有 | 算法链末尾检查是否有 Rebalance 类算法 |
| 用 SelectN 后忘了缩放 | 总权重不等于 1,仓位含义模糊 | 需要时补 ScaleWeights,并核对权重和 |
| 把 TargetVol 当收益目标 | 误以为波动目标能提高收益 | 它是风险约束,收益仍由权重与选券决定 |
| 每天调仓却用月度波动估计 | 权重与频率不匹配,结果不稳定 | 估计窗口与调仓频率对齐 |
| 忽略换手成本 | 高估净收益 | 叠加成本模型后重跑,比较税前税后 |
| 用单一参数下结论 | 把噪声当规律 | 对 N、窗口、阈值做敏感性测试 |
FAQ
bt 权重与再平衡常见问题
权重和为 1 和不为 1 有什么区别?
权重表达的是资金分配比例,和为 1 表示满仓;超过 1 涉及杠杆,低于 1 表示留存现金。不同权重算法的默认行为可能不同,涉及杠杆时请以官方实现与文档为准,并谨慎评估风险。
为什么换了权重算法后收益变化很大?
因为权重决定了资金集中在哪些标的上,同样的选券结果配上不同权重,风险暴露结构会完全不同。比较时应固定其他变量,并同时看回撤与集中度,而不是只看收益率。
再平衡频率选多高合适?
没有普适答案:频率越高通常越贴近目标权重,但换手与成本上升。做法是固定标的与权重方案,对比月、季、阈值触发三种方式的净收益与回撤,并记录成本假设。
LimitDeltas 和 RebalanceOverTime 有什么差别?
两者都用于减缓调仓速度:前者限制单期权重变化量,后者把调整分摊到多个周期完成。选择取决于你的约束是「换手上限」还是「执行节奏」,具体参数以官方文档为准。
可以完全不调仓吗?
可以,用 RunOnce 只在期初建仓,等价于买入持有,常作为对照基准;它不代表策略,只用于提供比较基线。
这些权重算法在实盘也能用吗?
bt 是回测库,权重算法只在本库的回测流程内生效,不包含实盘下单通道;把权重规则移植到实盘需要自建执行与风控系统。