只看起点和终点,会丢掉中间经过的路径。理解风险指标,是为了更完整地描述数据,而不是给一个结果贴上简单的“好”或“坏”。
01 / 区间收益率描述起点到终点
假设有一条为学习构造的净值序列:1.00、1.08、1.02、1.12、0.98、1.05。它不代表任何真实账户、产品或历史业绩。
区间收益率 = 期末值 / 期初值 − 1
这组数据的区间收益率为 1.05 / 1.00 − 1 = 5%。这个数字描述了终点相对起点的变化,却没有说明途中经历过什么。
02 / 回撤关注离此前高点有多远
先对每个时刻计算截至当时的最高值,再计算当前值相对该高点的下降幅度。本文采用“损失幅度为正数”的记法。
回撤(t) = 1 − 当前值(t) / 截至 t 的历史最高值
示例中的高点是 1.12,随后下降到 0.98,因此最大回撤为 1 − 0.98 / 1.12 = 12.5%。最后一个值虽然高于起点,过程中仍出现过明显回落。
values = [1.00, 1.08, 1.02, 1.12, 0.98, 1.05]
peak = values[0]
max_drawdown = 0.0
for value in values:
peak = max(peak, value)
max_drawdown = max(max_drawdown, 1 - value / peak)
print(f"{max_drawdown:.1%}")
# 12.5%
03 / 波动率关注变化的离散程度
一种常见的描述方式是先计算各期收益率,再计算其标准差。比较时需要统一采样频率、计算区间,以及使用样本标准差还是总体标准差。
将日度标准差乘以年交易日数的平方根,是一种常见的年化近似,但它依赖相应的统计假设。观察值很少、频率不一致或序列特征改变时,不宜把年化数值当作精确结论。
把指标放回语境
最大回撤依赖观察区间;波动率同时包含上涨与下跌;区间收益率不描述过程。每个指标只回答一部分问题。
一个简单的复盘习惯
展示结果时,把时间范围、样本数量、数据频率和计算口径放在指标旁边。先核实“这些数字是否可以比较”,再讨论“这些数字意味着什么”。