Week 7 AI驱动风险管理

AI-Driven Risk Management

课程目标与逻辑框架

知识目标

  • 掌握量化交易策略的风险管理理论与方法
  • 理解绩效评估指标体系(Sharpe, Sortino, Calmar, IR)
  • 掌握VaR/CVaR等风险度量方法
  • 理解投资组合优化的理论演进(Markowitz→风险平价→Black-Litterman)
  • 掌握Kelly准则在头寸管理中的应用
  • 了解AI在风险管理中的前沿应用

能力目标

  • 能够运用风险管理工具改进量化交易策略
  • 能够计算和解读关键风险指标
  • 能够进行投资组合优化和压力测试
  • 能够在AI辅助下完成风险管理实践项目

本讲教学安排

  • 量化交易策略的风险管理

    • 绩效评估指标体系
    • 风险度量基础
  • 风险度量方法

    • VaR与CVaR
    • 一致性风险度量
    • 多资产VaR计算
  • 投资组合优化

    • Markowitz均值-方差模型
    • 风险平价与Black-Litterman
    • Kelly准则与头寸管理
  • AI增强风险管理

    • LLM风险情景生成
    • DRL动态对冲
    • GNN风险传导分析
  • 课堂实践

    • 课堂实践项目介绍与选题
    • 学生分组实践(AI辅助)
    • 课堂展示准备
    • 讨论与点评

7.1 量化交易策略的风险管理

Risk Management for Quantitative Trading Strategies

  • 绩效评估指标体系
  • 风险度量基础
  • 仓位管理与头寸控制
  • 策略诊断与优化

Week 6回顾:大家创建的"看起来很蠢的"交易策略

  • 双均线策略(简单但有效)
  • 多因子选股策略
  • 配对交易策略
  • CTA趋势跟踪策略

Week 7改进方向

原始策略 → 风险管理 → 绩效提升
            ↓
       1. 加入止损机制
       2. 优化仓位管理
       3. 控制最大回撤
       4. 提升风险调整收益

核心问题:如何通过风险管理和仓位管理,让"看起来很蠢的"策略变得"聪明"?

策略诊断:从绩效指标看问题

常见问题诊断

绩效指标 问题表现 可能原因 改进方向
夏普比率 < 0.5 风险调整收益差 信号质量差或交易成本高 优化信号或降低成本
最大回撤 > 30% 回撤控制不佳 缺乏止损或仓位过重 加入止损机制
胜率 < 40% 交易准确率低 信号反转频繁 增加过滤器或延长持仓
盈亏比 < 1.0 亏损大于盈利 止损设置不当 优化止损止盈比例
年化波动率 > 30% 波动过大 仓位管理不当 降低仓位或分散化

AI辅助诊断

输入:策略回测结果(收益曲线、交易记录)
输出:
  1. 策略问题识别
  2. 改进建议
  3. 风险管理方案
  • 讨论:怎么更专业地让AI辅助诊断?

仓位管理的核心逻辑

为什么仓位管理如此重要?

凯利公式的启示

仓位大小对策略表现的影响

仓位比例 年化收益 年化波动率 夏普比率 最大回撤
100% 25% 40% 0.63 -45%
50% 12.5% 20% 0.63 -22%
25% 6.25% 10% 0.63 -11%

关键洞察:仓位大小不改变夏普比率,但显著影响回撤和心理承受能力。

从简单策略到风险管理增强策略

案例:双均线策略的改进

原始策略

# 简单双均线策略
if fast_ma > slow_ma:
    buy(100%)  # 满仓买入
elif fast_ma < slow_ma:
    sell(100%)  # 满仓卖出

改进后策略

# 加入风险管理的双均线策略
if fast_ma > slow_ma:
    # 波动率调整仓位
    position_size = target_vol / current_vol
    position_size = min(position_size, 0.5)  # 最大50%仓位
    buy(position_size)
    
    # 设置止损
    stop_loss = entry_price * 0.95  # 5%止损
    
elif fast_ma < slow_ma:
    sell(100%)

改进与效果

  • 以510300为标的
  • 分组协作,探索用AI辅助改进策略的最佳实践
  • 汇报你的改进效果:最大回撤?夏普比率? 波动率?

7.2 绩效评估指标体系

Performance Metrics

  • 夏普比率与计算实现
  • 索提诺比率
  • 卡玛比率与最大回撤
  • 信息比率
  • 绩效指标对比与应用场景

夏普比率 (Sharpe Ratio)

定义:衡量每单位总风险所获得的超额收益

其中 为组合收益率, 为无风险利率, 为组合收益率标准差



解读标准

Sharpe Ratio 评价
< 0 差(不及无风险收益)
0 - 0.5 一般
0.5 - 1.0 良好
1.0 - 2.0 优秀
> 2.0 非常优秀

局限性:假设收益率正态分布,惩罚上行波动

Python示例:夏普比率计算

import numpy as np
import pandas as pd

def calculate_sharpe_ratio(returns, risk_free_rate=0.03, 
                           trading_days=252):
    """
    计算年化夏普比率
    
    Parameters:
    returns: 日收益率Series或数组
    risk_free_rate: 年化无风险利率
    trading_days: 年化交易天数
    
    Returns:
    年化夏普比率
    """
    # 超额收益
    excess_returns = returns - risk_free_rate / trading_days
    
    # 年化
    annual_return = np.mean(excess_returns) * trading_days
    annual_vol = np.std(excess_returns, ddof=1) * np.sqrt(trading_days)
    
    sharpe = annual_return / annual_vol
    
    return sharpe

# 示例使用
np.random.seed(42)
daily_returns = np.random.normal(0.001, 0.02, 1000)
sr = calculate_sharpe_ratio(daily_returns)
print(f"年化夏普比率: {sr:.4f}")

索提诺比率 (Sortino Ratio)

定义:仅考虑下行波动率,区分"好"波动与"坏"波动

其中 为下行标准差

与夏普比率的区别

指标 分母 惩罚对象 适用场景
夏普比率 总波动率 所有波动 对称收益分布
索提诺比率 下行波动率 仅负收益波动 偏态收益、期权策略
def calculate_sortino_ratio(returns, risk_free_rate=0.03, 
                            trading_days=252):
    """计算索提诺比率"""
    excess_returns = returns - risk_free_rate / trading_days
    
    annual_return = np.mean(excess_returns) * trading_days
    
    # 仅计算下行波动率
    downside = excess_returns[excess_returns < 0]
    downside_vol = np.std(downside, ddof=1) * np.sqrt(trading_days)
    
    sortino = annual_return / downside_vol
    return sortino

sortino = calculate_sortino_ratio(daily_returns)
print(f"索提诺比率: {sortino:.4f}")

卡玛比率 (Calmar Ratio) 与最大回撤

最大回撤 (Maximum Drawdown, MDD)

卡玛比率

def calculate_max_drawdown(price_series):
    """计算最大回撤"""
    rolling_max = np.maximum.accumulate(price_series)
    drawdown = (price_series - rolling_max) / rolling_max
    max_dd = drawdown.min()
    return max_dd, drawdown

def calculate_calmar_ratio(returns, price_series, 
                           risk_free_rate=0.03, trading_days=252):
    """计算卡玛比率"""
    annual_return = np.mean(returns - risk_free_rate / trading_days) * trading_days
    max_dd, _ = calculate_max_drawdown(price_series)
    calmar = annual_return / abs(max_dd)
    return calmar, max_dd

# 示例
price = 100 * np.exp(np.cumsum(daily_returns))
calmar, mdd = calculate_calmar_ratio(daily_returns, price)
print(f"最大回撤: {mdd:.2%}")
print(f"卡玛比率: {calmar:.4f}")

信息比率 (Information Ratio)

定义:衡量相对于基准的超额收益与跟踪误差的比值

其中 为基准收益率, 为超额收益均值, 为跟踪误差

