如何用Python快速计算股票的Beta系数并排序存入Excel表中

使用Python轻松计算股票的Beta系数

本文包含用Python计算股票beta系数并对其进行排序存入Excel的完整详细流程

一、Beta系数介绍
β系数也称为贝塔系数(Beta coefficient),是一种风险指数,用来衡量个别股票或股票基金相对于整个股市的价格波动情况。β系数是一种评估证券系统性风险的工具,用以度量一种证券或一个投资证券组合相对总体市场的波动性,在股票、基金等投资术语中常见。
贝塔系数是统计学上的概念,它所反映的是某一投资对象相对于大盘的表现情况。其绝对值越大,显示其收益变化幅度相对于大盘的变化幅度越大;绝对值越小,显示其变化幅度相对于大盘越小。如果是负值,则显示其变化的方向与大盘的变化方向相反;大盘涨的时候它跌,大盘跌的时候它涨。由于我们投资于投资基金是为了取得专家理财的服务,以取得优于被动投资于大盘的表现情况,这一指标可以作为考察基金经理降低投资波动性风险的能力。

二、Beta系数计算公式
在这里插入图片描述
其中,rm为该股票所在市场整体的涨跌幅,ra为该支股票自身的涨跌幅,Cov(ra,rm)为两者的协方差。
分母部分则为该支股票自身涨跌幅的标准差。

三、协方差的意义和计算公式
协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
所以协方差的计算公式可以由方差的计算公式来推出。
方差计算公式为:
如何用Python快速计算股票的Beta系数并排序存入Excel表中_第1张图片
由此推知协方差计算公式为:
如何用Python快速计算股票的Beta系数并排序存入Excel表中_第2张图片
由于Python中并没有直接计算协方差的公式,所以我们可以对协方差公式进行一定的转化。
我们可以发现X,Y的协方差恰好等于X,Y的标准差的乘积,而Python当中正好有直接计算标准差的方法。

四、代码实现(完整代码在最后)
首先,为了抓取股票的数据,我们需要先引入一个非常好用的免费的tushare库(详细操作步骤参见我上一篇文章)
官网网址:https://tushare.pro/register?reg=427001

import tushare as ts
ts.set_token('你在官网个人中心中拿到的token')
pro = ts.pro_api()

抓取所有股票的基本信息并设定基本的输入参数:

stock_info = pro.stock_basic()
startdate: str = input('请输入开始日期\n')
enddate: str = input('请输入结束日期\n')

抓取上证指数和深证指数的数据

SH_code = '000001.SH'
SZ_code = '399300.SZ'
SH = pro.index_daily(ts_code=SH_code,start_date=startdate,end_date=enddate)
SZ = pro.index_daily(ts_code=SH_code,start_date=startdate,end_date=enddate)

分别计算它们涨跌幅的标准差和方差

SH_std = SH.std()
SH_var = SH.var()
SZ_std = SZ.std()
SZ_var = SZ.var()

遍历所有股票并提取出每只股票的日线行情

for i in range(0,len(stock_info)):
    if i > 0 and i % 120 == 0:
        time.sleep(60)
    code = stock_info.at[i,'ts_code']
    change = pro.daily(ts_code=code,start_date=startdate,end_date=enddate)

提取出每只股票涨跌幅的标准差,根据它们的股票代码判断它们所在的市场,然后运用beta系数的公式计算出每只股票的beta系数

if change.empty == False:
        std = change.std()
        change_std = std.pct_chg
        if code[7:] == 'SH':
            cov = SH_std.pct_chg * change_std
            beta = cov / SH_var.pct_chg
        elif code[7:] == 'SZ':
            cov = SZ_std.pct_chg * change_std
            beta = cov / SZ_var.pct_chg
        beta_value[stock_info.at[i,'ts_code']] = (beta,stock_info.at[i,'name'])
    else:
        continue

这里需要注意一点,由于个别股票的日线行情有可能提取不到,所以这里需要加一个if进行判断

最后对beta系数进行从高到低排序,存入excel表中

rank = sorted(beta_value.items(),key=lambda x:x[1],reverse=True)
for i in range(0,len(rank)):
    rank_code.append(rank[i][0])
    rank_name.append(rank[i][1][1])
    rank_beta.append(rank[i][1][0])
data={
    '股票代码':rank_code,
    '股票名称':rank_name,
    'beta':rank_beta,
}
df = DataFrame(data)
df.to_excel('贝塔系数.xlsx')

完整代码如下:

import tushare as ts
from pandas import DataFrame
import time
ts.set_token('你的token')
pro = ts.pro_api()
stock_info = pro.stock_basic()
startdate: str = input('请输入开始日期\n')
enddate: str = input('请输入结束日期\n')
SH_code = '000001.SH'
SZ_code = '399300.SZ'
SH = pro.index_daily(ts_code=SH_code,start_date=startdate,end_date=enddate)
#print(SH)
SH_std = SH.std()
SH_var = SH.var()
#print(SH_std.pct_chg)
SZ = pro.index_daily(ts_code=SH_code,start_date=startdate,end_date=enddate)
SZ_std = SZ.std()
SZ_var = SZ.var()
beta_value = {}
rank=[]
rank_code=[]
rank_beta=[]
rank_name=[]
for i in range(0,len(stock_info)):
    if i > 0 and i % 120 == 0:
        time.sleep(60)
    code = stock_info.at[i,'ts_code']
    change = pro.daily(ts_code=code,start_date=startdate,end_date=enddate)
    if change.empty == False:
        std = change.std()
        change_std = std.pct_chg
        if code[7:] == 'SH':
            cov = SH_std.pct_chg * change_std
            beta = cov / SH_var.pct_chg
        elif code[7:] == 'SZ':
            cov = SZ_std.pct_chg * change_std
            beta = cov / SZ_var.pct_chg
        beta_value[stock_info.at[i,'ts_code']] = (beta,stock_info.at[i,'name'])
    else:
        continue
rank = sorted(beta_value.items(),key=lambda x:x[1],reverse=True)
print(rank)
for i in range(0,len(rank)):
    rank_code.append(rank[i][0])
    rank_name.append(rank[i][1][1])
    rank_beta.append(rank[i][1][0])
data={
    '股票代码':rank_code,
    '股票名称':rank_name,
    'beta':rank_beta,
}
df = DataFrame(data)
df.to_excel('贝塔系数.xlsx')

你可能感兴趣的:(python,数据分析,数据挖掘,数据库)