回测目标波动率策略
在做交易策略时,经常会碰到一个问题:同一种策略在不同阶段表现完全不一样。有时候波动大,你的仓位可能重了点;波动小,你又觉得仓位太轻,收益跟不上。
为了让整体风险变得可控,很多机构会使用一种非常“实用主义”的方法——目标波动率(Target Volatility)。
它的核心思想只有一句话:
让你的组合一直保持在预设的年化波动率,不多也不少。
这个想法其实很接近我们做 CTA、趋势策略时常说的“风险平价”,但目标波动率策略通常更简单、更直接,比较适合作为一个基础仓位管理模块。
为什么需要目标波动率?
做交易时,可能都有这种体验:
同一资产在不同年份的波动差距能大到离谱;震荡期仓位太重,会被洗到怀疑人生;单边大行情仓位太轻,看着涨但赚不到钱;策略性能的“稳定性”其实更多取决于仓位管理,而不是策略本身。
目标波动率的出发点就是:既然波动率影响收益和风险,那干脆用波动率来动态调整仓位。
| |
这样不用每天纠结现在是不是应该加仓或减仓,只需要按照公式让仓位自动收缩或扩张。
策略原理
策略其实只有一个核心公式:
| |
例如,想把策略控制在 15% 的年化波动率,当前计算出来的波动率是 30%,那么你就应该只拿:15% / 30% = 0.5 倍仓位。
如果你允许最大杠杆为 1.5,那么这个权重会自动裁剪:
| |
整个策略就靠这个仓位调整来运行。
使用 Backtrader 回测
我用了 SPY 这个品种回测了这个目标波动率的策略,策略的完整回测代码,请访问:voltarget.py。
我这里讲解代码中的一些核心指标计算与交易逻辑。
首先,波动率指标的计算,以当前的实际年化波动率作为基准。
| |
通过计算的是 20 日的收益率标准差,并年化(乘上 √252)。这就是当前市场的“真实波动”。
在交易部分按波动率动态调整仓位
| |
逻辑非常清晰:
target_percent就是我们上面讲的核心公式;- 使用
order_target_size()自动把仓位调整到目标仓位。
这让策略在波动小的时候自动加杠杆,在波动大时自动降杠杆,实现类似“风险再平衡”的效果。
加载数据
用 YFinance 加载 SPY 标普 500 的历史数据。
| |
SPY 其实很适合这个策略,因为它大部分时间波动率稳定,偶尔波动巨大,用固定仓位很容易经历极端波动,而目标波动率策略可以让曲线变得相对 “平滑”。
如下是在最大杠杆 2 的净值表现:
调用方式:
| |
输出评价指标:
| |
净值绘图如下所示:

红色的净值曲线是目标波动率的净值曲线,蓝色是基准。
我回测了不同的市场,目标波动率策略在美股这种长期稳定向上,大部分时间波动率稳定,偶尔暴跌的指数有超额收益。而在 A 股和数字货币上并没有在降低波动率的同时还能保持收益。
总体来说,这个是风险控制的策略,后续我会考虑放在一些趋势、对冲或者是多因子组合策略上,在降低策略风险的同时,努力提高策略的收益。
7. 总结
目标波动率策略是一种“简单但好用”的工具。它不依赖方向、不依赖信号,而是利用波动率这个最基础的市场信息,动态调节仓位,实现一种自然的风险平衡。
欢迎加入我的知识星球: