欢迎!

Python 中的定量风险管理

Dr. Jamsheed Shorish

Computational Economist

关于我

  • 计算经济学家
  • 专长:
    • 资产定价
    • 金融科技("FinTech")
    • 经济与金融的计算机应用
  • 合作讲师,澳国立大学"数字经济的经济分析"
  • Shorish Research(比利时):计算型商业应用
Python 中的定量风险管理

什么是定量风险管理?

  • 定量风险管理:研究"可量化的不确定性"
  • 不确定性
    • 未来结果未知
    • 结果影响规划决策
  • 风险管理:缓解不利结果(降低影响)
  • 可量化不确定性:找出可度量风险的因素
    • 示例:火险。哪些因素提高起火概率?
  • 本课程:聚焦于与"金融组合"相关的风险
Python 中的定量风险管理

风险管理与全球金融危机

  • 大衰退(2007–2010)
    • 全球增长损失超 2 万亿美元
    • 美国:居民财富蒸发近 10 万亿美元
    • 美股市值约蒸发 8 万亿美元
  • 全球金融危机(2007–2009)
    • 基本资产价值大幅调整
    • 对未来回报高度不确定
    • 资产回报波动率高
    • 风险管理决定成败
Python 中的定量风险管理

快速回顾:金融组合

  • 金融组合
    • 由回报不确定的资产构成
    • 股票
    • 债券
    • 外汇持有(forex)
    • 期权
  • 挑战:量化风险以管理不确定性
    • 做出最优投资决策
    • 在风险偏好下最大化组合回报
Python 中的定量风险管理

量化回报

  • 组合回报:各资产回报的加权和
    • Pandas 数据分析库
    • DataFrame prices
    • .pct_change() 方法
    • returns.dot() 方法
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
Python 中的定量风险管理

量化风险

  • 组合收益波动率 = 风险
  • 通过协方差矩阵计算波动率
  • returns 用 DataFrame 的 .cov() 并年化

 

 

covariance = returns.cov()*252

print(covariance)

4 个资产间的示例协方差矩阵

Python 中的定量风险管理

量化风险

  • 组合收益波动率 = 风险
  • 通过协方差矩阵计算波动率
  • returns 用 DataFrame 的 .cov() 并年化
  • covariance 的对角线是各资产方差  

   

covariance = returns.cov()*252

print(covariance)

示例协方差矩阵,对角线高亮方差

Python 中的定量风险管理

量化风险

  • 组合收益波动率 = 风险
  • 通过协方差矩阵计算波动率
  • returns 用 DataFrame 的 .cov() 并年化
  • covariance 的对角线是各资产方差
  • covariance 的非对角线是资产间协方差
covariance = returns.cov()*252

print(covariance)

示例协方差矩阵,非对角线高亮协方差

Python 中的定量风险管理

组合风险

  • 取决于组合中资产的 weights
  • 组合方差 $\sigma_p^2$ 为 $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • 可用 Python 的矩阵乘法运算符 @ 计算
  • 通常用标准差替代方差
weights = [0.25, 0.25, 0.25, 0.25] # 假设组合含四个资产

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
Python 中的定量风险管理

波动率时间序列

  • 也可计算组合的时序波动率
  • 用"窗口"在固定区间内计算(如周、30 天"月")
  • Series.rolling() 创建窗口
  • 观察波动率趋势与潜在极端事件
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

30 天滚动窗口的年化收益波动率图

Python 中的定量风险管理

开始练习!

Python 中的定量风险管理

Preparing Video For Download...