(二十一)资产(组合)的预期收益率和风险

两种资产组合的收益与方差

在这里插入图片描述
  例1:两个资产组合权重向量为XT=[0.75,0.25]T,每个资产的方差均为0.1且协方差为0.05,求组合方差:

import numpy as np
import pandas as pd
x=np.mat('0.75;0.25')
v=np.mat('0.1 0.05;0.05 0.1')#矩阵的每一行用分号隔开,每一列用空格隔开
x.T*v*x
Out[1]: matrix([[0.08125]])
#或者直接用两种资产的方差公式:
(0.75**2)*0.1+(0.25**2)*0.1+0.75*0.25*2*0.05
Out[2]: 0.08125

多种资产组合的收益与方差

在这里插入图片描述
  例2:从2019年中挑出4支A股股票,随机分配权重生成投资组合P,求P的预期收益率与波动率。
  step1:挑选4支看似相关性不大的股票,汇总它们在2019年的收盘价数据并可视化:

from datetime import date
import pandas_datareader.data as web
df1=web.DataReader("600519.SS","yahoo",date(2019,1,1),date(2020,1,1))['Adj Close']
df2=web.DataReader("600276.SS","yahoo",date(2019,1,1),date(2020,1,1))['Adj Close']
df3=web.DataReader("600900.SS","yahoo",date(2019,1,1),date(2020,1,1))['Adj Close']
df4=web.DataReader("002739.SZ","yahoo",date(2019,1,1),date(2020,1,1))['Adj Close']
data=pd.concat([df1,df2,df3,df4],axis=1)
data.columns=['贵州茅台','恒瑞医药','长江电力','万达电影']#注意修改列名的函数格式
data.head()
Out[3]: 
                  贵州茅台       恒瑞医药       长江电力       万达电影
Date                                                   
2019-01-02  590.239502  44.011105  14.840364  21.920000
2019-01-03  581.390564  42.432388  14.984726  21.549999
2019-01-04  593.215454  45.157700  14.744123  21.780001
2019-01-07  596.654480  44.509624  14.667130  22.370001
2019-01-08  595.964722  44.850212  14.975102  22.059999
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
(data/data.iloc[0]).plot()#在2019年首个交易日归一化并画图

在这里插入图片描述
  step2:生成4支股票的对数收益率序列:

r=np.log(data/data.shift(1))
#对应位置元素相除,data.shift(1)表示所有数据往下掉一行
r=r.dropna()
r.describe()
Out[5]: 
             贵州茅台        恒瑞医药        长江电力        万达电影
count  242.000000  242.000000  242.000000  242.000000
mean     0.002684    0.002848    0.000904   -0.000591
std      0.018873    0.020145    0.010518    0.025125
min     -0.049550   -0.073313   -0.032278   -0.123845
25%     -0.008131   -0.007375   -0.005041   -0.013874
50%      0.001124    0.003114    0.000000    0.000000
75%      0.011745    0.013627    0.006933    0.011773
max      0.057168    0.065688    0.033779    0.095310

  step3:生成4支股票的随机权重:

x=np.random.rand(4)#在0~1中生成4个服从均匀分布的随机数
w=(x/sum(x)).round(3);w
Out[6]: array([0.249, 0.379, 0.257, 0.115])
#可以猜到按照这个权重配置的资产组合收益率一定很高

  step4:计算4支股票的平均收益率、协方差矩阵、相关系数矩阵(可选)和波动率(可选),注意要对日数据年化处理

r_mean=r.mean()*252;r_mean
Out[7]: 
贵州茅台    0.676281
恒瑞医药    0.717733
长江电力    0.227838
万达电影   -0.148868
dtype: float64
r_cov=r.cov()*252;r_cov
Out[8]: 
          贵州茅台      恒瑞医药      长江电力      万达电影
贵州茅台  0.089764  0.049025  0.004747  0.021752
恒瑞医药  0.049025  0.102264  0.009374  0.018367
长江电力  0.004747  0.009374  0.027876  0.000882
万达电影  0.021752  0.018367  0.000882  0.159079
r_corr=r.corr();r_corr
Out[9]: 
          贵州茅台      恒瑞医药      长江电力      万达电影
贵州茅台  1.000000  0.511690  0.094888  0.182029
恒瑞医药  0.511690  1.000000  0.175577  0.144004
长江电力  0.094888  0.175577  1.000000  0.013252
万达电影  0.182029  0.144004  0.013252  1.000000
r_vol=r.std()*np.sqrt(252);r_vol
Out[10]: 
贵州茅台    0.299606
恒瑞医药    0.319787
长江电力    0.166961
万达电影    0.398847
dtype: float64

  step5:计算由这4支股票和随机权重构成的组合平均收益率和收益波动率:

Rp=sum(r_mean*w);round(Rp,4)
Out[11]: 0.4818#该组合的平均收益率为48.18%/年
w=np.mat(w);r_cov=np.mat(r_cov)
volp=np.sqrt(w*r_cov*w.T);volp.round(4)
Out[51]: array([[0.1969]])#该组合的收益波动率为19.69%/年
发布了31 篇原创文章 · 获赞 2 · 访问量 1602

猜你喜欢

转载自blog.csdn.net/hzk427/article/details/104122337