正在加载中...

展开本页目录
算法教程VaR_CVaR-VaR和CVaR风险

VaR_CVaR-VaR和CVaR风险

No.059 · 在线教程

VaR(Value at Risk)与 CVaR(Conditional Value at Risk,也称 Expected Shortfall, ES)是金融风险管理中的经典尾部风险度量。给定置信水平 α(0,1),VaR 描述“在该置信水平下的最小尾部损失阈值”,CVaR …

VaR_CVaR-VaR和CVaR风险

1. 方法概述

VaR(Value at Risk)与 CVaR(Conditional Value at Risk,也称 Expected Shortfall, ES)是金融风险管理中的经典尾部风险度量。给定置信水平 \(\alpha\in(0,1)\),VaR 描述“在该置信水平下的最小尾部损失阈值”,CVaR 描述“超过该阈值后的平均损失”。

设收益率序列为

$$ \{r_t\}_{t=1}^{T} \tag{1} $$

本系统统一采用“损失为正”的定义,并支持:

  1. 历史模拟法(historical);
  2. 参数正态法(parametric normal);
  3. 蒙特卡洛正态法(monte carlo normal);
  4. 长仓(long)与短仓(short)两种头寸方向;
  5. 滚动窗口风险序列与 Kupiec POF 回测检验。

2. 数据预处理与收益率构造

若输入为价格序列 \(P_t\),系统支持两种收益率:

对数收益率: $$ r_t=\ln P_t-\ln P_{t-1} \tag{2} $$

简单收益率: $$ r_t=\frac{P_t-P_{t-1}}{P_{t-1}} \tag{3} $$

系统支持缩放系数 \(s>0\),缩放后收益率为

$$ \tilde r_t=s\,r_t \tag{4} $$

3. 多步持有期聚合(horizon)

设持有期为 \(h\ge 1\)。当 \(h=1\) 时直接使用单期收益率;当 \(h>1\) 时:

对数收益率聚合: $$ R_t^{(h)}=\sum_{j=0}^{h-1}\tilde r_{t-j} \tag{5} $$

简单收益率聚合: $$ R_t^{(h)}=\prod_{j=0}^{h-1}(1+\tilde r_{t-j})-1 \tag{6} $$

后续 VaR/CVaR 在 \(R_t^{(h)}\) 的分布上计算。

4. 损失定义与头寸方向

记损失为 \(L\)。

4.1 长仓(long)

长仓下“下跌为损失”,定义

$$ L=-R \tag{7} $$

VaR 为损失分位数: $$ \text{VaR}_{\alpha}=Q_{\alpha}(L)=-Q_{1-\alpha}(R) \tag{8} $$

CVaR(ES)为超阈值条件期望: $$ \text{CVaR}_{\alpha}=\mathbb{E}[L\mid L\ge \text{VaR}_{\alpha}] =-\mathbb{E}[R\mid R\le Q_{1-\alpha}(R)] \tag{9} $$

4.2 短仓(short)

短仓下“上涨为损失”,定义

$$ L=R \tag{10} $$

$$ \text{VaR}_{\alpha}=Q_{\alpha}(L)=Q_{\alpha}(R) \tag{11} $$

$$ \text{CVaR}_{\alpha}=\mathbb{E}[L\mid L\ge \text{VaR}_{\alpha}] =\mathbb{E}[R\mid R\ge Q_{\alpha}(R)] \tag{12} $$

若头寸规模为 \(w\ge 0\),则风险值线性放大:

$$ \text{VaR}_{\alpha}^{(w)}=w\cdot \text{VaR}_{\alpha}, \qquad \text{CVaR}_{\alpha}^{(w)}=w\cdot \text{CVaR}_{\alpha} \tag{13} $$

5. 历史模拟法(Historical Simulation)

给定样本 \(\{R_t^{(h)}\}_{t=1}^{n}\),直接用经验分位数与尾部均值:

$$ \widehat{\text{VaR}}_{\alpha}=\hat Q_{\alpha}(L) \tag{14} $$

$$ \widehat{\text{CVaR}}_{\alpha}=\frac{1}{N_\alpha}\sum_{t: L_t\ge \widehat{\text{VaR}}_{\alpha}}L_t \tag{15} $$

其中 \(N_\alpha\) 为超越次数。

