3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台中,获取股票的历史市盈率(PE)和市净率(PB)数据,最直接且推荐的方法是使用 多因子数据接口 ContextInfo.get_factor_data。
该接口可以直接获取经过计算的因子值,无需用户手动通过财务报表和收盘价进行计算。
Valuation_and_Market_Cap(估值与市值)表。
Valuation_and_Market_Cap.PE (通常为 TTM 或动态,具体取决于数据源定义,也可以使用 Valuation_and_Market_Cap.PETTM 获取明确的 TTM 数据)。Valuation_and_Market_Cap.PB。ContextInfo.get_factor_data 获取数据。以下是一个完整的 Python 策略示例,展示如何在 init 函数中获取一批股票在指定时间范围内的 PE 和 PB 数据。
# -*- coding: gbk -*-
def init(ContextInfo):
# 1. 设置需要查询的股票列表
stock_list = ['600000.SH', '000001.SZ', '600519.SH']
# 2. 设置需要查询的因子字段
# Valuation_and_Market_Cap.PE : 市盈率
# Valuation_and_Market_Cap.PB : 市净率
# Valuation_and_Market_Cap.PETTM : 市盈率TTM (推荐使用此字段进行回测)
field_list = [
'Valuation_and_Market_Cap.PE',
'Valuation_and_Market_Cap.PB',
'Valuation_and_Market_Cap.PETTM'
]
# 3. 设置起止时间 (格式:YYYYMMDD)
start_date = '20230101'
end_date = '20230110'
# 4. 调用多因子数据接口
# 注意:获取多只股票、多天数据时,返回的是一个字典
# Key = 股票代码, Value = DataFrame (Index=日期, Columns=因子名)
factor_data = ContextInfo.get_factor_data(
field_list,
stock_list,
start_date,
end_date
)
# 5. 打印结果
print("获取到的因子数据如下:")
for stock_code, df in factor_data.items():
print(f"\n====== 股票: {stock_code} ======")
if not df.empty:
print(df)
else:
print("无数据,请检查是否已下载多因子数据。")
def handlebar(ContextInfo):
# 本示例仅在 init 中演示数据获取,handlebar 中无需逻辑
pass
返回值结构:
get_factor_data 返回的是一个 字典 (Dict)。'600000.SH')。数据精度:
常见问题:
Valuation_and_Market_Cap.)。除了 PE 和 PB,你可能还需要以下相关字段(均位于 Valuation_and_Market_Cap 表下):
PS: 市销率PCF: 市现率PEG3Y: 市盈率/净利润3年复合增长率StaticPE: 静态市盈率ForwardPE: 动态市盈率Q: 为什么我运行代码后打印出来是空的或者报错?
A: 最常见的原因是本地缺少数据。QMT 的多因子数据不是实时从云端拉取的,而是依赖本地数据库。请在 QMT 客户端顶部菜单找到“数据管理” -> “补充数据”,勾选“多因子数据”,选择对应的时间段和市场进行下载。
Q: Valuation_and_Market_Cap.PE 和 Valuation_and_Market_Cap.PETTM 有什么区别?
A: PE 通常指一般的市盈率,定义可能因数据源而异(可能是静态或动态)。PETTM (Trailing Twelve Months) 是滚动市盈率,使用最近 12 个月的净利润计算,更能反映企业当前的盈利能力,在量化回测中通常更推荐使用 PETTM。
Q: 如何获取当天的实时 PE/PB?
A: get_factor_data 主要用于获取历史序列数据。如果是实盘中需要当天的最新数据,且该数据尚未入库到多因子库,可以使用 ContextInfo.get_full_tick 获取最新行情快照,结合 ContextInfo.get_financial_data 获取最近的财报数据自行计算,或者查看是否有订阅的 Level-2 数据流提供相关指标。但在大多数日频策略中,使用 get_factor_data 获取前一交易日的数据已足够。