SuperAPI AI 工具集

historical-risk

数据与分析

查看项目

更新于 10-15 09:04

技能介绍

用途

historical-risk 用于从历史数据量化已实现风险,涵盖波动率估计、回撤分析、下行风险指标、历史在险价值(VaR)、跟踪误差等。当用户询问历史风险、已实现波动率、最大回撤或历史 VaR 时可使用本技能。

主要能力

波动率估计

收盘价对收盘价波动率(Close-to-Close Volatility):最常用的波动率估计方法,计算对数收益率的标准差并年化。

公式:sigma_annual = sigma_daily * sqrt(N),其中 N 为每年交易期数(日频通常为 252,周频 52,月频 12)。推荐使用对数收益率:r_t = ln(P_t / P_{t-1})。

Parkinson(高低价)估计量:使用日内最高价和最低价捕捉收盘价对收盘价遗漏的日内波动。当真实过程连续时,比收盘价对收盘价方法更有效。

公式:sigma^2_Park = (1 / (4 * n * ln(2))) * sum( ln(H_i / L_i)^2 )。对于扩散过程,该估计量效率约为收盘价对收盘价方法的 5 倍,但存在跳跃或区间离散化时会向下偏。

Yang-Zhang 估计量:结合隔夜(收盘对开盘)、开盘对收盘以及 Rogers-Satchell 分量。对于同时存在漂移和开盘跳跃的过程无偏。

公式:sigma^2_YZ = sigma^2_overnight + k * sigma^2_open-to-close + (1 - k) * sigma^2_RS,其中 k = 0.34 / (1.34 + (n + 1) / (n - 1)),n 为观测数,sigma^2_RS 为 Rogers-Satchell 估计量,使用每个周期内全部四个 OHLC 价格。

回撤分析

回撤衡量相对历史峰值的跌幅:DD_t = (Peak_t - Value_t) / Peak_t,其中 Peak_t = max(Value_s) 对所有 s <= t。

  • 最大回撤(MDD):评估期内 DD_t 的最大值。
  • 回撤持续期:从峰值到创新高之间的期数。
  • 恢复时间:从谷底回到前峰值水平的期数。

历史 VaR

非参数(经验)在险价值即历史收益率分布的 alpha 分位数,不做分布假设。VaR_alpha = -Percentile(R, alpha)。例如 95% VaR 使用收益率的第 5 百分位。负号约定使 VaR 表示为正损失数值。

下行偏差

衡量低于最低可接受收益率(MAR)的收益离散度:sigma_d = sqrt( (1/n) * sum( min(R_i - MAR, 0)^2 ) )。MAR 常用取值:0%、无风险利率或均值收益率。

跟踪误差

组合与基准收益率差值的标准差,年化:TE = std(R_p - R_b) * sqrt(N)。衡量组合跟踪(或偏离)基准的一致性。

半方差

仅使用低于均值(或低于阈值)的收益率计算方差:SV = (1/n) * sum( min(R_i - mean(R), 0)^2 )。半方差分离下行风险,是 Sortino 比率的基础。

关键公式

公式 表达式 用途
年化波动率 sigma_ann = sigma_period * sqrt(N) 将周期波动率转换为年化波动率
对数收益率 r_t = ln(P_t / P_{t-1}) 计算连续复利收益率
Parkinson 方差 sigma^2 = (1 / (4n ln2)) * sum(ln(H/L)^2) 从高低价数据计算波动率
回撤 DD_t = (Peak_t - Value_t) / Peak_t 衡量峰谷跌幅
最大回撤 MDD = max(DD_t) 最差历史跌幅
历史 VaR(95%) 收益率序列的第 5 百分位 非参数损失估计
下行偏差 sigma_d = sqrt((1/n) * sum(min(R_i - MAR, 0)^2)) MAR 以下的不对称风险
跟踪误差 TE = std(R_p - R_b) * sqrt(N) 组合与基准的偏离
半方差 (1/n) * sum(min(R_i - mean(R), 0)^2) 低于均值的方差

使用方式

使用 uv 运行:uv run scripts/historical_risk.py(PEP 723 头部自动解析 numpy 依赖)。

或在 pip install numpy scipy 后使用:python3 scripts/historical_risk.py。

直接运行会打印完整风险分析(年化波动率和 Parkinson 波动率、带时间的最大回撤、95%/99% 历史 VaR、下行偏差、半方差、跟踪误差、滚动波动率),基于带注入回撤事件的种子合成数据。

使用 --verify 可断言输出与本技能的示例及演示预期值一致(通过时退出码为 0);使用 --help 可查看类的概览。

该文件主要设计为模块导入使用,例如:from historical_risk import HistoricalRiskAnalyzer。

适用场景

  • 股票或基金的历史波动率计算与年化
  • 基金净值序列的最大回撤、回撤持续期和恢复时间分析
  • 基于历史收益率分布的非参数 VaR 估计
  • 组合相对基准的跟踪误差衡量
  • 下行风险指标(下行偏差、半方差)的计算

限制

  • 波动率年化使用平方根时间缩放(乘以 sqrt(N)),而非线性缩放。错误使用线性缩放会导致数值严重虚高。
  • 年化时应使用 252 个交易日(而非 365 个日历日)。债券市场和部分国际市场可能不同。
  • 历史数据中的幸存者偏差:排除退市或失败证券的数据集会低估已实现风险。
  • 回看期敏感性:1 年回看期与 5 年回看期反映不同的风险状态,应始终说明回看窗口并考虑其是否涵盖相关市场条件。
  • VaR 置信水平方向:95% VaR 对应收益率的第 5 百分位(损失尾部),"95%" 指置信水平而非收益百分位。
  • 对数收益率与简单收益率:波动率估计推荐对数收益率(跨时间可加),累计业绩报告则简单收益率更直观。

交叉引用

  • performance-metrics(财富管理插件):使用波动率、下行偏差、跟踪误差和最大回撤作为风险调整比率(Sharpe、Sortino、Information Ratio、Calmar)的分母。
  • forward-risk(财富管理插件):历史 VaR 和历史波动率作为前瞻性 VaR 模型和压力测试的输入。
  • volatility-modeling(财富管理插件):EWMA 和 GARCH 模型将此处介绍的简单历史波动率估计量扩展为预测框架。
  • retirement-decumulation(财富管理插件):回撤和波动率历史驱动提取阶段组合的收益序列风险。