halo 的技术博客

返回

风险管理是量化投资的基石#

任何量化策略都必须回答一个问题:最坏情况下会亏多少? VaR和CVaR就是回答这个问题的核心工具。

VaR:风险价值#

定义与计算#

VaR(Value at Risk)表示在给定置信水平下,特定时间内的最大损失。

CVaR:条件风险价值#

CVaR(Conditional VaR)又称期望损失(Expected Shortfall),计算超过VaR阈值的平均损失,比VaR更能反映尾部风险。

计算方法对比#

方法优点缺点
历史模拟法不需要分布假设依赖历史数据,对极端事件不敏感
参数法(正态)计算简单低估肥尾风险
蒙特卡洛模拟可模拟复杂组合计算量大,依赖模型假设

在投资组合中的应用#

1. 仓位管理#

# 基于VaR的仓位计算
def calculate_position_size(portfolio_value, var_limit, asset_var):
    """
    根据VaR限制计算最大仓位
    portfolio_value: 组合总价值
    var_limit: 可承受的最大VaR(如0.02表示2%)
    asset_var: 单个资产的VaR
    """
    max_loss = portfolio_value * var_limit
    position_value = max_loss / abs(asset_var)
    return position_value / portfolio_value  # 返回仓位比例

# 示例:100万组合,最多承受2%损失,资产VaR为1.5%
position_pct = calculate_position_size(1000000, 0.02, 0.015)
print(f"最大仓位: {position_pct:.2%}")  # 输出:133.33%
python

2. 风险预算分配#

将总VaR限额按资产风险贡献分配:

VaR分配示意图

不同资产对组合VaR的贡献度分解

回测验证框架#

验证VaR模型准确性的回测检验

def var_backtest(returns, var_estimates, confidence=0.95):
    """
    Kupiec检验:验证VaR模型准确性
    返回:失败次数、预期失败次数、p值
    """
    failures = (returns < var_estimates).sum()
    expected = len(returns) * (1 - confidence)
    # 似然比检验
    lr_stat = -2 * (np.log((1-confidence)**failures * confidence**(len(returns)-failures)) -
                   np.log((failures/len(returns))**failures * 
                          ((len(returns)-failures)/len(returns))**(len(returns)-failures)))
    p_value = 1 - chi2.cdf(lr_stat, 1)
    return failures, expected, p_value
python

实盘中的注意事项#

  1. 非正态分布:金融收益往往有偏峰、厚尾,需用t分布或非参数方法
  2. 相关性变化:市场危机时相关性趋近于1,需动态估计协方差矩阵
  3. 流动性风险:VaR假设可随时平仓,实盘需加入流动性调整
  4. 模型风险:不同方法计算的VaR差异可能很大,建议多模型对比

总结#

  • VaR适合作为日常风险监控指标,但可能低估尾部风险
  • CVaR更关注极端损失,适合压力测试和资本配置
  • 量化策略必须将风险管理前置到策略设计阶段,而非事后补充

优秀量化投资者的共同点:始终把风险管理制度化、自动化、可视化

CVaR与VaR对比

CVaR相比VaR更能反映极端损失的风险

风险价值(VaR)与条件风险价值(CVaR)在量化投资中的应用
https://blog.halo26812.eu.org/blog/2026-06-05-risk-var-cvar
Author halo
Published at 2026年6月5日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