应用场景

  • 基金经理相对排名
  • 指数增强策略评估
  • 选股能力 vs 择时能力分解
def calculate_information_ratio(strategy_returns, benchmark_returns, 
                                trading_days=252):
    """计算信息比率"""
    # 超额收益
    excess = strategy_returns - benchmark_returns
    
    # 年化
    annual_excess = np.mean(excess) * trading_days
    tracking_error = np.std(excess, ddof=1) * np.sqrt(trading_days)
    
    ir = annual_excess / tracking_error
    return ir, annual_excess, tracking_error

# 模拟策略 vs 基准
benchmark_returns = np.random.normal(0.0008, 0.015, 1000)
strategy_returns = benchmark_returns + np.random.normal(0.0003, 0.005, 1000)
ir, alpha, te = calculate_information_ratio(strategy_returns, benchmark_returns)
print(f"信息比率: {ir:.4f}")
print(f"年化超额: {alpha:.2%}, 跟踪误差: {te:.2%}")

绩效指标对比与选择

指标 风险度量 适用策略类型 优点 局限性
夏普比率 总波动率 一般投资策略 使用广泛,直观 假设正态分布
索提诺比率 下行波动率 期权/非对称策略 区分波动方向 数据需求大
卡玛比率 最大回撤 CTA/趋势策略 关注极端损失 对回撤期敏感
信息比率 跟踪误差 相对收益策略 衡量选股能力 基准选择敏感

实践建议

  • 单一指标不足以全面评价策略
  • 建议同时使用多个指标
  • 结合持仓周期和策略类型选择重点指标
  • 关注样本外表现而非样本内优化

7.3 风险度量方法

Risk Measurement Methods

  • 金融风险分类
  • 传统风险指标
  • VaR与三种计算方法
  • CVaR/Expected Shortfall
  • 一致性风险度量
  • 极值理论(EVT)

金融风险分类

graph TD Risk["金融风险"] --> Market["市场风险"] Risk --> Credit["信用风险"] Risk --> Liquidity["流动性风险"] Risk --> OpRisk["操作风险"] Risk --> Model["模型风险"] Risk --> Regulatory["监管风险"] Market --> Eq["股票风险"] Market --> IR["利率风险"] Market --> FX["汇率风险"] Market --> Comm["商品风险"] Credit --> Default["违约风险"] Credit --> Spread["利差风险"] Credit --> Rating["评级风险"] Liquidity --> Funding["融资流动性"] Liquidity --> MarketLiq["市场流动性"]

本周焦点:市场风险和信用风险

传统风险指标

指标 公式 含义 优点 缺点
波动率 收益离散程度 简单直观 不区分上下
Beta 系统性风险 CAPM基础 假设线性
下行偏差 仅考虑损失 更符合风险直觉 需要阈值
最大回撤 最差情况损失 直观易懂 依赖路径
跟踪误差 相对基准偏离 组合管理 仅相对度量

核心洞察:金融风险度量从"波动率"(Markowitz)演进到"尾部风险"(VaR/CVaR),再到"情景分析"。

VaR: Value at Risk

定义:在给定置信水平和持有期内,预期的最大损失

直观理解:"95%置信水平下,日VaR为100万" = 在95%的情况下,每日损失不超过100万。

三种计算方法对比

方法 优点 缺点 适用场景
参数法 计算快、简单 假设正态分布(金融数据厚尾) 快速估算
历史模拟 无分布假设 依赖历史数据质量 实际应用
Monte Carlo 灵活、复杂结构 计算慢、模型风险 复杂衍生品

VaR计算方法详解

参数法 (方差-协方差法)

假设收益率服从正态分布,缺点是金融数据有厚尾(Tails)

历史模拟法

# 1. 计算历史收益率
returns = df['Close'].pct_change().dropna()

# 2. 对历史收益率排序
sorted_returns = returns.sort_values()

# 3. 取5%分位数
var_95 = sorted_returns.quantile(0.05)
print(f"95% VaR (日): {var_95*100:.2f}%")
# → "95%概率下,日损失不超过2.3%"

Monte Carlo模拟

# 1. 估计参数
mu = returns.mean()
sigma = returns.std()

# 2. 生成大量模拟路径
n_simulations = 100000
simulated_returns = np.random.normal(mu, sigma, n_simulations)

# 3. 取分位数
var_mc = np.percentile(simulated_returns, 5)

VaR的局限性

问题1:不满足次可加性 (Sub-additivity)

VaR不是一致性风险度量:

这违背了"组合分散化应降低风险"的基本金融原理。

例子 考虑 VaR,设两个独立损失变量均以概率取值0,以概率取值100。