6. 参数正态法(Parametric Normal)

设聚合收益近似服从正态分布:

$$ R\sim\mathcal{N}(\mu,\sigma^2) \tag{16} $$

记 \(p=1-\alpha\),\(z_p=\Phi^{-1}(p)\),\(\phi(\cdot)\) 与 \(\Phi(\cdot)\) 分别为标准正态密度与分布函数。

6.1 长仓(左尾)

收益率 VaR 阈值: $$ q_{\text{long}}=\mu+\sigma z_p \tag{17} $$

条件尾部均值: $$ \mathbb{E}[R\mid R\le q_{\text{long}}]=\mu-\sigma\frac{\phi(z_p)}{p} \tag{18} $$

由式(8)–(9)得到: $$ \text{VaR}_{\alpha}= -q_{\text{long}}, \qquad \text{CVaR}_{\alpha}= -\left(\mu-\sigma\frac{\phi(z_p)}{p}\right) \tag{19} $$

6.2 短仓(右尾)

令 \(z_\alpha=\Phi^{-1}(\alpha)\),则 $$ q_{\text{short}}=\mu+\sigma z_\alpha \tag{20} $$

$$ \mathbb{E}[R\mid R\ge q_{\text{short}}]=\mu+\sigma\frac{\phi(z_\alpha)}{1-\alpha} \tag{21} $$

根据式(11)–(12): $$ \text{VaR}_{\alpha}=q_{\text{short}}, \qquad \text{CVaR}_{\alpha}=\mu+\sigma\frac{\phi(z_\alpha)}{1-\alpha} \tag{22} $$

7. 蒙特卡洛正态法(Monte Carlo Normal)

先估计 \((\mu,\sigma)\),再生成 \(M\) 个模拟收益:

$$ R^{(m)}\sim\mathcal{N}(\mu,\sigma^2),\quad m=1,\ldots,M \tag{23} $$

然后在模拟样本上按历史法计算 VaR/CVaR:

$$ \widehat{\text{VaR}}_{\alpha}^{\text{MC}}=\hat Q_{\alpha}(L^{(m)}), \qquad \widehat{\text{CVaR}}_{\alpha}^{\text{MC}}= \frac{1}{N_\alpha}\sum_{m:L^{(m)}\ge \widehat{\text{VaR}}_{\alpha}^{\text{MC}}}L^{(m)} \tag{24} $$

8. 滚动风险序列与回测

设滚动窗口长度为 \(W\)。对每个时点 \(t\ge W\),用窗口样本估计 \(\text{VaR}_{t,\alpha}\),形成风险序列。

8.1 异常事件定义

记实际损失为 \(L_t\),异常指示变量

$$ I_t=\mathbf{1}(L_t>\text{VaR}_{t,\alpha}) \tag{25} $$

异常总数

$$ X=\sum_{t=1}^{N}I_t, \qquad \hat\pi=\frac{X}{N} \tag{26} $$

理论异常率为尾部概率

$$ \pi_0=1-\alpha \tag{27} $$

8.2 Kupiec POF 检验

无条件覆盖原假设 \(H_0:\pi=\pi_0\)。似然比统计量:

$$ LR_{\text{POF}}=-2\ln \frac{(1-\pi_0)^{N-X}\pi_0^X}{(1-\hat\pi)^{N-X}\hat\pi^X} \tag{28} $$

在 \(H_0\) 下近似满足

$$ LR_{\text{POF}}\sim\chi_1^2 \tag{29} $$

据此得到 p 值评估回测一致性。

9. 输出结果与论文复现建议

系统输出包括:

  1. Returns:收益率与持有期聚合收益;
  2. RiskSeries:滚动 VaR/CVaR(损失阈值与收益率阈值);
  3. Summary:总体 VaR/CVaR、样本量、尾概率与回测摘要;
  4. Backtest:异常点明细(returns、loss、var_loss、exceed);
  5. 图表:收益率-阈值图、收益分布图、异常点回测图。

10. 符号说明表

