久期 (Duration)
凸度 (Convexity)
其他常用风险指标
信用评级
风险价值比率(RVR)
定义:从高点到随后低点的最大跌幅(百分比)
计算公式:
其中,
特点:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成累积收益曲线
np.random.seed(42)
returns = np.random.normal(0.001, 0.02, 1000)
cumulative_returns = (1 + returns).cumprod()
# 计算最大回撤
def calculate_max_drawdown(cumulative_returns):
# 计算历史最高点
running_max = np.maximum.accumulate(cumulative_returns)
# 计算相对于历史最高点的回撤
drawdown = (cumulative_returns - running_max) / running_max
# 最大回撤
max_drawdown = drawdown.min()
return max_drawdown
mdd = calculate_max_drawdown(cumulative_returns)
print(f"最大回撤: {mdd:.2%}")
# 可视化
plt.figure(figsize=(12, 6))
plt.plot(cumulative_returns)
plt.title('累积收益与最大回撤')
plt.xlabel('交易日')
plt.ylabel('累积收益')
plt.show()
风险指标 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
波动率 | • 计算简单 • 易于理解 • 广泛应用 |
• 假设收益率分布对称 • 同等对待上涨下跌 • 不能反映尾部风险 |
• 短期市场风险 • 期权定价 • 资产配置 |
Beta系数 | • 衡量系统性风险 • 区分可分散与不可分散风险 • CAPM模型基础 |
• 依赖历史数据 • 假设线性关系 • 只衡量系统性风险 |
• 股票投资 • 投资组合管理 • 风格分析 |
久期 | • 固定收益核心指标 • 简单有效的近似 • 直观反映利率敏感性 |
• 仅适用于小幅利率变动 • 无法捕捉非平行收益曲线变动 • 忽略现金流再投资风险 |
• 债券投资 • 利率风险管理 • 免疫策略 |
最大回撤 | • 反映极端损失 • 无分布假设 • 直观理解 |
• 基于历史数据 • 只衡量单一事件 • 前瞻性不足 |
• 绝对收益策略 • 对冲基金 • 风险偏好定义 |
VaR定义
数学定义
具体解释
VaR的主要应用
著名使用案例
VaR的主要局限
著名失败案例
置信水平选择
监管标准
时间窗口选择
时间跨度换算
实际应用中的具体选择
基本原理
正态分布下的VaR计算公式
举例
优点 | 缺点 |
---|---|
计算简单快速 容易解释和沟通 适合大型组合和线性风险 可以轻松调整时间尺度 |
分布假设过强(尾部风险低估) 不适用于非线性产品(如期权) 无法捕捉尾部依赖结构 在市场压力下参数可能变化 |
改进方法
基本原理
计算步骤
举例
优点
缺点
改进方法
基本原理
计算步骤
常见随机过程模型
优点
缺点
应用场景
特性 | 参数法 | 历史模拟法 | 蒙特卡洛模拟法 |
---|---|---|---|
计算复杂度 | 低 | 中 | 高 |
计算速度 | 快 | 中等 | 慢 |
分布假设 | 强(通常假设正态) | 无(使用经验分布) | 中(可自定义) |
数据需求 | 低(仅需方差-协方差) | 中等(需历史序列) | 中(需模型参数) |
适用资产类型 | 线性资产 | 各类资产 | 各类资产,尤其是非线性资产 |
尾部风险捕捉 | 弱(除非使用t分布) | 中等(依赖历史数据) | 强(可模拟极端情景) |
对极端事件的适应性 | 差 | 中(仅限历史发生过的) | 好(可生成极端情景) |
便于理解沟通 | 好 | 好 | 中等 |
适用情景 | 大型线性投资组合 需要快速计算 日常风险监控 |
混合资产组合 中等复杂度 市场风险日常测量 |
含期权的复杂组合 完整风险分析 监管资本计算 |
实际应用建议:多种方法并用,相互验证结果,了解各自局限性
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats
# 假设收益率数据
returns = np.random.normal(0.001, 0.02, 1000)
# 参数法VaR
def parametric_var(returns, alpha=0.05):
mu = np.mean(returns)
sigma = np.std(returns)
var = mu + sigma * stats.norm.ppf(alpha)
return -var
# 历史模拟法VaR
def historical_var(returns, alpha=0.05):
return -np.percentile(returns, alpha*100)
# 打印结果
print(f"参数法VaR(95%): {parametric_var(returns):.4f}")
print(f"历史模拟法VaR(95%): {historical_var(returns):.4f}")
案例背景
资产历史表现
相关性矩阵
美国股票 | 国际股票 | 美国债券 | 公司债券 | |
---|---|---|---|---|
美国股票 | 1.00 | 0.70 | -0.10 | 0.30 |
国际股票 | 0.70 | 1.00 | -0.05 | 0.25 |
美国债券 | -0.10 | -0.05 | 1.00 | 0.70 |
公司债券 | 0.30 | 0.25 | 0.70 | 1.00 |
参数法VaR计算
案例数据来源:Bloomberg数据基础上设计的模拟案例
案例组合不同方法VaR对比
(10天95%置信区间,单位:万元)
计算方法 | VaR值 | 特点说明 |
---|---|---|
参数法 | 37.01 | 假设正态分布,计算最快 |
历史模拟法 | 41.58 | 基于历史极端事件,无分布假设 |
蒙特卡洛 | 39.26 | 考虑相关性结构,计算最全面 |
方法差异原因分析
VaR波动的主要驱动因素
观察到的现象
图表基于模拟数据生成,反映危机期间VaR变化特征
风险分解方法
组件VaR计算步骤
计算边际贡献(Marginal Contribution):
计算组件VaR(Component VaR):
组件贡献百分比:
案例风险分解结果
资产类别 | 资产权重 | 组件VaR(万元) | 风险贡献(%) |
---|---|---|---|
美国股票 | 35% | 17.68 | 47.8% |
国际股票 | 25% | 15.21 | 41.1% |
美国债券 | 30% | 1.85 | 5.0% |
公司债券 | 10% | 2.27 | 6.1% |
总计 | 100% | 37.01 | 100% |
核心发现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from scipy.stats import norm
### 下载股票数据
tickers = ['AAPL', 'MSFT', 'AMZN', 'GOOGL']
weights = np.array([0.3, 0.3, 0.2, 0.2])
start_date = '2021-01-01'
end_date = '2023-01-01'
### 获取历史数据
data = yf.download(tickers, start=start_date, end=end_date)['Adj Close']
returns = data.pct_change().dropna()
### 计算组合收益
portfolio_returns = returns.dot(weights)
### 设置参数
confidence_level = 0.95
investment_value = 1000000 ### 100万投资
使用yfinance库获取实际市场数据。该示例将计算包含四只大型科技股的投资组合VaR
### 计算历史模拟法VaR
historical_var = -np.percentile(portfolio_returns, (1-confidence_level)*100)
historical_var_value = historical_var * investment_value
print(f"95% 历史模拟法VaR: {historical_var:.4f} ({historical_var_value:.2f}元)")
### 计算参数法VaR
mean = np.mean(portfolio_returns)
std = np.std(portfolio_returns)
parametric_var = -(mean + std * norm.ppf(1-confidence_level))
parametric_var_value = parametric_var * investment_value
print(f"95% 参数法VaR: {parametric_var:.4f} ({parametric_var_value:.2f}元)")
### 蒙特卡洛模拟法VaR
np.random.seed(42) ### 设置随机种子以确保结果可重复
n_simulations = 10000 ### 模拟次数
### 使用历史均值和标准差生成随机收益率
mc_returns = np.random.normal(mean, std, n_simulations)
mc_var = -np.percentile(mc_returns, (1-confidence_level)*100)
mc_var_value = mc_var * investment_value
print(f"95% 蒙特卡洛模拟法VaR: {mc_var:.4f} ({mc_var_value:.2f}元)")
实现了三种主要VaR计算方法:历史模拟法、参数法和蒙特卡洛模拟法
### 可视化收益率分布与VaR
plt.figure(figsize=(12, 8))
### 绘制收益率分布直方图
plt.hist(portfolio_returns, bins=50, alpha=0.5, density=True,
label='历史收益率分布')
### 添加VaR线
plt.axvline(-historical_var, color='r', linestyle='--',
label=f'历史模拟法VaR (95%): {historical_var:.4f}')
plt.axvline(-parametric_var, color='g', linestyle='--',
label=f'参数法VaR (95%): {parametric_var:.4f}')
plt.axvline(-mc_var, color='b', linestyle='--',
label=f'蒙特卡洛模拟法VaR (95%): {mc_var:.4f}')
### 添加正态分布曲线
x = np.linspace(min(portfolio_returns), max(portfolio_returns), 1000)
plt.plot(x, norm.pdf(x, mean, std), 'k-', lw=2,
label='正态分布拟合')
plt.legend(fontsize=10)
plt.title('投资组合收益率分布与VaR比较', fontsize=15)
plt.xlabel('日收益率', fontsize=12)
plt.ylabel('概率密度', fontsize=12)
plt.grid(True, alpha=0.3)
通过可视化直观展示不同VaR方法的计算结果,并将收益率分布与正态分布进行对比
### 计算10天VaR (使用平方根法则)
time_horizon = 10 ### 10天持有期
historical_var_10d = historical_var * np.sqrt(time_horizon)
parametric_var_10d = parametric_var * np.sqrt(time_horizon)
mc_var_10d = mc_var * np.sqrt(time_horizon)
print("\n10天持有期VaR (平方根法则):")
print(f"历史模拟法VaR (10天): {historical_var_10d:.4f} ({historical_var_10d*investment_value:.2f}元)")
print(f"参数法VaR (10天): {parametric_var_10d:.4f} ({parametric_var_10d*investment_value:.2f}元)")
print(f"蒙特卡洛模拟法VaR (10天): {mc_var_10d:.4f} ({mc_var_10d*investment_value:.2f}元)")
### 计算各资产对组合VaR的贡献
cov_matrix = returns.cov()
portfolio_variance = weights.T @ cov_matrix @ weights
portfolio_std = np.sqrt(portfolio_variance)
### 边际贡献
marginal_contrib = (cov_matrix @ weights) / portfolio_std
component_var = weights * marginal_contrib * norm.ppf(confidence_level)
percent_contrib = component_var / np.sum(component_var) * 100
var_contrib = pd.DataFrame({
'Asset': tickers,
'Weight': weights * 100,
'VaR Contribution': component_var,
'Contribution %': percent_contrib
})
print("\n各资产VaR贡献:")
print(var_contrib)
计算了不同时间窗口(10天)的VaR,并分析了各资产对组合VaR的贡献
条件风险价值定义
与VaR的关系
直观理解
VaR与ES的主要区别
参考文献:Acerbi, C., & Tasche, D. (2002). "On the coherence of expected shortfall". Journal of Banking & Finance, 26(7): 1487-1503.
参数法计算
正态分布假设下:
t分布假设下:
历史模拟法计算
蒙特卡洛模拟法计算
Python实现示例
### 历史模拟法ES
def calculate_historical_es(returns, alpha=0.95):
var = -np.percentile(returns, (1-alpha)*100)
es = -np.mean(returns[returns <= -var])
return es
### 参数法ES (正态分布假设)
def calculate_parametric_es(mu, sigma, alpha=0.95):
z_score = norm.ppf(1-alpha)
es = -(mu + sigma * norm.pdf(z_score)/(1-alpha))
return es
### 计算实例
hist_es = calculate_historical_es(portfolio_returns)
para_es = calculate_parametric_es(
np.mean(portfolio_returns),
np.std(portfolio_returns))
参考:McNeil, A. J., Frey, R., & Embrechts, P. (2015). Quantitative Risk Management: Concepts, Techniques and Tools. Princeton University Press.
相容风险度量的四个关键性质
VaR与ES的性质比较
性质 | VaR | ES |
---|---|---|
单调性 | ✓ | ✓ |
正齐次性 | ✓ | ✓ |
平移不变性 | ✓ | ✓ |
次可加性 | ✗ | ✓ |
相容风险度量 | ✗ | ✓ |
次可加性的重要性
参考文献:Artzner, P., Delbaen, F., Eber, J. M., & Heath, D. (1999). "Coherent measures of risk". Mathematical Finance, 9(3): 203-228.
根据投资目标:长期投资者可能更关注最大回撤,短期交易者可能更关注日内波动
考虑资产特性:不同资产类别可能需要不同风险度量
多指标结合:单一指标难以全面描述风险,应结合多种指标
情景分析补充:使用压力测试和情景分析弥补统计方法的不足
定义:单位风险下的超额收益
计算公式:
其中:
特点:
import numpy as np
import pandas as pd
# 假设数据
returns = np.random.normal(0.001, 0.02, 252) # 252个交易日
risk_free_rate = 0.03 / 252 # 日化无风险利率
# 计算夏普比率
def sharpe_ratio(returns, risk_free_rate, periods=252):
"""
计算年化夏普比率
periods: 年化系数,日频数据为252,月频为12
"""
excess_returns = returns - risk_free_rate
return (np.mean(excess_returns) * periods) / (np.std(excess_returns, ddof=1) * np.sqrt(periods))
sr = sharpe_ratio(returns, risk_free_rate)
print(f"年化夏普比率: {sr:.4f}")
定义:单位下行风险下的超额收益
计算公式:
其中:
特点:
import numpy as np
# 计算索提诺比率
def sortino_ratio(returns, risk_free_rate, target_return=0, periods=252):
"""
计算年化索提诺比率
target_return: 目标收益率,默认为0
"""
excess_returns = returns - risk_free_rate
downside_returns = returns[returns < target_return] - target_return
# 计算下行偏差
downside_deviation = np.sqrt(np.sum(downside_returns**2) / len(returns)) * np.sqrt(periods)
# 防止分母为零
if downside_deviation == 0:
return np.nan
return (np.mean(excess_returns) * periods) / downside_deviation
sr = sortino_ratio(returns, risk_free_rate)
print(f"年化索提诺比率: {sr:.4f}")
定义:单位最大回撤下的超额收益
计算公式:
其中:
特点:
定义:单位跟踪误差下的超额收益
计算公式:
其中:
特点:
指标 | 风险度量 | 适用场景 | 优势 | 局限性 |
---|---|---|---|---|
夏普比率 | 总波动率 | 一般投资策略 | 使用广泛,易于理解 | 假设正态分布,惩罚上行波动 |
索提诺比率 | 下行风险 | 收益分布偏斜策略 | 只惩罚下行风险 | 计算复杂,样本需求大 |
卡玛比率 | 最大回撤 | 长期投资策略 | 关注极端风险 | 对最大回撤期间敏感 |
信息比率 | 跟踪误差 | 相对基准策略 | 衡量相对表现 | 对基准选择敏感 |
选择原则:根据投资目标、策略特性和风险偏好选择合适的绩效指标组合
核心思想:投资者应该选择在给定风险水平下收益最高的投资组合
关键假设:
优化目标:
有效前沿:在每个风险水平上提供最高收益的投资组合集合
数学表达:
最小化
约束条件:
其中:
|
|
预算约束:权重之和为1
目标收益约束:
非负约束(禁止卖空):
权重上限(分散化要求):
行业/风格暴露约束:
输入敏感性:对期望收益和协方差矩阵的估计极为敏感
估计误差:期望收益估计困难,通常带有很大误差
极端权重:往往产生高度集中的投资组合
正态性假设:忽略了收益的偏度、峰度等高阶矩
历史依赖:基于历史数据推断未来,忽略市场结构变化
改进方向:
|
|
|
|
核心思想:结合市场均衡和投资者主观观点
两个关键输入:
优势:
|
|
|
|
方法 | 优势 | 局限性 | 适用场景 |
---|---|---|---|
均值-方差 | 理论基础完善 直观易懂 |
对输入敏感 易产生极端权重 |
输入估计较准确 短期优化 |
风险平价 | 不依赖收益估计 风险分散 |
忽略收益差异 在牛市可能落后 |
长期投资 追求稳健性 |
Black-Litterman | 结合市场与观点 生成合理权重 |
实现复杂 参数选择困难 |
主动管理 有明确观点 |
最小方差 | 不依赖收益估计 实现简单 |
可能集中于低波动资产 可能错过高收益机会 |
追求稳定 风险厌恶型 |
核心思想:根据赔率和胜率确定最优下注比例,实现资金长期最大化增长
公式(简化版):
其中:
理论基础:最大化财富的对数期望增长率
假设一个交易策略:
凯利比例计算:
意味着每次交易应该使用账户40%的资金。
实际应用:通常使用"半凯利"(凯利比例的一半)或更保守的比例,以减小波动性。
|
|
假设条件严格:要求准确的胜率和赔率估计
高波动性:完全凯利策略波动性极大
忽略心理因素:不考虑投资者的风险承受能力
破产风险:理论上有破产可能(虽然概率低)
实际应用调整:
固定分数风险模型
|
|
|
|
|
|
|
|
|
|
|
|
历史情景分析
|
假设情景分析
|
|
|
核心思想:专门建模极端事件的发生概率和影响
主要方法:
应用:
优势:比传统方法更准确地刻画尾部风险,提供更保守的风险估计
集中度风险来源
多样化原则
机器学习在风险管理中的应用
另类数据的风险信号挖掘
实时风险监控系统
团队分组:
主要任务:
书籍:
学术论文:
在线资源:
# 课程内容 **第一部分:理论讲授(2学时)** - 风险度量与评估 - 投资组合优化与风险控制 **第二部分:Hackathon实践(2学时)** - 实践准备与基础实现 - 策略优化与风险管理实践
**最大回撤(Maximum Drawdown)** - 衡量历史最大亏损幅度 - $MDD = \max_{t \in (0,T)} \left[\max_{s \in (0,t)} P_s - P_t \right]$

<span style="color:red; font-size:0.7em;">参考:Danielsson, J. (2011). Financial Risk Forecasting. Wiley & Sons Ltd.</span>
</div>
<span style="color:red; font-size:0.7em;">参考:Litterman, R. (1996). "Hot Spots and Hedges". The Journal of Portfolio Management, 22(5): 52-75.</span>
**直观理解** - VaR是分布的一个"切点" - ES是超过该切点的区域的平均值 - ES始终≥VaR(对同一置信水平)