损失(或 0 100
prob 0.96 0.04

损失( 0 100 200
prob 0.9216 0.0768 0.0016

本例中,

问题2:忽略尾部损失

VaR只告诉我们"最差情况的分位点",但超过VaR后的损失有多大?

         ↑          损失分布
         |  ██           
         |  ██████       
         | █████████████  
         |████████████████████
         +------------------------→ 损失
                        ↑ VaR  ↑ 超过VaR后呢?
                      95%分位    (尾部风险未知)

问题3:错误的激励
鼓励做小概率发生较大损失的交易,比如:大量卖出深度虚值的期权。

CVaR / Expected Shortfall

定义:超过VaR的期望损失(条件期望)

直观理解:"在最差的5%情景中,平均损失是多少?"

Basel III新标准:从VaR转向Expected Shortfall (CVaR)

CVaR vs VaR

维度 VaR CVaR
尾部信息 只给阈值 尾部平均值
次可加性 ❌ 不满足 ✅ 满足
优化便利性 非凸、难优化 凸、易优化
监管认可 Basel I/II Basel III
# CVaR计算
var_95 = sorted_returns.quantile(0.05)
cvar_95 = sorted_returns[sorted_returns <= var_95].mean()

一致性风险度量 (Coherent Risk Measures)

Artzner et al. (1999) 提出一致性风险度量的四条公理:

公理 定义 VaR CVaR
正齐次性 ✅ ✅
平移不变性 ✅ ✅
单调性 a.s.,则 ✅ ✅
次可加性 ❌ ✅

次可加性在金融中的含义:组合风险 ≤ 各资产风险之和 → 分散化降低风险

VaR为何不满足次可加性:两个独立债券的联合VaR可能 > 各自VaR之和(当损失分布非正态时)

Basel III 已将市场风险标准从 VaR 转向 Expected Shortfall (CVaR),因其满足一致性公理。

多资产VaR计算案例

场景:持有沪深300(50%)、中证500(30%)、国债ETF(20%)的组合,市值 = 1000万,置信水平 = 95%

import numpy as np
import pandas as pd
from scipy.stats import norm
# 资产权重和参数
weights = np.array([0.5, 0.3, 0.2])
market_values = np.array([500, 300, 200])  # 万元
annual_returns = np.array([0.08, 0.10, 0.03])
annual_vols = np.array([0.22, 0.28, 0.06])
# 相关系数矩阵
corr_matrix = np.array([
    [1.00, 0.85, -0.25],  # 沪深300 vs
    [0.85, 1.00, -0.30],  # 中证500 vs
    [-0.25, -0.30, 1.00]  # 国债 vs
])
# 组合波动率
cov_matrix = np.outer(annual_vols, annual_vols) * corr_matrix
portfolio_vol = np.sqrt(weights @ cov_matrix @ weights)
# 参数法VaR
portfolio_return = weights @ annual_returns
var_95_annual = -(portfolio_return - 1.645 * portfolio_vol)
var_95_daily = var_95_annual / np.sqrt(252)
print(f"组合年化预期收益: {portfolio_return*100:.2f}%")
print(f"组合年化波动率: {portfolio_vol*100:.2f}%")
print(f"95% 年化VaR: {var_95_annual*100:.2f}% ({var_95_annual*1000:.0f}万)")
print(f"95% 日VaR: {var_95_daily*100:.2f}% ({var_95_daily*1000:.2f}万)")

分散化效果:各资产独立VaR之和 > 组合VaR(因国债与股票负相关)

成分VaR与边际VaR

成分VaR (Component VaR) 将总体VaR分解到各资产,回答"哪个资产贡献了最多风险?"

概念 定义 用途
边际VaR (MVaR) 增加1单位某资产,VaR变化多少
成分VaR (CVaR_comp) 某资产对总VaR的绝对贡献
成分VaR占比 风险预算分配
# 成分VaR计算
mvar = norm.ppf(0.95) * (cov_matrix @ weights) / portfolio_vol
cvar_comp = weights * mvar  # 成分VaR
cvar_pct = cvar_comp / sum(cvar_comp) * 100  # 百分比

for i, asset in enumerate(['沪深300', '中证500', '国债ETF']):
    print(f"{asset}: 成分VaR = {cvar_comp[i]*100:.2f}%, 占比 = {cvar_pct[i]:.1f}%")
# 典型结果:尽管国债占比20%,但因其低波动+负相关,风险贡献仅5-8%

止损策略体系

止损是连接风险度量与风险控制的桥梁:

止损类型 原理 适用场景 参数设置
固定止损 价格跌破固定百分比/金额 方向性交易 单笔 < 资金的2%
追踪止损 止损线随价格上移,锁定利润 趋势跟踪 回撤 < 最高价的10%
波动率止损 基于ATR/历史波动率动态调整 高波动市场 2-3倍ATR
时间止损 超过持仓时间仍未盈利→平仓 事件驱动 持仓N天后未触发→退出
组合止损 组合层面回撤触发全面减仓 整体风控 月回撤 > 10%
# 追踪止损示例
def trailing_stop(entry_price, current_high, trailing_pct=0.10):
    """追踪止损:动态上移止损线"""
    stop_price = current_high * (1 - trailing_pct)
    return max(stop_price, entry_price * 0.95)  # 不低于初始止损

# 波动率止损
def volatility_stop(position, atr, atr_multiplier=2.5):
    """基于ATR的动态止损"""
    return position.entry_price - atr_multiplier * atr

EVT极值理论

极值理论 (Extreme Value Theory):专门建模尾部分布

两种主要方法

1. 块最大值法 (Block Maxima)

  • 将数据分为固定区间(如季度),取每个区间的最大值
  • 用广义极值分布(GEV)拟合

2. 超越阈值法 (POT, Peaks Over Threshold)

  • 选择阈值u,建模超过u的损失
  • 用广义帕累托分布(GPD)拟合

金融应用:在极端市场条件下(如2008年、2020年新冠),EVT对尾部风险的估计比正态分布更准确。

7.4 投资组合优化

Portfolio Optimization

  • Markowitz均值-方差
  • 风险平价
  • Black-Litterman模型
  • Kelly准则
  • 有效前沿构建

Markowitz均值-方差模型

目标:在给定风险水平下最大化收益


有效前沿 (Efficient Frontier)

graph LR A["最小方差组合
风险最低"] --> B["有效前沿"] B --> C["最大夏普组合
切线组合"] B --> D["最高收益组合"]

局限性

  • 对输入参数(期望收益、协方差)极度敏感
  • 优化结果往往极端(集中少数资产)
  • 期望收益的估计误差远大于协方差

风险平价 (Risk Parity)

核心理念:每个资产对组合总风险的贡献相等

风险贡献分解

风险平价条件

vs 传统60/40组合

组合 股票权重 债券权重 股票风险贡献 债券风险贡献
60/40 60% 40% ~90% ~10%
风险平价 ~25% ~75% 50% 50%

优势:分散化更均匀,对参数敏感度低,尾部风险更小

Black-Litterman模型

核心思想:将主观观点与市场均衡收益结合

其中:

  • : 市场均衡收益(由CAPM反推)
  • : 投资者观点(线性约束 + 观点收益)
  • : 观点的不确定性
  • : 均衡的置信度标量

优势

  • 解决Markowitz对输入参数的敏感性
  • 提供直观的"观点融合"机制
  • 输出更稳定、更合理的权重

实践应用:机构投资者最常用的组合构建方法

Black-Litterman实践

import numpy as np
import pandas as pd

def black_litterman(cap_weights, cov_matrix, P, Q, omega, tau=0.05):
    """Black-Litterman模型实现"""
    n = len(cap_weights)
    
    # 1. 从市值权重反推隐含收益
    # CAPM: Π = δ * Σ * w_mkt
    delta = 2.5  # 风险厌恶系数
    pi = delta * cov_matrix @ cap_weights
    
    # 2. 融合观点
    # 先验:N(Π, τΣ)
    # 观点:N(Q, Ω)
    
    # 后验均值
    M_inverse = np.linalg.inv(tau * cov_matrix)
    posterior_cov = np.linalg.inv(M_inverse + P.T @ np.linalg.inv(omega) @ P)
    posterior_mean = posterior_cov @ (M_inverse @ pi + P.T @ np.linalg.inv(omega) @ Q)
    
    # 3. 优化新权重
    # 最大化夏普比率
    ones = np.ones(n)
    inv_cov = np.linalg.inv(cov_matrix)
    weights = inv_cov @ posterior_mean / (ones.T @ inv_cov @ posterior_mean)
    
    return pd.Series(weights, index=cap_weights.index)

# 使用示例
cap_weights = pd.Series({'沪深300': 0.4, '国债': 0.4, '黄金': 0.2})
cov = pd.DataFrame(...)  # 协方差矩阵

# 观点:沪深300未来表现优于国债3%
P = np.array([[1, -1, 0]])
Q = np.array([0.03])
omega = np.array([[0.01]])  # 观点不确定性

weights = black_litterman(cap_weights, cov, P, Q, omega)

Kelly准则

Kelly公式(已知胜率和赔率):

其中:

  • : 最优仓位比例
  • : 胜率
  • : 败率
  • : 赔率(盈亏比)

金融中的Kelly公式(连续分布):

实践中的调整

  • 全Kelly:增长最快但波动极大(回撤经常>50%)
  • 半Kelly (f/2):回撤约25%,增长约为全Kelly的75%
  • 分数Kelly (f/k):更保守,适合实盘

分散化Kelly:各资产独立的Kelly仓位,再用组合约束修正

有效前沿的构建 (Efficient Frontier)

核心思想:在给定风险水平下最大化预期收益,或在给定收益下最小化风险

数学模型

其中 为权重向量, 为协方差矩阵, 为预期收益向量

有效前沿特性

特性 说明
前沿边界 所有有效组合的集合
最小方差组合 前沿上风险最小的点
有效部分 最小方差组合以上的部分
无效部分 最小方差组合以下的部分

Python示例:有效前沿

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def efficient_frontier(returns, num_portfolios=10000):
    """计算有效前沿"""
    n_assets = returns.shape[1]
    mean_returns = returns.mean() * 252
    cov_matrix = returns.cov() * 252
    
    results = np.zeros((3, num_portfolios))
    weights_record = []
    
    for i in range(num_portfolios):
        weights = np.random.random(n_assets)
        weights /= weights.sum()
        weights_record.append(weights)
        
        port_return = np.dot(weights, mean_returns)
        port_std = np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights)))
        
        results[0, i] = port_return
        results[1, i] = port_std
        results[2, i] = port_return / port_std  # Sharpe
    
    return results, weights_record

# 模拟数据
np.random.seed(42)
n_assets = 4
n_days = 252
returns = pd.DataFrame(
    np.random.normal(0.001, 0.02, (n_days, n_assets)),
    columns=['股票', '债券', '商品', '现金']
)

