Advertisement

(二)python金融数据分析--β求解

阅读量:

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%的变动。

全部评论 (0)

还没有任何评论哟~