简单的低频指数投资一:利用tushare计算指数市盈率

本文介绍了如何利用tushare数据接口计算特定行业指数如中证环保、全指医药的市盈率,通过获取指数权重和成分股估值进行计算。通过设置爬取重试机制确保数据获取稳定,然后利用权重与市盈率计算指数估值,对比基金网站估值。此方法可作为投资策略的一部分,鼓励读者探索更多计算方法和数据获取途径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于广大的投资者来说,投资指数基金是最简单而有效的选择。而目前一种投资指数的方法就是通过市盈率等指标来计算指数的估值,并通过低估买入,高估卖出的方法投资。

然而tushare只提供了上证50,沪深300,创业板等几个大指数的估值,而一些特定行业的估值,例如中证环保,全指医药等,目前还没有提供。我们可以通过获取股票的估值以及指数的权重来计算指数的市盈率。

首先获取tushare的pro接口

 

import tushare as ts
pro = ts.pro_api(token = token)

为了防止出现网络连接问题,设置一个函数,如果爬取失败则sleep一段时间后再次爬取

def get_index(ts_code='', trade_date=''):
    #防止爬取失败,通过函数爬取指数的weight
    for _ in range(3):
        try:
            index_weight = pro.index_weight(index_code=ts_code, start_date=trade_date, end_date=trade_date)
        except:
            time.sleep(1)
        else:
            return index_weight
        
def get_basic(ts_code='', trade_date=''):
    #防止爬取失败,通过函数爬取个股股票的pe
    for _ in range(3):
        try:
            pe_df = pro.daily_basic(ts_code='', trade_date=trade_date, fields='ts_code,trade_date,pe,pb')
        except:
            time.sleep(1)
        else:
            return pe_df

之后就可以通过指数pe计算公式

pe_{total} = \frac{\sum w_i}{\sum w_i \times pe_i} 

计算当日指数的估值了代码如下:

index_weight = get_index(index_code, trade_date)

#获取所有股票的估值
pe_df = get_basic(trade_date = trade_date)
#选取在指数的列表中的股票的估值
merge_df = pd.merge(index_weight, pe_df, left_on='con_code',right_on='ts_code', how = 'inner')
            
total_pe = merge_df.weight.sum() / (merge_df.weight / merge_df.pe).sum()
total_pb = merge_df.weight.sum() / (merge_df.weight / merge_df.pb).sum()

由于tushare的index_weight只会在特定日期返回指数的权重信息,所以我们可以保存上一次获得的index weight信息,并在下次信息出现后将其替换。

其实还有其它的计算指数市盈率的方法,例如成分股市值/成份股净利润等。本方法计算出的数据对比各大基金网上提供的指数估值也有一定的差异,这里只是抛砖引玉,欢迎大家提出更好的计算方法或者交流一下更方便的数据获取渠道。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值