results, weights = efficient_frontier(returns)
max_sharpe_idx = results[2].argmax()
print(f"最大夏普组合: 收益={results[0,max_sharpe_idx]:.2%}, "
      f"风险={results[1,max_sharpe_idx]:.2%}")

有效前沿的应用与局限

实践中前沿的漂移问题

def rolling_frontier(returns, window=252):
    """滚动计算有效前沿,观察稳定性"""
    frontiers = []
    for i in range(window, len(returns)):
        window_data = returns.iloc[i-window:i]
        results, _ = efficient_frontier(window_data, 2000)
        max_sr = results[2].max()
        frontiers.append({
            'date': returns.index[i],
            'max_sharpe': max_sr,
            'min_vol': results[1].min()
        })
    return pd.DataFrame(frontiers)

主要局限

问题 描述 缓解方法
估计误差 输入参数敏感 收缩估计、贝叶斯方法
前沿漂移 参数随时间变化 滚动窗口、regime-switching
集中度 权重过度集中 加入分散度约束
尾部风险 方差不足以衡量风险 结合CVaR优化

风险平价 (Risk Parity)

核心理念:使各资产对组合总风险的贡献相等,而非资本配置相等

风险贡献分解

风险平价条件

方法 输入需求 复杂度 分散度
等权重 资本分散
等风险贡献(ERC) 协方差矩阵 风险分散
等波动率 波动率 风险近似分散

Python示例:风险平价组合

from scipy.optimize import minimize

def risk_parity_weights(cov_matrix):
    """计算风险平价权重(等风险贡献)"""
    n = cov_matrix.shape[0]
    
    def risk_contribution(w, cov):
        """计算各资产的风险贡献"""
        port_vol = np.sqrt(w @ cov @ w)
        rc = w * (cov @ w) / port_vol
        return rc
    
    def risk_parity_objective(w, cov):
        """目标:各资产风险贡献的方差最小化"""
        rc = risk_contribution(w, cov)
        target = np.mean(rc)
        return np.sum((rc - target) ** 2)
    
    constraints = ({'type': 'eq', 'fun': lambda w: np.sum(w) - 1})
    bounds = [(0, 1) for _ in range(n)]
    
    result = minimize(
        risk_parity_objective, 
        x0=np.ones(n) / n,
        args=cov_matrix,
        method='SLSQP',
        bounds=bounds,
        constraints=constraints
    )
    return result.x

# 示例
cov = np.array([[0.04, 0.01, 0.005],
                [0.01, 0.09, 0.02],
                [0.005, 0.02, 0.16]])
weights = risk_parity_weights(cov)
print("风险平价权重:", np.round(weights, 4))

7.5 AI增强风险管理

AI-Enhanced Risk Management

  • LLM风险情景生成
  • DRL动态对冲
  • 图神经网络风险传导
  • NLP情感分析
  • LSTM波动率预测

LLM风险情景生成

传统情景生成的问题

  • 基于历史数据重复("历史会重演"假设)
  • 无法覆盖"未曾发生过"的情景
  • 尾部风险被系统性低估

LLM增强的情景生成