符号 含义
\(r_t\) 单期收益率
\(R_t^{(h)}\) \(h\) 期聚合收益率
\(L\) 损失变量(损失为正)
\(\alpha\) 置信水平
\(\text{VaR}_{\alpha}\) 在 \(\alpha\) 下的风险阈值
\(\text{CVaR}_{\alpha}\) 超越 VaR 后的条件平均损失
\(\mu,\sigma\) 正态分布均值与标准差
\(W\) 滚动窗口长度
\(I_t\) 异常指示变量
\(LR_{\text{POF}}\) Kupiec POF 似然比统计量

11. 论文写作模板

11.1 中文方法段落模板

“本文采用 VaR-CVaR 框架刻画收益序列尾部风险。首先根据价格数据计算收益率(式(2)或式(3)),并在给定持有期下构造聚合收益(式(5)–(6))。在置信水平 \(\alpha\) 下,分别使用历史模拟法、参数正态法与蒙特卡洛法估计 VaR 与 CVaR(式(14)–(24))。进一步基于滚动窗口构造动态 VaR 序列,并采用 Kupiec POF 检验(式(28))验证异常覆盖率与理论尾概率的一致性。”

11.2 中文图表题注模板

  • 图 1 收益率与 VaR/CVaR 阈值时序图。
  • 图 2 收益率分布直方图及 VaR 阈值线。
  • 图 3 回测异常点(exceptions)识别图。

11.3 英文摘要段落模板

“This study evaluates tail risk using the VaR-CVaR framework. Returns are constructed from price data and aggregated to the target holding period. VaR and CVaR are estimated under historical simulation, parametric normal, and Monte Carlo approaches at a given confidence level. We further perform rolling-window backtesting and apply the Kupiec proportion-of-failures test to examine whether exception frequencies are consistent with the theoretical tail probability.”

12. 实现说明与注意事项

就本项目当前可运行版本而言,VaR/CVaR 模块的真实核心位于:

  • 具体的算法2/VaR_CVaR-VaR和CVaR风险/core/calculator.py
  • 具体的算法2/VaR_CVaR-VaR和CVaR风险/ui/results_widget.py

它不是只输出一个 VaR 数值,而是完整输出“收益率序列 + 风险序列 + 回测结果 + 图表 + repro”。

12.1 当前 Excel 导出结构

根据 core/calculator.py 的实际导出逻辑,结果工作簿固定包含:

  • RawData_Preview
  • Returns
  • RiskSeries
  • Summary
  • Parameters
  • Backtest
  • Charts_Index

其中:

  • Returns 对应收益率与持有期聚合结果;
  • RiskSeries 对应滚动 VaR/CVaR 序列;
  • Summary 对应总体风险值、样本量与方法参数摘要;
  • Backtest 对应异常点识别与 Kupiec 检验相关结果;
  • Charts_Index 记录图表名与路径。

因此,论文中的式(2)至式(29)并不是停留在理论层,而是分别落实到了 ReturnsRiskSeriesSummaryBacktest 这些实际导出表中。

12.2 当前图表与 results 目录的真实产物

程序当前会在结果目录中生成至少三张图:

  • chart_returns_var_cvar.png
  • chart_returns_hist.png
  • chart_backtest_exceptions.png

实际结果目录形如:

results/VaR_CVaR分析结果_<YYYYMMDD_HHMMSS>/

目录中通常同时存在:

  • VaR_CVaR分析结果_<时间戳>.xlsx
  • repro_var_cvar_<时间戳>.py
  • repro_inputs/sample_data.csv

这说明当前模块已经形成“结果工作簿 + 图表 + 输入副本 + 可执行 repro 脚本”的完整实验复现链。

12.3 当前 repro 脚本的真实行为

结果页 ui/results_widget.py 点击导出后,会生成 repro_var_cvar_<时间戳>.py。该脚本会复用本次:

  • 数据文件路径;
  • 置信水平;
  • 方法选择;
  • 头寸方向;
  • horizon;
  • rolling window 等关键参数,

并重新调用核心计算逻辑,生成新的结果文件。

因此,若论文或报告需要强调复现性,应该直接引用该脚本与 repro_inputs/ 目录,而不是只写“可根据同一参数重复计算”。

12.4 当前项目实现的使用注意事项

  1. 置信水平 \(\alpha\) 建议取 \(0.95\) 或 \(0.99\);
  2. 样本量过小会显著降低尾部估计稳定性;
  3. 参数正态法依赖正态假设,重尾资产建议结合历史法与 MC 法;
  4. 回测通常建议在 \(h=1\) 情况下进行;
  5. 长仓与短仓损失方向不同,解释 VaR/CVaR 时需明确头寸定义;
  6. 论文若与本程序保持一致,应把 BacktestCharts_Index 一并纳入结果说明,因为它们属于当前实现的标准导出,而不是附加功能。

