点赞、关注,养成良好习惯
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=1∑NωiRi)=i=1∑Nω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=T∑t=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 P、Q、Ω。
比如,现在市场有五种资产 A 、 B 、 C 、 D 、 E A 、 B 、 C 、 D 、 E A、B、C、D、E,投资人基于自己的经验及分析,形成以下判断:
- 资产 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= 10−1012100210−10000
看法向量:
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(τΣ)pT0∀i=j∀i=j或Ω=diag(P(τΣ)PT)
(4)修正后验收益。
- 后验预期收益率的期望值: E ( R ∣ q ; Ω ) = μ B L \text{后验预期收益率的期望值:}\mathbb{E}\left(\left.R\right|_{q ; \Omega}\right) = \mu_{B L} 后验预期收益率的期望值:E(R∣q;Ω)=μ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 P、Q、Ω 代表,其中 P 、 Q P、Q P、Q 为已知的输入变量, Ω \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
- 写作不易,切勿白剽
- 点赞关注,最大鼓励
- 持续更新,未完待续…