bt / weights & rebalance

bt 权重与再平衡:组合怎么分配、什么时候调仓

在 bt 里,bt 的算法链最终要产出一个「目标权重」,再由再平衡算法把目标权重变成交易。理解权重算法与再平衡算法的分工,就理解了为什么「换了权重算法,结果完全不同」而「不写再平衡算法,结果等于买入持有」。

输入:选券结果 selected输出:目标权重 weights依据:bt/algos.py 契约

权重到成交

目标权重
WeighX
限额风控
Limit/TargetVol
再平衡
Rebalance
bt 的权重算法只写目标值;限额算法在权重之后修正;再平衡算法负责把差额变成交易。
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 线式回测库最明显的写法差异。

改哪里改成什么得到什么方案注意点
调仓频率RunMonthlyRunWeekly周度等权再平衡换手上升,必须叠加成本模型再比较
权重方式WeighEquallyWeighInvVol逆波动加权需要波动率估计窗口
选券范围SelectAllSelectN(3)只持前 3 名集中度上升,需看 herfindahl_index
成交方式RebalanceRebalanceOverTime分步建仓分摊期数影响跟踪误差
加风控权重后插 LimitWeights单券上限约束上限会改变有效权重分布
加成本Backtest 配成本模型含摩擦的净收益成本假设要写进报告,见「成本与固收」页
对照纪律:一次只改一个变量,并固定区间、标的池与成本假设,否则无法判断差异来自哪一环;结果口径以官方文档与 ffn 文档为准。
Misuse

权重与再平衡最容易误用在哪?

下面六种误用会让「代码跑得通、结论不可用」,属于自建回测最常见的问题。

误用结果怎么避免
只设权重不写再平衡完全不成交,等于买入持有算法链末尾检查是否有 Rebalance 类算法
用 SelectN 后忘了缩放总权重不等于 1,仓位含义模糊需要时补 ScaleWeights,并核对权重和
把 TargetVol 当收益目标误以为波动目标能提高收益它是风险约束,收益仍由权重与选券决定
每天调仓却用月度波动估计权重与频率不匹配,结果不稳定估计窗口与调仓频率对齐
忽略换手成本高估净收益叠加成本模型后重跑,比较税前税后
用单一参数下结论把噪声当规律对 N、窗口、阈值做敏感性测试
FAQ

bt 权重与再平衡常见问题

权重和为 1 和不为 1 有什么区别?

权重表达的是资金分配比例,和为 1 表示满仓;超过 1 涉及杠杆,低于 1 表示留存现金。不同权重算法的默认行为可能不同,涉及杠杆时请以官方实现与文档为准,并谨慎评估风险。

为什么换了权重算法后收益变化很大?

因为权重决定了资金集中在哪些标的上,同样的选券结果配上不同权重,风险暴露结构会完全不同。比较时应固定其他变量,并同时看回撤与集中度,而不是只看收益率。

再平衡频率选多高合适?

没有普适答案:频率越高通常越贴近目标权重,但换手与成本上升。做法是固定标的与权重方案,对比月、季、阈值触发三种方式的净收益与回撤,并记录成本假设。

LimitDeltas 和 RebalanceOverTime 有什么差别?

两者都用于减缓调仓速度:前者限制单期权重变化量,后者把调整分摊到多个周期完成。选择取决于你的约束是「换手上限」还是「执行节奏」,具体参数以官方文档为准。

可以完全不调仓吗?

可以,用 RunOnce 只在期初建仓,等价于买入持有,常作为对照基准;它不代表策略,只用于提供比较基线。

这些权重算法在实盘也能用吗?

bt 是回测库,权重算法只在本库的回测流程内生效,不包含实盘下单通道;把权重规则移植到实盘需要自建执行与风控系统。

数据准备好之后,接下来两步做什么?

先用示例数据把整条链路跑通,再回来看策略与指标的写法,避免在数据源上卡住。