量化投资基础(一)之Black-Litterman模型

点赞、关注,养成良好习惯
Life is short, U need Python
量化投资基础系列,不断更新中


1. 投资组合收益率与风险

假设市场有 N N N 个资产,其随机收益率分别为 R 1 , R 2 , … , R N R_1,R_2,\dots,R_N R1,R2,,RN ,对应的投资比例分别为 w 1 , w 2 , … , w N w_1,w_2,\dots,w_N w1,w2,,wN,且 w 1 + w 2 + ⋯ + w N = 1 w_1+w_2+\dots+w_N=1 w1+w2++wN=1

  • 投资组合的收益率
    R p = ω 1 R 1 + ω 2 R 2 + ⋯ + ω N R N R_{p} = \omega_{1}R_{1}+\omega_{2}R_{2}+\dots+\omega_{N}R_{N} Rp=ω1R1+ω2R2++ωNRN
  • 投资组合收益率的期望(期望收益率)
    E ( R p ) = ω 1 E ( R 1 ) + ω 2 E ( R 2 ) + ⋯ + ω N E ( R N ) \mathbb{E}(R_{p}) = \omega_{1}\mathbb{E}(R_{1})+\omega_{2}\mathbb{E}(R_{2})+\dots+\omega_{N}\mathbb{E}(R_{N}) E(Rp)=ω1E(R1)+ω2E(R2)++ωNE(RN)
  • 投资组合收益率的方差
    σ 2 ( R p ) = σ 2 ( ∑ i = 1 N ω i R i ) = ∑ i = 1 N ω i 2 σ 2 ( R i ) + ∑ i ≠ j ω i ω j σ ( R i , R j ) \begin{aligned} \sigma^{2}\left(R_{p}\right) &=\sigma^{2}\left(\sum_{i=1}^{N} \omega_{i} R_{i}\right) \\ &=\sum_{i=1}^{N} \omega_{i}^{2} \sigma^{2}\left(R_{i}\right)+\sum_{i \neq j} \omega_{i} \omega_{j} \sigma\left(R_{i}, R_{j}\right) \end{aligned} σ2(Rp)=σ2(i=1NωiRi)=i=1Nωi2σ2(Ri)+i=jωiωjσ(Ri,Rj)

2. Black-Litterman模型

均值–方差模型中资产配置的前提是对未来形成预期(即已知未来各资产 R 1 , R 2 , … , R n R_1,R_2,\dots,R_n R1,R2,,Rn 的概率分布),然后利用Markowitz模型求得最优资产配比。Markowitz模型的输入参数包括历史数据法(均值、方差、协方差矩阵)和情景分析法(主观因素,随意性强)两种。

MV模型的不足之处

(1)基于历史数据法的基础是相信未来资产收益率分布与过去相同,但现实中,历史并不一定完全重演。


(2)历史数据法对样本区间非常敏感。

1992年,Fisher Black 和 Robert Litterman 对全球债券投资组合研究发现,当对债券预期报酬率做0.1%微调后,资产组合的投资比例由原来的10.0%提高到55.0%,这充分说明 Markowitz 模型的最优资产配比对输入参数十分敏感。

1992年,Fisher Black 和 Robert Litterman 提出了改进的模型——Black-Litterman模型(简称BL模型),其核心思想是将投资者对大类资产的观点(主观观点)与市场均衡收益(先验预期收益)相结合,从而形成新的预期收益率(后验预期收益率)。该模型自提出以来,逐渐被华尔街主流所接受,现成为高盛公司资产管理部门在资产配置上的一个主要工具。

2.1 BL模型的步骤

(1)使用历史数据估计预期收益率的协方差矩阵,根据 N N N 种资产过去 T T T 期的收益率资料, 则协方差矩阵为:

Σ ^ = [ σ ^ 11 σ ^ 12 ⋯ σ ^ 1 N σ ^ 21 σ ^ 22 ⋯ σ ^ 2 N ⋮ ⋮ ⋱ ⋮ σ ^ N 1 σ ^ N 2 ⋯ σ ^ N N ] \hat{\Sigma}=\left[\begin{array}{cccc} \hat{\sigma}_{11} & \hat{\sigma}_{12} & \cdots & \hat{\sigma}_{1 N} \\ \hat{\sigma}_{21} & \hat{\sigma}_{22} & \cdots & \hat{\sigma}_{2 N} \\ \vdots & \vdots & \ddots & \vdots \\ \hat{\sigma}_{N 1} & \hat{\sigma}_{N 2} & \cdots & \hat{\sigma}_{N N} \end{array}\right] Σ^= σ^11σ^21σ^N1σ^12σ^22σ^N2σ^1Nσ^2Nσ^NN

