如何用Python计算股票的Beta系数

预备

在这里插入图片描述

在这里插入图片描述

所以计算两个序列的协方差,np.cov()得到的是一个2x2的矩阵。而第一行第二列的那个数值才是我们要求的值。

np.cov(x, y)
array([[11.71      , -4.286     ], 
       [-4.286     ,  2.144133]])

计算beta的代码(方案一)

import pandas as pd
import numpy as np
import QUANTAXIS as QA
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" 

stock = QA.QA_fetch_stock_day_adv('002352','2018-12-28','2019-12-31')
index = QA.QA_fetch_index_day_adv('000300','2018-12-28','2019-12-31')

returns_stock = stock.data.close.pct_change()
returns_index = index.data.close.pct_change()
#计算两组数据的协方差
covr = np.cov(returns_stock[1:],returns_index[1:])[0][1]
#计算沪深300指数数据的方差
var = np.var(returns_index)
#计算贝塔值
beta = covr/var
print("Covariance:{},Variance:{},Beta:{}".format(covr,var,beta))

计算beta的代码(方案二)

在这里插入图片描述
在这里插入图片描述

方案三

利用tushare上的日频数据进行计算


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')
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Pandas中计算beta可以使用rolling_apply函数来实现。根据引用\[1\]中的代码示例,可以使用rolling_apply函数对每个股票的市场和股票价格数据进行滚动计算。具体来说,可以按照以下步骤进行操作: 1. 将每个股票的市场和股票价格数据合并为一个DataFrame,例如df_join。 2. 定义一个计算beta的函数,例如calc_beta,该函数接受市场和股票价格数据作为输入,并返回计算得到的beta值。 3. 使用rolling_apply函数对df_join中的市场和股票价格数据进行滚动计算,设置滚动窗口大小为12个月,最小观测期数为MinBetaPeriod,将计算得到的beta值赋值给对应的股票。 4. 最后,可以将每个股票beta值存储在FilesLoaded\[File\]\['Beta'\]中,如引用\[2\]所示。 需要注意的是,根据引用\[3\]中的描述,如果你的数据量很大(例如4000个CSV文件),计算时间可能会比较长。如果你觉得计算时间太长,可以考虑使用其他方法来提高计算效率,例如使用并行计算或者优化计算逻辑。 #### 引用[.reference_title] - *1* *2* *3* [许多数据帧上的高效Python Pandas Stock Beta计算](https://blog.csdn.net/weixin_29663547/article/details/111972091)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值