第 22 课 仓位、再平衡与风险预算¶
信号回答更愿意持有什么,组合构建还要回答持有多少、风险从哪里来,以及账户怎样用真实订单靠近目标。
四个好信号仍然可能组成一项集中押注¶
假设因子模型选出四项高分资产。甲和乙都属于银行,丙与甲虽然行业不同,历史上却经常一起波动,丁的日常波动又是其他资产的三倍。若账户把四项各买 25%,名义金额看起来分散,风险可能仍然集中在金融环境与高波动的丁上。
组合是同一账户中所有现金、资产与策略头寸的集合。仓位表示每项资产实际持有多少,权重表示它的市值占总权益的比例。目标权重是研究者希望达到的比例,实际权重则由成交、价格变化、整数数量和现金共同决定,两者不会永远相同。
组合构建把信号翻译成目标权重,再经过集中度、行业、波动、相关、流动性和换手约束形成订单。它不创造信号,只决定账户怎样承受信号。再好的单项判断,仓位过大或关系过于集中时,仍然可能让一次普通冲击超过账户预算。
flowchart LR
accTitle: 从信号到可执行组合的完整路径
accDescr: 原始分数先确定候选资产,权重方法给出初始目标,风险与集中约束调整目标,交易约束再考虑现金、整数数量、换手和容量,成交后才形成实际组合
signal["信号与分数"] --> select["选择候选资产"]
select --> weight["生成初始目标权重"]
weight --> risk["风险、行业与集中约束"]
risk --> trade["现金、整数、换手与容量"]
trade --> order["生成买卖订单"]
order --> actual["成交后的实际权重"]
actual --> monitor["监控偏离与风险,再决定是否再平衡"]
等权先提供一条不依赖复杂估计的基线¶
四项资产等权时,每项目标权重为 25%。若账户有 10000 元,并暂时忽略价格整数限制,每项计划投入 2500 元。等权不预测哪项未来收益更高,也不估计协方差,计算透明,另一位读者很容易复现。
有 \(N\) 项入选资产时,等权可以写成 \(w_i=1/N\)。这个简单关系不需要优化器。下面代码输入一列分数,选出排名前十项,再把总权重平均分配。运行后应检查入选权重之和为 1,未入选项为 0。
selected = score.rank(ascending=False) <= 10
weight = selected.astype(float) / selected.sum()
assert abs(weight.sum() - 1.0) < 1e-10
等权表示相同资金,不表示相同风险。某项资产波动 30%,另一项只波动 10%,两者各占 25% 时,前者通常会对组合日常起伏贡献更多。等权还可能给低流动性微盘与大型资产相同金额。它仍然是强基线,因为复杂方法必须证明额外估计与交易确实带来稳定增量。
价格变化会让实际权重离开目标¶
账户最初把甲乙各配 50%,两项各值 5000 元。一个月后甲上涨 20% 变为 6000 元,乙不变仍为 5000 元,总权益为 11000 元。甲实际权重变成 6000 除以 11000,约 54.55%,乙约 45.45%。即使没有新信号,价格变化也会让组合漂移。
再平衡是通过买卖让实际权重重新靠近目标的过程。若要回到各 50%,每项目标市值为 5500 元,需要卖出甲 500 元并买入乙 500 元,尚未计算费用与整数股。这个动作会实现一部分甲的盈利,也会产生换手和税费。
每天精确回到目标会频繁交易。研究者可以按周或按月检查,也可以设置无交易区,例如实际权重偏离目标不足 3 个百分点时不动,超出以后才下单。无交易区允许少量跟踪误差,用来交换更低成本。阈值也需要与不设阈值的基线比较,不能根据历史最优反复选择。
逆波动权重尝试让高波动资产少占资金¶
假设甲年化波动 10%,乙年化波动 20%。逆波动先分别取倒数,得到 10 与 5,再把它们除以总和 15。甲目标权重为三分之二,乙为三分之一。波动较高的乙得到较少名义资金。
对多项资产,逆波动权重可以写成下面的形式。
\(\sigma_i\) 是资产 \(i\) 的历史波动估计。下面代码输入多资产收益表,使用过去六十期样本标准差估计波动,再逐日归一化倒数。历史不足与波动为零的资产应保持为空,结果还要设置单项上限。
volatility = returns.rolling(60, min_periods=60).std()
inverse_volatility = 1 / volatility.replace(0, np.nan)
weight = inverse_volatility.div(inverse_volatility.sum(axis=1), axis=0)
逆波动没有使用资产之间的共同变化。两项低波动资产若高度相关,组合仍然押在同一风险来源上。近期波动异常低还会抬高权重,估计随后跳升时,账户可能来不及降仓。因此要设置单项上限、杠杆上限与波动压力。
相关性决定两项波动会不会叠在一起¶
两项资产各自波动 10%,各占组合 50%。若它们每天完全同向,组合仍会大致波动 10%;若一项上涨时另一项常下跌,部分变化会互相抵消,组合波动可能更低。单项波动相同,相关关系改变以后,组合风险也会改变。
两资产组合方差可以先写成可读的展开式。
\(w_A,w_B\) 是两项权重,\(\sigma_A,\sigma_B\) 是各自波动,\(\rho_{AB}\) 是相关系数。最后一项描述共同变化。相关为正时,它增加组合方差;相关较低或为负时,它减少波动叠加。
资产增加以后,可以用协方差矩阵集中保存每项波动与两两共同变化。协方差是两组收益共同偏离各自平均值的尺度,相关性则把它标准化到负 1 与正 1。若权重向量写作 \(w\),协方差矩阵写作 \(\Sigma\),组合方差可压缩成下面的矩阵形式。
矩阵写法方便计算,没有减少估计困难。十项资产需要十个单项方差与四十五对协方差;资产越多、历史越短,样本噪声越容易被优化器放大。
最小方差寻找历史估计下的低波动组合¶
最小方差组合会在权重和约束范围内,寻找 \(w^T\Sigma w\) 较小的方案。它不需要预测未来收益,只依赖协方差估计。若某项资产历史波动略低、相关结构恰好有利,优化器可能把大量权重给它。
优化器是按照数学目标寻找可行权重的程序。它会认真利用输入中的每个微小差异,也会认真放大估计误差。研究者需要设置单项上限、行业上限、最低持仓数和换手惩罚,并测试协方差窗口稍改以后权重是否完全翻转。
收缩估计会把噪声较大的样本协方差向更简单、稳定的结构拉近。它牺牲部分样本细节,换取较低估计方差。初学者可以先使用等权与逆波动,等理解矩阵与约束以后再引入专门优化工具。
均值方差还要预测未来收益¶
Markowitz 的均值方差框架同时考虑预期收益与协方差。研究者会在“更高预期收益”和“更低组合方差”之间作取舍。问题在于,未来平均收益通常比协方差更难估计,输入只改变很小一点,所谓最优权重就可能发生巨大变化。
常见目标可以写成预期组合收益减去风险惩罚。
\(\mu\) 是每项资产预期收益,\(\lambda\) 表示研究者对波动惩罚的程度。研究者需要先合理估计预期收益与协方差,并写清全部约束,这个公式才能回答明确问题。输出应展示权重集中、约束触边与输入扰动,不能只写“得到最优组合”。
Markowitz 原始研究的入口列在参考资料中。经典框架提供思考语言,不会替当前样本解决输入不确定性。
风险贡献追问每项资产带来多少组合波动¶
名义权重相同的资产,对组合波动贡献可以不同。某项资产自身波动高、又与其他持仓高度同向,它会提高更多组合风险。风险贡献把组合波动沿资产拆开,尝试回答“如果这项权重稍微增加,组合风险会怎样变化”。
资产 \(i\) 的常见风险贡献可以写成下面的形式。
\((\Sigma w)_i\) 表示资产 \(i\) 与整个组合共同变化的部分,乘以权重后得到它对组合波动的贡献。所有资产风险贡献加总会回到组合波动。公式适用于特定波动定义,尾部与流动性风险仍然需要另外报告。
风险平价尝试让各部分风险贡献接近,而不是让资金权重相同。若忽略相关性,它会接近逆波动;考虑相关以后需要数值求解。风险贡献“平等”也不表示未来亏损相同,协方差估计改变时,实际贡献会偏离目标。
风险预算允许不同资产承担不同份额¶
风险预算把组合可承受风险分给各资产或策略。例如账户计划让股票趋势承担 40% 估计波动,债券趋势 30%,商品 20%,现金替代 10%。权重求解会尝试让实际风险贡献接近预算。预算来自投资目标与风险承受能力,不能根据回测最好结果事后安排。
风险预算不会提高预期收益,也不会在危机中自动保护账户。平时相关较低的资产可能一起下跌,低波动资产可能因较高名义权重产生巨大损失,融资和去杠杆还会增加执行压力。预算表要同时写估计风险、实际权重、最大权重和压力损失。
波动率目标缩放的是整个组合¶
假设组合当前年化波动估计为 20%,目标波动为 10%。若其他条件允许,总仓位可以乘以 10% 除以 20%,也就是 0.5。组合波动估计只有 5% 时,比例为 2,意味着理论上需要两倍暴露;实际必须受到最大杠杆限制。
\(\hat\sigma_t\) 是当时估计的组合波动,\(\sigma_{\text{target}}\) 是目标,\(L_{\max}\) 是最大杠杆或暴露上限。缩放系数 \(L_t\) 乘在基础组合权重上。
下面代码输入基础组合每日收益,使用六十日窗口估计年化波动。任务是让高波动时缩小仓位、低波动时放大,但不超过 max_leverage。运行后要检查历史不足、波动接近零和跳跃日期。
estimated_volatility = portfolio_return.rolling(60).std() * np.sqrt(252)
leverage = (target_volatility / estimated_volatility).clip(upper=max_leverage)
波动估计天然滞后。剧烈下跌发生以后模型才明显降仓,可能在低位卖出并错过反弹;平静期不断加杠杆,又会在突然跳空前处于最高暴露。目标、窗口、调整速度与上限都要进入压力测试。
Kelly 公式展示估计误差怎样放大仓位¶
Kelly 准则在概率分布已知时,寻找长期对数财富增长最大的下注比例。最简单的二项结果可以写成 \(f^*=p-(1-p)/b\),其中 \(p\) 是获胜概率,\(b\) 是盈利相对于亏损的赔率。
现实策略的胜率与赔率都来自有限回测,微小估计误差会明显改变建议仓位。市场分布还会变化,连续亏损、相关头寸和流动性都不符合简单二项假设。因此 Kelly 更适合作为“优势估计不确定时不能满仓”的思想实验。若使用,常采用一半或更小比例并设置硬上限,不能根据短样本直接满 Kelly 投入。
有效资产数帮助识别名义分散中的集中¶
四项等权时,权重平方和为四个 0.25 平方相加,得到 0.25。用 1 除以 0.25,得到有效资产数 4。若一项权重 70%,另外三项各 10%,平方和为 0.52,有效资产数约为 1.92。组合名义上持有四项,权重集中程度更接近两项等权。
有效资产数只看权重,没有考虑相关。两项完全同向的资产即使各占 50%,仍然接近同一个风险来源。组合报告还要列前五大权重、行业权重、相关风险簇和压力损失。
约束可能互相冲突¶
研究者可能同时要求行业完全中性、每项不超过 10%、至少持有二十项、换手很低并保持高因子暴露。候选池太小时,这些要求可能无法同时满足。优化程序找不到解时,应报告冲突,不能静默放宽某项约束再把结果称为原计划。
目标权重还是连续小数,真实订单需要整数股、最小交易单位和现金缓冲。某项价格 3000 元、目标金额只有 1500 元时,小账户无法买入一份。把权重四舍五入成数量以后,要重新计算实际权重与风险,不能继续使用理论比例记账。
再平衡策略要同时管理偏离与成本¶
日历再平衡规定每周、每月或每季度检查一次,阈值再平衡则在实际权重偏离目标超过范围时行动。二者也可以结合,例如月末检查,但只有偏离 3 个百分点以上才交易。不同规则会改变换手、跟踪误差与风险响应速度。
订单可以优先使用新增现金修复低配资产,减少不必要卖出;也可以设置最小交易金额,避免费用下限吞掉小单。回测要使用实际成交数量更新持仓,并把未成交延续到后续日期或按规则撤销。
目标组合每天看起来更“准确”,不代表净结果更好。复杂权重若只降低少量历史波动,却显著增加换手、容量压力和估计依赖,等权或低频版本可能更可靠。
组合压力测试要同时打击相关、波动和流动性¶
| 压力情景 | 人为改变什么 | 想观察的账户反应 |
|---|---|---|
| 相关性共同上升 | 把多项资产相关推向 1 | 平时分散效果会损失多少 |
| 波动突然翻倍 | 放大单项与组合波动 | 目标仓位能否及时降到上限以内 |
| 最大持仓跳空 | 让最大权重资产一次大跌 | 集中度是否超过损失预算 |
| 流动性冻结 | 限制成交量或禁止卖出部分资产 | 订单失败后现金与风险怎样变化 |
| 融资成本上升 | 提高杠杆与做空成本 | 风险目标是否仍有净收益余量 |
| 输入轻微扰动 | 改变协方差窗口与预期收益 | 优化权重是否频繁翻转 |
压力测试不能只重新计算一个组合波动数字。无法卖出时,实际权重会因价格与成交限制继续变化;相关上升又遇到杠杆收缩时,多个订单可能同时争夺流动性。账本要按照事件顺序模拟。
一张四资产风险预算表¶
| 项目 | 目标权重 | 估计波动 | 目标风险份额 | 单项上限 | 压力说明 |
|---|---|---|---|---|---|
| 股票趋势 | 35% | 中 | 40% | 40% | 快速反转与市场跳空 |
| 债券趋势 | 30% | 低 | 25% | 40% | 利率跳升与相关反转 |
| 商品趋势 | 20% | 高 | 25% | 25% | 合约换月与流动性 |
| 现金替代 | 15% | 很低 | 10% | 100% | 利率与信用口径 |
表中数字只用于演示格式。目标权重与目标风险份额不必相同,高波动资产较少资金也可能承担较多风险。真实预算要根据账户期限、最大可承受损失、市场规则和融资条件确定。
容易弄错的地方¶
| 常见判断 | 隐藏问题 | 应补充的检查 |
|---|---|---|
| 四项等权已经充分分散 | 波动、行业与相关风险可能集中 | 风险贡献、行业权重和共同压力 |
| 逆波动就是完整风险平价 | 它没有使用资产之间相关性 | 协方差与风险贡献对照 |
| 优化器给出的权重就是最优答案 | 输入估计误差会被放大 | 权重上限、收缩与扰动测试 |
| 波动目标能保证损失不超标 | 估计滞后,跳空和尾部无法提前缩仓 | 杠杆上限与跳跃压力 |
| 每天回到目标最安全 | 高频再平衡会增加成本与冲击 | 无交易区和不同频率比较 |
一分钟自测¶
两项资产各占 50%,是否表示它们各承担 50% 的组合风险?
查看答案
不一定。单项波动和与其他资产的相关关系都会改变风险贡献。高波动或高度同向的一项可能承担更多组合波动。本课术语¶
| 词语 | 先这样理解 |
|---|---|
| 目标权重 | 研究者希望组合达到的资产比例 |
| 实际权重 | 根据真实成交与当前价格计算的账户比例 |
| 再平衡 | 通过交易让实际权重重新靠近目标的过程 |
| 逆波动权重 | 让历史波动较高资产获得较少名义资金的方法 |
| 协方差矩阵 | 集中保存单项波动与两两共同变化的表 |
| 风险贡献 | 某项资产对组合估计波动带来的份额 |
| 风险平价 | 尝试让各部分风险贡献接近的组合方法 |
| 风险预算 | 事先分配各资产或策略可以承担的风险份额 |
| 波动率目标 | 根据当前估计风险缩放整个组合暴露的方法 |
| 有效资产数 | 根据权重平方和计算的集中度摘要 |
课后练习¶
1 计算再平衡¶
甲乙最初各值 5000 元,甲上涨到 6000 元,乙仍为 5000 元。若目标仍各 50%,忽略费用时要怎样交易?
提示
总权益为 11000 元,每项目标市值为 5500 元。答案
卖出甲 500 元并买入乙 500 元。真实账户还要考虑整数数量、费用与成交。2 手算逆波动¶
甲波动率 10%,乙 20%,丙 20%。按逆波动分配时三者权重分别是多少?
提示
倒数比例为 10、5、5,总和为 20。答案
甲为 50%,乙和丙各为 25%。这仍未考虑乙与丙是否高度相关。3 判断集中度¶
四项权重为 70%、10%、10%、10% 时,有效资产数约是多少?
提示
计算 `1 ÷ (0.7² + 3×0.1²)`。答案
平方和为 0.52,有效资产数约为 1.92。名义持有四项,权重集中程度接近两项等权。4 动手设置再平衡规则¶
为四资产等权组合规定检查频率、无交易区、单项上限与最小交易金额。
提示
条件要能从账户数据直接判断,例如月末检查和偏离百分点。答案
示例可以规定每月末检查,实际权重偏离目标超过 3 个百分点才交易,单项不超过 35%,单笔不足 200 元不下单。数值需要根据账户与市场验证。5 开放思考¶
市场危机中相关性一起升高,平时看起来分散的组合会发生什么?
评价要点
多项资产可能同时下跌,协方差与风险贡献快速上升,杠杆组合还会被迫降仓。历史低相关带来的分散效果会减弱,因此要加入共同下跌、流动性冻结和融资收紧压力。参考资料¶
Markowitz 均值方差、风险平价、协方差收缩与 Kelly 准则的资料入口统一列在参考资料中。阅读时请同时记录输入估计、权重约束、交易频率和压力情景。
信号只说明更愿意持有什么,目标权重才说明打算持有多少。等权分配名义资金,逆波动减少对高波动资产的投入,风险预算继续观察各项资产对组合波动的贡献。复杂优化还要面对等权基线、输入扰动、再平衡成本和共同下跌压力,算出一组精确小数远远不够。