式中 σ ^ i j \hat{\sigma}_{i j} σ^ij 是根据样本数据估计出来的资产 i i i 与 j$ $ 的协方差, 表达式为 σ ^ i j = E [ ( R i , t − μ ^ i ) ( R j , t − μ ^ j ) ] \hat{\sigma}_{i j}=\mathbb{E}\left[\left(R_{i, t}-\right.\right. \left.\left.\hat{\mu}_{i}\right)\left(R_{j, t}-\hat{\mu}_{j}\right)\right] σ^ij=E[(Ri,tμ^i)(Rj,tμ^j)] , 其中 μ ^ i \hat{\mu}_{i} μ^i 为资产 i i i 的历史平均收益率, μ ^ i = ∑ t = 1 T R i , t T \hat{\mu}_{i}=\frac{\sum_{t=1}^{T} R_{i, t}}{T} μ^i=Tt=1TRi,t

(2)确定市场预期之收益率向量($ N \times 1$ 列向量) ,也就是先验预期收益之期望值。

  • 可以用历史收益率均值作为先验预期收益之期望值, 即
    π = μ ^ \pi=\hat{\mu} π=μ^
  • 也可以根据市场现有的价格、市场组合构成反推出市场隐含的均衡收益率(Implied Equilibrium Return)来作为先验预期收益之期望,即
    π = λ Σ ^ ω m \pi=\lambda \hat{\Sigma} \omega^{m} π=λΣ^ωm
    其中 λ = E [ R m ] − R f σ m 2 \lambda=\frac{\mathbb{E}\left[R_{m}\right]-R_{f}}{\sigma_{m}^{2}} λ=σm2E[Rm]Rf 为市场组合单位风险的超额收益, 反应了市场对风险趋避的程度, R m R_{m} Rm 为市场组合之收益率, R f R_{f} Rf 为无风险收益, σ m 2 \sigma_{m}^{2} σm2 为市场组合收益率之方差), ω m \omega^{m} ωm 为市场组合各资产的投资比例, Σ ^ \hat{\Sigma} Σ^ 为估计出来的协方差矩阵。
  • 还可以根据 CAPM 模型中的 Alpha(历史超额收益率)来估计 $\pi $ 。

(3)融合投资人的个人观点, 即确定 P 、 Q 、 Ω P 、 Q 、 \Omega PQΩ

比如,现在市场有五种资产 A 、 B 、 C 、 D 、 E A 、 B 、 C 、 D 、 E ABCDE,投资人基于自己的经验及分析,形成以下判断:

  • 资产 A A A 的收益率为 15 % 15 \% 15%
  • 资产 B B B 比资产 D D D 的收益率高 5 % 5 \% 5%
  • 资产 B B B C C C 比资产 A A A 的收益率低 6 % 6 \% 6%

据此, 可以写出反应投资人主观观点的矩阵:
P = [ 1 0 0 0 0 0 1 0 − 1 0 − 1 1 2 1 2 0 0 ] P=\left[\begin{array}{ccccc} 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & -1 & 0 \\ -1 & \frac{1}{2} & \frac{1}{2} & 0 & 0 \end{array}\right] P= 10101210021010000

看法向量:
q = [ 15 % , 5 % , 6 % ] T q=[15 \%, 5 \%, 6 \%]^{T} q=[15%,5%,6%]T

