关于backtesting.py中Annualized Volatility指标的疑问
backtesting.py 中年化波动率(Annualized Volatility)的定义与计算逻辑
核心结论:backtesting.py 中的年化波动率,是基于策略每日(或回测最小时间单位)权益净值回报率的标准差,经年化系数调整后得到的指标,既不是标的年度收盘价的标准差,也不是单笔交易盈亏比例的标准差。
具体细节拆解
计算基础数据:
它的计算依托于策略每日权益净值的回报率时间序列,即每个时间步长(通常是交易日)的权益变化率:当日回报率 = (当日权益 - 前日权益) / 前日权益。这个数据反映的是策略在连续时间里的权益波动,而非标的自身的价格波动,也不是单笔交易的盈亏占比。年化调整逻辑:
单周期(比如单日)的标准差只能反映该周期内的波动水平,要得到年化值,需要乘以对应周期的年化系数。backtesting.py 会自动根据回测的时间频率选择系数:- 日频数据:乘以
sqrt(252)(默认一年252个交易日) - 小时频数据:乘以
sqrt(252*每日交易小时数) - 周频数据:乘以
sqrt(52)
本质是将单周期的波动幅度,按一年的周期长度进行缩放,统一衡量策略的年度波动风险。
- 日频数据:乘以
与其他波动率的区别:
- 不同于标的年度收盘价标准差:标的收盘价的波动是市场本身的波动,而策略年化波动率是策略权益曲线的波动,两者可能差异很大(比如对冲策略能大幅降低权益波动,即使标的本身波动很高)。
- 不同于单笔交易ReturnPct的标准差:单笔交易的盈亏比例只关注每笔交易的结果,完全忽略了交易间隔期的权益变化,无法体现策略在整个回测周期内的风险节奏,而年化波动率是连续时间维度的风险度量。
简单计算示例
假设回测得到每日权益回报率的标准差为0.01(即单日波动1%),那么年化波动率计算为:
年化波动率 = 0.01 * sqrt(252) ≈ 0.1587 → 15.87%
内容的提问来源于stack exchange,提问作者Nico Paquito
相关产品推荐
相关产品推荐

