沪深300历史市盈率怎么用Python获取
摘要:
用akshare、tushare等接口获取沪深300历史市盈率数据,助你判断指数估值高低。代码可运行,数据能直接用于股票与期货策略,避开常见踩坑。

为什么你需要沪深300历史市盈率
做股票和期货的人,心里都有一杆秤。这杆秤就是估值。沪深300代表A股核心资产,它的市盈率(PE)能告诉你现在市场是贵还是便宜。PE高,说明大家情绪高涨,可能离顶部不远;PE低,说明无人问津,机会或许就在眼前。有了历史PE数据,你就能画出估值分位数,决定该加仓还是减仓,该做多股指期货还是做空。
普通人看财经新闻里说“沪深300市盈率处于历史低位”,这句话到底怎么来的?靠人工翻数据太慢,我们需要用Python自动拉取。下面直接讲怎么拿数据,不绕弯子。

用akshare接口,一行代码拿到历史PE
akshare是一个免费开源的金融数据接口库,更新快,不需要token。安装很简单:
pip install akshare --upgrade
获取沪深300历史市盈率,调用stock_index_pe_lg函数:
import akshare as ak
# 获取沪深300历史市盈率数据
df = ak.stock_index_pe_lg(symbol="沪深300")
print(df.head())
print(df.tail())
返回的DataFrame通常包含日期、指数、市盈率等列。列名可能是英文或中文,具体看版本。你拿到后重命名一下,方便后续用。
df.columns = ['date', 'index', 'pe']
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
这个接口数据来源是乐咕乐股,历史数据从2005年至今,足够你回测用了。
另一个选择,tushare pro接口
tushare是老牌接口,数据质量高,但需要注册获取token。免费用户有积分限制,不过获取指数PE这个功能通常够用。
import tushare as ts
pro = ts.pro_api('你的token')
# 获取沪深300历史市盈率
df = pro.index_dailybasic(ts_code='000300.SH', start_date='20050101', end_date='20241231', fields='trade_date,pe')
print(df.head())
注意:index_dailybasic返回的pe是滚动市盈率(PE_TTM),也是市场最常用的。tushare的数据需要按日期排序,不然顺序可能乱。
df = df.sort_values('trade_date')
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)
拿到数据后怎么用,三个实用场景
判断估值分位数
把历史PE从小到大排序,看当前PE排在什么位置。比如当前PE是12倍,历史上有80%的时间比现在高,那说明现在很便宜。
current_pe = df['pe'].iloc[-1]
percentile = (df['pe'] < current_pe).mean() * 100
print(f"当前PE分位数:{percentile:.1f}%")
分位数低于30%通常视为低估,高于70%视为高估。这是做股指期货大方向的重要参考。
结合期货做哑铃策略
当沪深300PE分位数低于20%时,可以轻仓做多IF股指期货,同时卖出虚值看跌期权收权利金。当分位数高于80%时,减仓多单,甚至试空。历史PE数据就是你仓位的锚。
回测验证
用历史PE构建简单策略:分位数低于30%买入,高于70%卖出。回测十年,年化收益能跑赢一直持有。代码不复杂,核心就是上面算分位数的逻辑。
三个容易踩的坑
第一个坑,数据频率。akshare返回的是日频数据,但有些日期缺失,比如节假日。你需要用asfreq('D')补全,再前向填充,不然算分位数会偏。
第二个坑,市盈率类型。有静态PE、滚动PE、动态PE。做短线看滚动PE,做长线看静态PE。akshare的stock_index_pe_lg默认返回的是滚动市盈率,tushare的index_dailybasic也是滚动。你要明确自己用哪个。
第三个坑,指数调整。沪深300成分股每半年调整一次,历史PE数据已经考虑了成分股变化,但不同数据源算法有细微差异。用同一数据源做回测,不要混用。
进阶玩法,自己算等权PE
如果你不信任第三方数据,可以自己下载沪深300成分股每日总市值和净利润,加总后相除。用tushare的daily_basic和income接口,但工作量大,适合机构。散户直接用akshare就够了。
最后提醒,PE不是万能。周期股在盈利顶点时PE很低,反而是卖点。银行地产占比高的指数,PE中枢本来就在10倍左右。结合PB和ROE一起看,胜率更高。
代码跑通后,你就能每天自动更新估值表,股票和期货的仓位管理有了硬依据。不用再听别人喊“底部来了”,自己看数据说话。
声明
转载声明:欢迎分享本文,转载请注明出处!
点击复制: