2.股票的系统性风险β
(1)单只股票的收益率
A:简单收益率
计算逻辑=(当期价格-上期价格)/上期价格,获取的数据由上之下开始计算,所以第一个数据一般都为NAN
df2=df1['close'].pct_change()
df2.plot()
B:对数收益率
df1['return']=np.log(df1['close']/df1['close'].shift(1))
df1['return']
tjg1[['return','close']].plot(subplots=True,style='b',figsize=(12,5))
*tjg1是调整过index的正常时间顺序t横轴正常走势;
.
.
(2)协方差&方差&相关系数
np.var()
df.var()
#只是numpy中计算的是样本的总体方差,而excel中计算的是样本方差,所以不一样。
#其实Excel中也有计算样本总体方差的函数-----varp ()
#也就是说varp和numpy.var()是一样的。
(3)实际案例(分析上证指数和单只股票的β值)
方法一:
One 数据包导入:
import tushare as ts
import pandas as pd
import numpy as np
import scipy.stats
#可视化
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
Two获取股票数据:
tjg=ts.get_hist_data('600848',start='2019-10-05',end='2020-03-20')
szzs=ts.get_hist_data('sh000001',start='2019-10-05',end='2020-03-20')
Three 调整获取排序方式:
(这里需要调整是因为pct的计算逻辑,所以这里需要设置下)
#**默认按照升序**,如果需要降序就设ascending=False
tjg1=tjg.sort_index()
szzs1=szzs.sort_index()
Four 获取简单收益率
tjg2=tjg1['close'].pct_change()
szzs2=szzs1['close'].pct_change()
Five 合并表格(也可以不合并,好看而已)
q=pd.merge(tjg2,szzs2,on='date')
s
Six 删除NAN,不然会导致结果错误或者出不来
df1 =q.dropna(axis=0,how='all')
df1
covxy=np.cov(df1['close_x'],df1["close_y"])
varx=np.var(df1['close_y'])
注释:第一个数据为cov(单支股票,上证指数);
第二个数据为上证指数的方差;
方法二:根据数据性质,更加便捷
#注释:
以上求解收益率都是不需要的,不过是一个逻辑过程保证会算;
因为在数据初始获取的时候就可以有移动日收益率的数据
可以选择直接调用
covxy1=np.cov(tjg1["p_change"],szzs1['p_change'])
结果也是差不多一样的,不过相对这样的数据更加具有说服力,因为这样的所有数据都有结果,不会存在NAN的数值;
β=0.9894576971357825
表示:“股票β值表示投资组合对系统风险的敏感程度:β值为1,表示指数变化时,股票价格会以相同的百分率变化;β值为1.8时,表示指数发生1%的变动,股票价格会呈现1.8%的变动;β值为值0.5时,表示指数发生1%的变动,股票价格会呈现0.5%的变动。