看法向量误差项的协方差矩阵:
ω i j = { p ( τ Σ ) p T ∀ i = j 0 ∀ i ≠ j 或 Ω = diag ⁡ ( P ( τ Σ ) P T ) \begin{gathered} \omega_{i j}= \begin{cases}p(\tau \Sigma) p^{T} & \forall i=j \\ 0 & \forall i \neq j\end{cases} \\ \text{或}\\ \Omega=\operatorname{diag}\left(P(\tau \Sigma) P^{T}\right) \end{gathered} ωij={p(τΣ)pT0i=ji=jΩ=diag(P(τΣ)PT)

(4)修正后验收益。

  • 后验预期收益率的期望值: E ( R ∣ q ; Ω ) = μ B L \text{后验预期收益率的期望值:}\mathbb{E}\left(\left.R\right|_{q ; \Omega}\right) = \mu_{B L} 后验预期收益率的期望值:E(Rq;Ω)=μBL
  • 后验预期收益率的方差: Σ B L = Σ + Σ B L μ \text{后验预期收益率的方差:}\Sigma_{B L} = \Sigma+\Sigma_{B L}^{\mu} 后验预期收益率的方差:ΣBL=Σ+ΣBLμ
  • μ B L = [ ( τ Σ ) − 1 + P T Ω − 1 P ] − 1 [ ( τ Σ ) − 1 π + P T Ω − 1 q ] \mu_{B L}=\left[(\tau \Sigma)^{-1}+P^{T} \Omega^{-1} P\right]^{-1}\left[(\tau \Sigma)^{-1} \pi+P^{T} \Omega^{-1} q\right] μBL=[(τΣ)1+PTΩ1P]1[(τΣ)1π+PTΩ1q]
  • Σ B L μ = [ ( τ Σ ) − 1 + P T Ω − 1 P ] − 1 \Sigma_{B L}^{\mu}=\left[(\tau \Sigma)^{-1}+P^{T} \Omega^{-1} P\right]^{-1} ΣBLμ=[(τΣ)1+PTΩ1P]1

(5)投资组合优化:通过Black-Litterman模型,可以获得后验收益的期望值与协方差矩阵。

  • 根据这些信息,可以进行资产配置,比如利用 Makowitz模型进行资产配置。
  • 定义均值方差模型函数(详见代码):blminVar()

2.2 BL模型的设定

(1)计算出历史收益率之均值 μ ^ \hat{\mu} μ^ 及协方差矩阵 Σ ^ \hat{\Sigma} Σ^

(2)用历史收益率均值作为先验预期收益之期望值,即 π = μ ^ \pi = \hat{\mu} π=μ^

(3)结合投资者个人的观点(由 P 、 Q 、 Ω P、Q、\Omega PQΩ 代表,其中 P 、 Q P、Q PQ 为已知的输入变量, Ω \Omega Ω 要自己计算)。

(4)根据 公式 计算出后验分布之期望值、协方差。

3. Black-Litterman模型之Python实现

数据集:“stock_data.txt”

# 导入包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['simhei']
plt.rcParams['axes.unicode_minus'] = False

读取数据集

# 读取数据
stock = pd.read_csv('datas\stock_data.txt',sep='\t',index_col='Trddt')
# 转换时间格式
stock.index = pd.to_datetime(stock.index)       
stock.head()      
###################################################### 提取部分数据##############################################################
## 福建高速(600033)
fjgs = stock.loc[stock.Stkcd==600033,'Dretwd'] 
fjgs.name = 'fjgs'

## 浙能电力(600023)
zndl = stock.loc[stock.Stkcd==600023,'Dretwd']
zndl.name='zndl'

## 生益科技(600183)
sykj = stock.loc[stock.Stkcd==600183,'Dretwd']
sykj.name='sykj'

## 华夏银行(600015)
hxyh = stock.loc[stock.Stkcd==600015,'Dretwd']
hxyh.name = 'hxyh'

## 白云机场(600004)
byjc = stock.loc[stock.Stkcd==600004,'Dretwd']
byjc.name = 'byjc'
# 合并数据集(DataFrame)
sh_return = pd.concat([byjc,fjgs,hxyh,sykj,zndl],axis=1)          
sh_return.head()                                               

数据处理

# 删除缺失数据(NaN)
sh_return = sh_return.dropna()                  
sh_return.head()

# 累积求和(cumsum),求积(cumprod):默认参数0表示列求和、积,参数1表示行求和、积
cumreturn = (1 + sh_return).cumprod()            
cumreturn.head()

数据可视化分析

# 绘制收益率时序图
sh_return.plot(figsize=(8,6))

plt.title('5只股票的日收益率时序图(2014-2015)')
plt.xlabel('date')
plt.ylabel('return')
# plt.legend(loc='lower center',bbox_to_anchor=(0.5,-0.3),ncol=5, fancybox=True, shadow=True)
plt.legend()

plt.show()

在这里插入图片描述

# 绘制累积收益率时序图
cumreturn.plot(figsize=(8,6))

plt.title('5只股票的累计日收益率时序图(2014-2015)')
plt.xlabel('date')
plt.ylabel('cumreturn')

plt.show()

在这里插入图片描述

BL模型的回测

代码及上述文档资源详见资源包(含数据)!

在这里插入图片描述
通过上图发现:通过与MV模型对比,BL模型得到的最优投资组合累计收益率在初期比MV模型有着明显提高,虽然在期末时期略低于MV模型,但是,整个期间改进的BL模型投资策略还是不错的。

4. 小结

  • 本案例主要对均值-方差模型进行了改进,引入投资者对资产的主观观点到模型中,进而形成新的预期收益率,即Black-Litterman模型,实证分析结果显示该模型策略还是不错的!

5. 参考资料

  • 蔡立耑. 量化投资以Python为工具[M]. 北京:电子工业出版社,2017.
  • PyQuant. 量化投资基础[M]. 北京:科学出版社,2024.

6. 资源包下载

  • 链接:https://pan.baidu.com/s/1Q_jCCcln1ajgvne71hCAeA
  • 提取码:1234

  • 写作不易,切勿白剽
  • 点赞关注,最大鼓励
  • 持续更新,未完待续…
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PyQuant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值