graph TD Macro["当前宏观环境
利率/通胀/地缘"] --> LLM["LLM情景生成"] History["历史危机案例
1998/2008/2020"] --> LLM Expert["专家规则
压力参数"] --> LLM LLM --> Scenarios["生成的情景"] Scenarios --> S1["基准情景
经济软着陆"] Scenarios --> S2["极端情景
衰退+通胀"] Scenarios --> S3["黑天鹅
地缘冲突升级"] Scenarios --> S4["新兴风险
AI系统崩溃"] S1 --> Pricing["资产定价模拟"] S2 --> Pricing S3 --> Pricing S4 --> Pricing

优势:LLM可以生成"合理但历史上未曾出现"的情景,填补传统压力测试的盲区。

LLM情景提示模板

你是一名金融风险专家。请为以下投资组合生成5个压力测试情景:

组合配置:
- 沪深300 ETF: 40%
- 中证500 ETF: 20%
- 10年期国债: 25%
- 黄金: 10%
- 现金: 5%

当前宏观环境:
- GDP增速: 5.0%
- CPI: 2.5%
- 十年国债收益率: 3.2%
- 人民币汇率: 7.2

请生成5个互斥的情景,每个包括:
1. 情景名称和简要描述
2. 关键假设(利率变化、GDP变化、汇率变化)
3. 发生概率估计
4. 各资产的预期收益

输出格式:JSON列表

LLM vs 传统方法

  • 传统:统计方法生成(基于历史协方差矩阵)
  • LLM:结合宏观经济关联性+历史案例+逻辑推理生成更"可信"的情景

DRL动态对冲

传统Delta对冲的问题

  • 离散对冲导致对冲误差
  • 假设波动率恒定
  • 高交易成本
  • 无法适应市场制度变化

DRL动态对冲

状态空间:
  S = {标的资产价格, Delta, Gamma, Vega, 剩余期限, 隐含波动率, 账户PnL, 对冲频率计数器}

动作空间:
  A = {调整对冲比率: [-0.1, +0.1] 连续值}  = 在现有对冲基础上调整

奖励函数:
  R = -(PnL的波动率 + λ × 交易成本)

目标: 最小化对冲误差和交易成本的加权和

图神经网络风险传导

金融系统 = 网络

  • 节点:金融机构(银行、券商、基金)
  • 边:业务关系(借贷、衍生品交易、持股)

GNN风险传导建模

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
class RiskPropagationGNN(torch.nn.Module):
    """图卷积网络建模风险传导"""
    def __init__(self, in_features, hidden_dim, out_dim):
        super().__init__()
        self.conv1 = GCNConv(in_features, hidden_dim)
        self.conv2 = GCNConv(hidden_dim, hidden_dim)
        self.conv3 = GCNConv(hidden_dim, out_dim)
    def forward(self, x, edge_index):
        # x: 节点特征(资本充足率、杠杆率、流动性等)
        # edge_index: 网络连接(同业拆借、衍生品敞口)
        
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = F.dropout(x, p=0.2, training=self.training)
        
        x = self.conv2(x, edge_index)
        x = F.relu(x)
        
        # 输出:违约概率变化
        x = self.conv3(x, edge_index)
        return torch.sigmoid(x)
# 应用:模拟某大型银行违约后的风险传导
model = RiskPropagationGNN(in_features=10, hidden_dim=64, out_dim=1)
default_scenario = torch.tensor([[0.0], [1.0], [0.0], ...])  # 节点2违约
propagation = model(default_scenario, adjacency_matrix)

优势

  • 捕获非线性传导效应(多米诺骨牌)
  • 考虑网络拓扑结构
  • 识别系统重要性节点(Too-Connected-To-Fail)

金融网络风险可视化

graph TD B1["银行A
核心节点"] --- B2["银行B"] B1 --- B3["银行C"] B2 --- B4["银行D"] B3 --- B4 B3 --- B5["券商E"] B4 --- B6["保险F"] B5 --- B6 B1 --- B7["银行G
高连接"] B7 --- B8["基金H"] B7 --- B9["信托I"] B8 --- B10["私募J"] class B1,B7 highRisk; classDef highRisk fill:#ff6b6b,color:#fff;

关键指标

  • 中心度 (Centrality):识别系统重要性机构
  • 传染路径 (Contagion Path):风险扩散的路径
  • 网络密度 (Network Density):系统的互联程度
  • 核心-外围结构:核心节点失效引发的系统性风险

政策含义:GNN可以帮助监管机构识别"Too-Connected-To-Fail"的机构,提前采取缓释措施。

NLP情感分析:风险早期预警

从新闻/研报文本构建情感风险指标(W4 NLP管线→W6风控应用):

数据源 → 文本预处理 → NER → FinBERT情感分类 → 风险预警指标

新闻 (路透/财新)    → 每日情感得分
研报 (券商/评级)    → 主题+情感倾向
社交媒体 (互动易)   → 散户情绪快照

FinBERT 风险情感指数

from transformers import AutoTokenizer, AutoModelForSequenceClassification

tokenizer = AutoTokenizer.from_pretrained("ProsusAI/finbert")
model = AutoModelForSequenceClassification.from_pretrained("ProsusAI/finbert")
def risk_sentiment_index(headlines):
    """计算每日风险情绪指数:负向占比 - 正向占比"""
    scores = []
    for text in headlines:
        inputs = tokenizer(text, return_tensors="pt", truncation=True,
                           max_length=512)
        outputs = model(**inputs)
        probs = outputs.logits.softmax(dim=-1)  # [正, 负, 中性]
        # 风险信号: 负向比例 - 正向比例
        scores.append(probs[0][1].item() - probs[0][0].item())
    return sum(scores) / len(scores)

风险预警触发规则

信号 条件 风控响应
黄灯 连续3日情感<-0.3 风险敞口降至80%
红灯 单日情感<-0.6 风险敞口降至50%
黑灯 连续5日情感<-0.4 + 波动率↑ 启动应急预案

文献支撑:FinBERT 由 Araci (2019) 提出,ProsusAI 团队于 2020 年在 HuggingFace 发布预训练模型,在金融情感分类任务上显著优于通用 BERT。

LSTM波动率预测与VaR改进

传统VaR局限:假设波动率恒定或依赖GARCH——对非线性、长记忆性建模不足

LSTM增强VaR:利用LSTM架构,从历史收益率序列学习波动率动态

LSTM vs GARCH 适用场景对比

维度 GARCH(1,1) LSTM
模型类型 参数化(3参数) 非参数(深度学习)
长记忆性 有限 可学习远距离依赖
波动率聚集 内置 从数据学习
杠杆效应 GJR-GARCH/E-GARCH 从数据学习
数据需求 500+日频 2000+日频
可解释性

LLM监管合规

Basel III + LLM应用

监管要求 LLM辅助方式
模型验证文档 LLM辅助撰写验证报告
压力测试情景 LLM生成合理极端情景
风险报告 LLM自动生成风险摘要
合规审查 LLM检查交易是否合规
反洗钱(AML) LLM分析可疑交易模式

案例:LLM辅助模型风险审计

监管机构要求对风险模型进行独立审计

传统流程(4-6周):
  阅读模型文档 → 理解假设 → 检查代码 → 
  测试敏感性 → 撰写审计报告

LLM辅助流程(1-2周):
  LLM阅读文档 + 代码 → 自动生成审计问题 → 
  分析师验证 → LLM生成审计报告

DRL在动态对冲

深度强化学习 (DRL) 动态对冲相比传统Delta对冲的优势:

方面 传统Delta对冲 DRL动态对冲
模型假设 Black-Scholes假设 无模型,数据驱动
对冲频率 固定间隔 自适应决策
交易成本 忽略或简化 显式纳入优化
多维风险 仅Delta/Gamma 可同时管理多种风险
适应性 静态模型 持续学习优化

DRL对冲框架

             状态: 
  [标的资产价格, Delta, Gamma,
     剩余期限, IV, 账户余额]
             ↓
       PPO/SAC 策略网络
             ↓
   动作: [对冲比例 ∈ [0, 1]]
             ↓
   奖励: -(PNL² + λ·交易成本)

Python示例:RL动态对冲环境

import gymnasium as gym
import numpy as np
from gymnasium import spaces

class OptionHedgingEnv(gym.Env):
    """期权动态对冲环境"""
    
    def __init__(self, option_type='call', T=30, 
                 sigma=0.2, r=0.05, cost_rate=0.001):
        super().__init__()
        self.T = T
        self.sigma = sigma
        self.r = r
        self.cost_rate = cost_rate
        
        self.action_space = spaces.Box(0, 1, shape=(1,))
        self.observation_space = spaces.Box(-5, 5, shape=(5,))
    
    def step(self, action):
        hedge_ratio = action[0]
        dS = self.S * (self.r * self.dt + 
                       self.sigma * np.random.normal() * np.sqrt(self.dt))
        self.S += dS
        
        hedge_pnl = self.hedge_position * dS
        trade_cost = abs(hedge_ratio - self.hedge_ratio_prev) * self.S * self.cost_rate
        
        self.day += 1
        reward = -(hedge_pnl ** 2) - trade_cost * 100
        done = self.day >= self.T
        
        return self._get_state(), reward, done, False, {}

AI风险管理前沿方向

1. 联邦学习在风险管理中的应用

  • 多家机构在不共享原始数据的情况下联合训练风控模型
  • 适用于反欺诈、信用评分等数据敏感场景

2. 可解释AI (XAI) 在风控中的监管要求

  • SHAP、LIME解释模型决策
  • 满足巴塞尔协议模型可解释性要求

3. 大语言模型在风控报告自动化

  • LLM自动生成风险报告和监管报送材料
  • 风险事件知识图谱构建

4. 强化学习在动态风险管理

  • 自适应保证金调整
  • 动态对冲策略优化

7.6 压力测试与情景分析

Stress Testing & Scenario Analysis

  • 压力测试框架
  • 历史情景 vs 假设情景
  • 反向压力测试
  • LLM增强压力测试
  • 监管压力测试要求

压力测试框架

graph LR Risk["风险识别
识别关键风险因子"] --> Design["情景设计
历史/假设/LLM"] Design --> Impact["影响评估
重新定价组合"] Impact --> Measure["风险度量
损失分布/CVaR"] Measure --> Mitigate["缓释措施
对冲/减仓/保险"] Mitigate --> Report["报告
监管/内部"] Report --> Review["审查更新"] Review --> Risk

六大风险因子类别

因子类别 因子 冲击幅度(典型)
股票 股指下跌 -20% ~ -40%
利率 收益率曲线平移/扭曲 ±100bp ~ ±300bp
汇率 人民币贬值/升值 ±5% ~ ±15%
信用 信用利差扩大 +100bp ~ +500bp
商品 原油/黄金价格冲击 ±20% ~ ±50%
波动率 隐含波动率飙升 +50% ~ +200%

历史情景 vs 假设情景

历史情景

情景 时间 触发事件 最大跌幅
全球金融危机 2008 雷曼破产 -65% (沪深300)
欧债危机 2011 希腊债务违约 -33%
股灾 2015 去杠杆 -45%
新冠危机 2020 全球疫情 -15%
雪球事件 2024 集中敲入 -20%

假设情景(LLM可辅助生成):

  • "地缘冲突导致油价翻倍+全球衰退"
  • "AI泡沫破裂+科技股暴跌50%"
  • "人民币快速升值+出口行业重创"
  • "房地产深度调整+银行坏账爆发"

关键区别

  • 历史情景:局限性——"历史不会简单重复"
  • 假设情景:优势——覆盖"理性但未发生"的情景

反向压力测试

逆向思维:不是"给定情景,损失多少",而是"给定损失上限,什么情景会导致"

问题: "什么情景会导致组合损失超过30%?"

正向压力测试:
  给定: 股指下跌20%, 利率上升100bp
  计算: 组合损失15%
  
反向压力测试:
  给定: 组合损失30%
  求解: 需要什么程度的市场冲击?
  答案: 股指下跌35% + 信用利差扩大300bp 或 极端情况

LLM在反向压力测试中的优势

  • 从损失目标反推合理的市场情景(比纯数学方法更"合理")
  • 生成"最可能"导致给定损失的冲击组合
  • 区分"合理情景"和"不切实际情景"

监管压力测试要求

巴塞尔III压力测试框架

第一支柱:最低资本要求
  ├─ 市场风险:标准化方法 → FRTB ( Fundamental Review of the Trading Book)
  ├─ 信用风险:内部评级法(IRB) / 标准化法
  └─ 操作风险:基本指标法 / 标准化法

第二支柱:监管审查
  ├─ ICAAP (内部资本充足评估程序)
  ├─ 压力测试程序
  └─ 治理与内控

第三支柱:市场纪律
  ├─ 信息披露要求
  ├─ 风险暴露报告
  └─ 资本结构报告

国家金融监督管理总局压力测试要求

  • 至少每季度进行一次压力测试
  • 至少包含6种情景(基准、 adverse、 severely adverse)
  • 结果需上报董事会
  • 压力测试结果需影响经营决策

6.6.1 流动性风险管理

流动性风险 vs 市场风险

维度 市场风险 流动性风险
来源 市场价格不利变动 无法以合理价格平仓
度量 VaR/CVaR 流动性覆盖率(LCR)
时间尺度 日/周 小时/天
典型危机 2008, 2015 LTCM, 2020信用债

流动性风险指标

指标 公式 阈值
买卖价差 (Ask-Bid)/Mid < 1% 正常
Amihud非流动性 越小越好
流动性覆盖率 > 100%
融资集中度 最大融资方占比 < 25%

AI在流动性风险管理中的应用

  • 用ML预测市场冲击成本
  • LLM分析舆情对流动性的潜在影响
  • DRL优化交易执行降低市场冲击

6.6.2 担保品与保证金管理

衍生品交易中的担保品管理

graph TD Trade["交易执行"] --> IM["初始保证金 IM"] IM --> MM["逐日盯市(Mark-to-Market)"] MM --> VM["变动保证金 VM"] VM --> Collateral["担保品管理"] Collateral --> Haircut[" haircut 折扣率"] Collateral --> Reuse["担保品再使用"] Collateral --> Dispute["争议处理"]

担保品优化

担保品种类 折扣率(haircut) 可质押率
国债 2-5% 95-98%
高等级信用债 5-15% 85-95%
股票(沪深300) 15-30% 70-85%
股票(非成分) 30-50% 50-70%
现金 0% 100%

AI优化担保品管理

  • LLM实时监控担保品质量和可用性
  • ML预测担保品折扣率变化
  • 优化担保品选择和再使用策略

信用风险管理 (Credit Risk)

定义:交易对手未能履行合约义务导致损失的风险

信用风险量化

其中:

  • (违约概率): 交易对手违约的可能性
  • (违约风险暴露): 违约时的敞口金额
  • (违约损失率): 违约后的损失比例(



信用风险模型演进

模型 方法 应用
传统评分卡 Logistic回归 零售信贷评分
Merton模型 期权定价框架 公司债定价
CreditMetrics 评级迁移矩阵 投资组合信用VaR
CreditRisk+ 精算模型 损失分布估计
ML模型 XGBoost/深度学习 违约预测、欺诈检测

Python示例:信用风险评分卡

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, accuracy_score

def credit_risk_scoring(features, labels):
    """
    构建信用风险评分模型
    
    使用逻辑回归构建可解释的信用评分卡
    """
    X_train, X_test, y_train, y_test = train_test_split( features, labels, test_size=0.3, random_state=42 )
    
    from sklearn.linear_model import LogisticRegression
    from sklearn.preprocessing import StandardScaler
    
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)
    
    model = LogisticRegression(class_weight='balanced')
    model.fit(X_train_scaled, y_train)
    
    y_pred_proba = model.predict_proba(X_test_scaled)[:, 1]
    y_pred = model.predict(X_test_scaled)
    
    print(f"准确率: {accuracy_score(y_test, y_pred):.4f}")
    print(f"AUC-ROC: {roc_auc_score(y_test, y_pred_proba):.4f}")
    
    # 系数解读(原始尺度)
    coef_df = pd.DataFrame({'feature': features.columns, 'coefficient': model.coef_[0], 'odds_ratio': np.exp(model.coef_[0])})
    return model, coef_df

# 模拟信用数据
np.random.seed(42)
n_samples = 1000
features = pd.DataFrame({'income': np.random.normal(50, 20, n_samples), 'debt_ratio': np.random.beta(2, 5, n_samples), 'payment_history': np.random.uniform(0, 1, n_samples),
    'months_employed': np.random.exponential(60, n_samples)})
labels = (features['payment_history'] * 0.5 + (1 - features['debt_ratio']) * 0.3 + np.random.normal(0, 0.1, n_samples) > 0.5).astype(int)

操作风险与合规管理 (Operational Risk)

操作风险类型(巴塞尔协议分类):

类别 示例 金融影响
内部欺诈 交易员违规、内幕交易 巴林银行、法兴银行
外部欺诈 黑客攻击、伪造 网络安全事件
系统故障 交易系统宕机 算法错误导致巨亏
流程管理 结算失败、合规遗漏 监管处罚
人员风险 关键人员离职 策略失效

操作风险资本计量

  • 基本指标法:前三年总收入均值的15%
  • 标准法:按业务线分类计算
  • 高级计量法(AMA):内部损失数据模型

AI在操作风险中的应用

  • 异常交易行为检测(无监督学习)
  • 合规文档自动化审查(LLM)
  • 操作流程的RPA自动化
  • 网络安全异常检测

压力测试方法与实践

压力测试类型

类型 方法 示例
情景分析 假设特定情景 利率上升300bp
敏感性分析 单因子变动 波动率增加50%
逆向压力测试 从损失倒推情景 什么情景导致破产?
历史情景 重复历史危机 2008年金融危机重现

历史情景示例

historical_scenarios = {
    '2008_金融危机': {
        'equity': -0.50,   # 股市下跌50%
        'credit_spread': 0.06,  # 信用利差扩大600bp
        'vol_index': 0.35,  # 波动率升至35
        'fx_emerging': -0.20  # 新兴市场货币贬值20%
    },
    '2020_新冠': {
        'equity': -0.34,
        'credit_spread': 0.04,
        'vol_index': 0.45,
        'fx_emerging': -0.15
    },
    '2015_A股': {
        'equity': -0.45,
        'credit_spread': 0.03,
        'vol_index': 0.50,
        'fx_emerging': -0.05
    }
}

全面风险管理体系

ERM (Enterprise Risk Management) 框架

graph TD riskMeasure["风险度量与量化(Risk Measurement)"] --> riskMitigation["风险控制与缓释(Risk Mitigation)"] riskMitigation --> riskMonitor["风险监控与报告(Risk Monitoring)"] riskMonitor --> riskGov["风险治理与文化(Risk Governance)"]

三道防线模型

防线 角色 职责
第一道 业务部门 识别和管理日常风险
第二道 风控部门 制定政策、监控风险限额
第三道 内部审计 独立评估风控有效性

压力测试Python实战

import numpy as np
import pandas as pd

def stress_test_portfolio(positions, risk_factors, scenarios):
    """
    投资组合压力测试
    
    Parameters:
    positions: dict {资产名: 市值}
    risk_factors: dict {资产名: {因子名: 暴露}}
    scenarios: dict {情景名: {因子名: 变化率}}
    
    Returns:
    DataFrame: 各情景下的组合损益
    """
    results = []
    for scenario_name, shocks in scenarios.items():
        total_pnl = 0
        details = {}
        
        for asset, exposure in positions.items():
            asset_factors = risk_factors[asset]
            asset_pnl = 0
            
            for factor, beta in asset_factors.items():
                if factor in shocks:
                    factor_pnl = exposure * beta * shocks[factor]
                    asset_pnl += factor_pnl
            
            total_pnl += asset_pnl
            details[asset] = asset_pnl
        
        results.append({
            'scenario': scenario_name,
            'total_pnl': total_pnl,
            'pnl_pct': total_pnl / sum(positions.values()),
            **details
        })
    
    return pd.DataFrame(results)

# 示例
positions = {'股票': 1e8, '债券': 5e7, '商品': 2e7}
risk_factors = {'股票': {'equity': 1.0, 'rate': 0.2, 'credit': 0.3}, '债券': {'equity': 0.1, 'rate': 0.8, 'credit': 0.5}, '商品': {'equity': 0.3, 'rate': 0.1, 'credit': 0.1}}
scenarios = {'2008危机': {'equity': -0.5, 'rate': -0.02, 'credit': 0.06}, '利率冲击': {'equity': -0.1, 'rate': 0.01, 'credit': 0.02}, '温和衰退': {'equity': -0.2, 'rate': -0.005, 'credit': 0.03}}

result = stress_test_portfolio(positions, risk_factors, scenarios)
print(result[['scenario', 'total_pnl', 'pnl_pct']])

风险预算与限额管理

风险预算框架

            组合总风险预算 (100%)
                   ↓
    ┌──────────────┼──────────────┐
    ↓              ↓              ↓
股票部门        债券部门        另类部门
(40%)          (30%)          (30%)
    ↓              ↓              ↓
行业/风格       久期/信用       策略/产品
细分限额        细分限额        细分限额

常用风险限额类型

限额类型 示例 监控频率
VaR限额 日VaR < 5000万 每日
止损限额 单月亏损 < 10% 每月
集中度限额 单票 < 5% 每周
杠杆限额 总杠杆 < 3x 每日
流动性限额 5日变现 > 80% 每月

监管资本与巴塞尔协议

巴塞尔协议III框架

风险类型 计量方法 资本要求
信用风险 标准法/内部评级法(IRB) 风险加权资产(RWA)的8%
市场风险 标准法/内部模型法(IMA) VaR + 压力VaR
操作风险 标准法/高级计量法(AMA) 按收入比例

中国版巴塞尔协议实施

  • 2012年: 《商业银行资本管理办法》正式实施
  • 2023年: 巴塞尔III最终版落地,强化内部模型约束
  • 对量化机构的影响:杠杆率约束、衍生品资本成本上升

杠杆率与流动性覆盖率

7.7 课堂实践项目

Hands-on Projects

  • 项目选题介绍
  • 实践要求
  • AI协作指南
  • 评分标准
  • 展示准备

课堂实践项目选题

选题一:量化策略绩效诊断与改进

目标:对Week 6创建的量化策略进行绩效诊断,识别问题并提出改进方案

任务

  1. 选择一个Week 6创建的策略(如双均线、多因子等)
  2. 计算关键绩效指标(夏普比率、最大回撤、胜率等)
  3. 识别策略问题(如回撤过大、波动率过高)
  4. 提出风险管理改进方案
  5. 实现改进版本并对比效果

AI协作点:策略诊断分析、改进建议生成、代码实现

提示

  • 使用backtrader计算绩效指标
  • 关注回撤控制和仓位管理
  • 对比改进前后的风险调整收益

选题二:VaR/CVaR计算与回测验证

目标:实现VaR/CVaR计算,并进行回测验证

任务

  1. 实现三种VaR计算方法(参数法、历史模拟、Monte Carlo)
  2. 计算组合的VaR和CVaR
  3. 进行VaR回测验证(Kupiec检验)
  4. 分析不同方法的优缺点

AI协作点:VaR计算实现、回测方法设计、结果分析

提示

  • 使用历史数据计算VaR
  • 关注VaR的局限性和CVaR的优势
  • 验证VaR假设的合理性

选题三:Black-Litterman组合优化

目标:实现Black-Litterman模型,构建最优投资组合

任务

  1. 获取A股数据(如沪深300成分股)
  2. 计算协方差矩阵和市场均衡收益
  3. 定义投资者观点(绝对观点和相对观点)
  4. 实现Black-Litterman模型
  5. 与传统Markowitz模型对比

AI协作点:模型实现、参数设置、结果解读

提示

  • 关注观点矩阵P和观点收益Q的定义
  • 分析观点不确定性对结果的影响
  • 对比不同模型的权重稳定性

选题四:LLM辅助风险情景生成

目标:使用LLM生成投资组合的压力测试情景

任务

  1. 定义投资组合(如股票+债券+黄金)
  2. 设计LLM提示词,生成风险情景
  3. 分析每个情景对组合的影响
  4. 评估情景的合理性和覆盖性

AI协作点:提示词设计、情景生成、影响分析

提示

  • 关注宏观经济因素(利率、通胀、汇率)
  • 生成"合理但历史上未曾出现"的情景
  • 评估情景的概率分布

选题五:止损策略优化

目标:设计和优化止损策略,降低策略回撤

任务

  1. 实现多种止损策略(固定止损、追踪止损、波动率止损)
  2. 在历史数据上回测不同止损策略
  3. 分析止损参数对策略表现的影响
  4. 选择最优止损方案

AI协作点:止损策略设计、参数优化、效果评估

提示

  • 关注止损频率和交易成本的平衡
  • 分析不同市场环境下的止损效果
  • 考虑止损的心理因素

选题六:风险预算与仓位管理

目标:实现风险预算框架,优化仓位管理

任务

  1. 实现等风险贡献(ERC)组合
  2. 计算各资产的风险贡献
  3. 设计风险预算约束
  4. 分析风险预算对组合表现的影响

AI协作点:风险贡献计算、优化算法、结果分析

提示

  • 关注风险贡献的分解和归因
  • 分析风险预算与收益的关系
  • 考虑实际交易中的约束条件

AI协作指南

推荐AI工具

工具类型 代表工具 应用场景
代码助手 GitHub Copilot, Cursor 策略代码编写
对话AI ChatGPT, Claude 策略设计讨论
数据分析 Julius, Code Interpreter 数据探索与可视化
文献检索 Elicit, Consensus 相关研究查找

有效协作技巧

  1. 明确问题:清晰描述要解决的问题
  2. 分步骤:将复杂任务分解为小步骤
  3. 验证结果:AI生成的代码和建议需要验证
  4. 保持批判:不要盲目接受AI的所有建议
  5. 记录过程:记录与AI的对话和决策过程

示例提示词

我正在研究双均线策略的改进方案。当前策略的问题是:
1. 最大回撤过大(-45%)
2. 波动率过高(40%)
3. 夏普比率较低(0.63)

请帮我设计一个风险管理改进方案,包括:
1. 仓位管理策略(如波动率调整)
2. 止损机制(如追踪止损)
3. 信号过滤器(如趋势强度)

请提供具体的Python实现代码,并解释每个改进点的原理。

风险管理课程总结

本周知识体系

量化交易策略的风险管理(连接Week 6)
         ↓
风险度量 (VaR/CVaR/绩效指标)
         ↓
投资组合优化 (Markowitz/风险平价/Black-Litterman)
         ↓
AI增强风控 (LLM情景/DRL对冲/GNN传导)
         ↓
风险治理 (压力测试/ERM框架/巴塞尔协议)
         ↓
实践应用 (策略改进/组合优化/情景分析)

核心能力建设

能力 掌握程度 应用场景
策略诊断 识别策略问题和改进方向 量化策略优化
风险度量 VaR/CVaR计算与解读 日常风控报告
组合优化 多模型对比与选择 资产配置决策
AI工具应用 LLM/DRL/GNN基础 前沿风控实践
风险治理 框架理解与实施 合规与监管

延伸思考

  1. 如何平衡策略收益和风险管理?
  2. AI在风险管理中的最佳使用方式是什么?
  3. 如何验证LLM生成的风险情景的合理性?
  4. 强化学习在风控中的可解释性问题如何解决?

本周总结

核心收获

  1. 理解量化交易策略的风险管理框架
  2. 掌握绩效评估指标体系(Sharpe, Sortino, Calmar, IR)
  3. 掌握VaR/CVaR的风险度量体系
  4. 理解Markowitz→风险平价→Black-Litterman的演进
  5. 掌握Kelly准则在头寸管理中的应用
  6. 了解AI在风险管理中的前沿应用
  7. 能够运用风险管理工具改进量化交易策略
  8. 能够在AI辅助下完成风险管理实践项目

预习准备

  • 阅读结构化产品基本概念
  • 了解中国场外衍生品市场
  • 了解雪球产品结构

下周预告
Week 8: 智能结构化产品设计

  • 结构化产品市场发展
  • DEMAND-SPACE-M框架
  • 雪球产品深度解析
  • LLM辅助产品设计
  • 多轮对话合规审查

推荐阅读

  • 《风险管理与金融机构》Hull
  • 《Quantitative Risk Management》McNeil
  • 《巴塞尔协议III》最终版文件
  • "Deep Hedging" (Buehler et al., 2019)

延伸阅读

经典教材

  • Jorion "Value at Risk: The New Benchmark for Managing Financial Risk"
  • Hull "Risk Management and Financial Institutions"

信用风险建模核心

CreditMetrics模型

核心: 评级迁移矩阵 → 信用VaR

评级迁移矩阵 (1年):
  AAA → AA: 5%, AAA → A: 1%, AAA → Default: 0.01%
  AA → A: 8%, AA → BBB: 2%, ...
  BBB → BB: 4%, BBB → Default: 0.5%

信用VaR = 组合当前价值 - 置信水平下的组合最坏价值

Merton模型 (KMV)

  • DD (Distance to Default): 资产价值到违约点的距离
  • DD→PD: 通过历史DD与违约的映射关系

信用风险传染模型

GNN捕获企业间网络效应(供应链、股权、借贷关系)

操作风险与流动性风险

Basel III操作风险分类

类别 示例 AI检测方法
内部欺诈 交易员隐瞒亏损 异常PnL模式检测
外部欺诈 黑客攻击/支付欺诈 GNN交易图异常检测
系统故障 交易系统宕机 实时监控+告警
执行/流程错误 下单数量/价格错误 订单合理性规则+ML

操作风险量化 (LDA方法)

频率(λ)∼Poisson, 严重度∼LogNormal, 通过Monte Carlo模拟计算

流动性风险度量

指标 公式 含义
Amihud非流动性 单位成交额的价格冲击
买卖价差 即时交易成本
市场深度 前5档买卖量之和 大单吸收能力

中国市场特殊性

  • 涨跌停→极端日流动性为零
  • T+1→日内流动性受限
  • 散户为主→流动性供给不稳定(恐慌时买卖单同时消失)

Basel III与资本管理

三大支柱

支柱 内容 中国实施
P1 最低资本 信用+市场+操作风险资本 银保监《资本管理办法》
P2 监督检查 ICAAP内部资本评估 银保监年度检查
P3 市场纪律 公开信息披露 上市银行年报+季报

FRTB (交易账户根本审查)

  • 从VaR→Expected Shortfall (97.5%, 不同流动性期限)
  • 引入流动性期限(10天/20天/60天/120天)
  • 对模型风险更严格的惩罚

AI在资本管理中的应用

  • ML预测风险加权资产(RWA)优化
  • LLM辅助监管报告生成
  • RL优化资本配置(在业务线和风控间分配资本)

工具

  • riskfolio-lib: Python组合优化库
  • PyPortfolioOpt: 组合优化
  • PyTorch Geometric: GNN实现

### Black-Litterman模型 **核心思想**:将市场均衡收益与投资者主观观点结合 **模型公式**: $$\mu_{BL} = [(\tau\Sigma)^{-1} + P^T\Omega^{-1}P]^{-1}[(\tau\Sigma)^{-1}\Pi + P^T\Omega^{-1}Q]$$ 其中: - $\Pi$: 市场隐含均衡收益(CAPM逆推) - $P, Q$: 投资者观点的表达矩阵和收益向量 - $\Omega$: 观点不确定性(对角线矩阵) - $\tau$: 均衡不确定性的缩放因子 **与Markowitz对比**: | 方面 | Markowitz | Black-Litterman | |------|-----------|----------------| | 输入敏感性 | 极高 | 低(受均衡约束)| | 观点融入 | 无 | 显式表达 | | 权重稳定性 | 差 | 好 | | 实务使用 | 教学为主 | 机构主流 | ---

**PPO训练结果**(论文数据): | 策略 | 对冲误差 (RMSE) | 交易成本 | 总成本 | |------|----------------|---------|-------| | Delta对冲(日频) | 2.45% | 0.12% | 2.57% | | Delta对冲(周频) | 3.78% | 0.04% | 3.82% | | DRL-PPO | 1.89% | 0.15% | 2.04% | DRL策略在对冲精度和成本之间找到更好的平衡 ---

```python import torch.nn as nn class VolatilityLSTM(nn.Module): """LSTM预测已实现波动率,用于VaR计算""" def __init__(self, input_dim=1, hidden_dim=64, num_layers=2): super().__init__() self.lstm = nn.LSTM(input_dim, hidden_dim, num_layers, batch_first=True, dropout=0.2) self.fc = nn.Sequential( nn.Linear(hidden_dim, 32), nn.ReLU(), nn.Linear(32, 1), nn.Softplus() # 保证波动率为正 ) def forward(self, x): # x: (batch, seq_len, features) — 历史日收益率序列 lstm_out, _ = self.lstm(x) last_hidden = lstm_out[:, -1, :] return self.fc(last_hidden) # 预测波动率 → 计算VaR # VaR_t = -z_α × σ̂_LSTM × √h ``` ---

> **关键文献**:Kim & Won (2018, *Expert Systems with Applications*) "Forecasting the volatility of stock price index: A hybrid model integrating LSTM with multiple GARCH-type models" — 提出 LSTM-GARCH 混合模型,在 KOSPI 200 上预测误差降低约 20%。

### 实践要求与评分标准 **时间安排**:30-45分钟 **提交内容**: <div style="columns: 2; column-gap: 40px;"> <font size=5> 1. **实践报告** - 选题背景和目标 - 方法论和实现过程 - 结果分析和讨论 - 改进建议 2. **代码实现** - 完整可运行的代码 - 数据获取和处理 - 核心算法实现 </font> </div> <div style="columns: 2; column-gap: 40px;"> <font size=5> 3. **AI协作记录** - 与AI的对话记录 - AI建议的采纳情况 - AI辅助的具体环节 4. **课堂展示** - 5分钟PPT展示 - 关键结果和发现 - 讨论和Q&A </font> </div> **评分标准**: | 评分维度 | 权重 | 评分要点 | |---------|------|---------| | 选题质量 | 20% | 问题明确、目标具体、有实际意义 | | 方法论 | 25% | 方法选择合理、实现正确、有创新性 | | 结果分析 | 25% | 分析深入、结论可靠、有洞察力 | | AI协作 | 15% | 有效利用AI、记录完整、有反思 | | 展示表达 | 15% | 表达清晰、逻辑连贯、回答问题 | ---

### 课堂展示准备 **展示时间**:5分钟/组 **展示结构**: 1. **问题背景**(1分钟) - 选题是什么?为什么重要? - Week 6策略存在什么问题? 2. **方法与实现**(2分钟) - 采用了什么方法? - 如何实现的? 3. **关键结果**(1.5分钟) - 主要发现是什么? - 改进效果如何? 4. **讨论与反思**(0.5分钟) - 有什么局限性? - 未来改进方向? **展示技巧**: - 使用图表和数据支持观点 - 突出关键发现和创新点 - 准备回答技术问题 - 保持简洁和清晰 ---

**论文** - Markowitz (1952): "Portfolio Selection" - Black & Litterman (1992): "Global Portfolio Optimization" - Artzner et al. (1999): "Coherent Measures of Risk" **前沿** - Kim et al. (2024): "LLM-Generated Stress Scenarios for Risk Management" - Hambly et al. (2023): "Deep Reinforcement Learning for Hedging" - Ronnqvist & Sarlin (2017): "Bank Networks from Text: Interbank Risk"