如何修改yahoo_fin的查询日期 获取个股历史市盈率等行情指标
关于yahoo_fin查询历史市盈率指标的解决方案
yahoo_fin 自带的 get_quote_table 接口仅支持获取实时行情数据,没有内置参数可以直接指定历史日期查询对应时间点的市盈率等指标。要获取指定历史日期的P/E数据,可以参考以下方案:
方案:通过历史股价+历史EPS自行计算TTM市盈率
TTM市盈率的计算逻辑为:指定日期的收盘股价 / 该日期往前推12个月的累计摊薄每股收益,你可以通过yahoo_fin的两个接口分别获取对应数据后计算,示例代码如下:
import yahoo_fin.stock_info as yf from datetime import datetime, timedelta # 目标查询日期:示例为1年前的当日 target_date = (datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d") symbol = "MSFT" # 1. 获取目标日期的收盘股价 hist_price = yf.get_data(symbol, start_date=target_date, end_date=target_date) target_close = hist_price['close'].iloc[0] # 2. 获取历史每股收益(EPS)数据 earnings = yf.get_earnings_history(symbol) # 筛选目标日期前12个月的4个季度EPS,求和得到TTM EPS cutoff_date = datetime.strptime(target_date, "%Y-%m-%d") - timedelta(days=365) recent_earnings = earnings[ (earnings['startdatetime'] >= cutoff_date.strftime("%Y-%m-%d")) & (earnings['startdatetime'] < target_date) ] ttm_eps = recent_earnings['epsactual'].sum() # 3. 计算目标日期的TTM市盈率 historical_pe = target_close / ttm_eps print(f"{symbol} 在{target_date}的TTM市盈率为:{historical_pe:.2f}")
注意事项
- 若对应季度的实际EPS未披露,可使用市场一致预期EPS替代
epsactual字段计算 - 若目标日期为非交易日,需往前调整到最近的一个交易日再获取股价数据
内容的提问来源于stack exchange,提问作者Fernando Henrique Magalhães
相关产品推荐
相关产品推荐