13. 单篇终审补充

13.1 图题与表题对齐建议

  • 本文档应优先对应真实算法目录 具体的算法2/VaR_CVaR-VaR和CVaR风险
  • 代表性结果目录建议绑定 具体的算法2/VaR_CVaR-VaR和CVaR风险/results/VaR_CVaR分析结果_20260329_165528
  • 表题应直接对应 VaR_CVaR分析结果_20260329_165528.xlsx 的真实工作表:RawData_PreviewReturnsRiskSeriesSummaryParametersBacktestCharts_Index
  • 图题应优先绑定该目录下真实图:chart_returns_var_cvar.pngchart_returns_hist.pngchart_backtest_exceptions.png

13.2 终审说明

  • 当前 VaR/CVaR 目录属于较完整的单目录闭环:结果表、图、复现脚本和输入副本都在同一时间戳目录下。
  • 复现脚本实际为 repro_var_cvar_20260329_165528.py,其 SRC_FILE 写法为 repro_inputs/sample_data.csv;目录中另有实体输入副本 sample_data.csv,说明历史导出在“是否保留 repro_inputs 子目录”上存在版本差异。
  • 因此论文终稿宜写成“复现脚本基于结果目录内的样本快照复现”,而不要把 repro_inputs 是否显式存在写成绝对前提。

13.3 全量强化补充

  • 当前应绑定的首层主结果目录是 具体的算法2/VaR_CVaR-VaR和CVaR风险/results/VaR_CVaR分析结果_20260329_165528。首层主工作簿为 具体的算法2/VaR_CVaR-VaR和CVaR风险/results/VaR_CVaR分析结果_20260329_165528/VaR_CVaR分析结果_20260329_165528.xlsx
  • 上述主工作簿当前实际工作表为 RawData_PreviewReturnsRiskSeriesSummaryParametersBacktestCharts_Index。这是正文中报告收益率、风险序列和回测异常点时应直接绑定的真实导出结构。
  • 当前主目录下还存在一份后续再生成工作簿 具体的算法2/VaR_CVaR-VaR和CVaR风险/results/VaR_CVaR分析结果_20260329_165528/VaR_CVaR分析结果_20260329_165530.xlsx。写文档时应把 165528 视为首层主结果,把 165530 视为由 repro 或再次导出形成的同目录后续产物,不能把两本工作簿写成同一批次并列主结果。
  • 当前首层实体图文件为 具体的算法2/VaR_CVaR-VaR和CVaR风险/results/VaR_CVaR分析结果_20260329_165528/chart_returns_var_cvar.pngchart_returns_hist.pngchart_backtest_exceptions.png,三者都直接位于首层目录根部,而不是 charts/ 子目录。
  • 当前 repro 脚本是 具体的算法2/VaR_CVaR-VaR和CVaR风险/results/VaR_CVaR分析结果_20260329_165528/repro_var_cvar_20260329_165528.py,其真实输入口径为 SRC_FILE = 'repro_inputs/sample_data.csv';对应输入副本位于首层 repro_inputs/sample_data.csv。因此当前更准确的说法是“首层目录内标准 repro_inputs/... 复现”,而不是“可能有也可能没有 repro_inputs 的不确定结构”。

14. 软件实现核查补充(2026-07)

  • 当前实现的主结果目录应写作 具体的算法2/VaR_CVaR-VaR和CVaR风险/results/VaR_CVaR分析结果_20260329_165528,主工作簿为 VaR_CVaR分析结果_20260329_165528.xlsx
  • 正文应围绕 RawData_PreviewReturnsRiskSeriesSummaryParametersBacktestCharts_Index 来写,图则对应 chart_returns_var_cvar.pngchart_returns_hist.pngchart_backtest_exceptions.png
  • 当前目录还保留 165530 的后续工作簿,正文引用时不要把它写成同批次主结果。
  • repro_var_cvar_20260329_165528.py + repro_inputs/sample_data.csv 是首层目录内标准复现链,文中按这个口径写即可。