很多做基本面量化的朋友刚上手 QMT 都会踩坑:直接拿行情接口抓 PE,结果要么是空值、要么数据不对。今天用最简单的话讲清楚,QMT 内置原生方式获取市盈率 PE、市净率 PB、市销率 PS 这套估值指标,附带可直接复制的代码,避开常见雷区。
先说重点:两种主流获取方式
⚠️重要提醒:普通 K 线行情接口拿不到每日滚动 PE,别再反复试get_market_data_ex读取 pe 字段,绝大多数情况返回空!QMT 正规获取估值指标两条路线:
- 多因子接口 get_factor_data(首选,策略回测 / 实盘通用)
能拿到每日历史 PE、PB,支持批量股票池,做低估值选股、多因子模型最稳定。 - 财务接口 get_financial_data(备选)
读取原始财报数据,自己计算估值,适合需要自定义口径 PE 的人,代码量更大。
第一步:前置操作!90% 人失败就在这里
想用多因子获取估值,必须先下载本地数据,不下载直接跑代码只会返回空数据。操作路径:打开 QMT 客户端顶部菜单栏【数据管理】→【补充数据】→勾选【多因子数据】,选择需要的时间段下载。

小贴士:建议一次性下载近 500 个交易日数据,回测不用反复补数据;盘后更新因子数据,盘中实时更新有延迟。
常用估值因子字段对照表(直接复制使用)
表格
方案一:策略脚本内 get_factor_data 完整示例(策略编辑器内运行)
# -*- coding:gbk -*-
definit(C):
# 需要获取的估值字段
factor_list =[
"Valuation_and_Market_Cap.PE",
"Valuation_and_Market_Cap.PB"
]
# 股票列表,代码格式 60xxxx.SH / 00xxxx.SZ
stock_pool =["600036.SH","000001.SZ"]
start_date ="20250101"
end_date ="20260725"
# 拉取历史每日估值数据
val_data = C.get_factor_data(
factor_list,
stock_pool,
start_date,
end_date
)
print(val_data)
defhandlebar(C):
# 每日K线运行,可实时读取当日估值
pass
运行后会返回每只股票按日期排列的 PE、PB 时序数据,直接用来筛选低估值个股。
方案二:独立 Python 脚本(xtquant,外部交互式调试)
如果你习惯在外部脚本调试数据,使用 xtquant 库调用,注意同样需要提前下载多因子数据包:
from xtquant import xtdata
# 股票清单
stocks =["600036.SH","000001.SZ"]
fields =["Valuation_and_Market_Cap.PE","Valuation_and_Market_Cap.PB"]
# xtquant 读取因子数据
res = xtdata.get_factor_data(fields, stocks, start_time="20260701", end_time="20260725")
print(res)
方案三:原始财报手动计算 PE(进阶玩法)
不想依赖多因子数据包,可以读取财报净利润 + 行情价格,手动计算市盈率。优点:可以自由选择静态 PE、TTM 滚动 PE 口径;缺点:需要处理财报季报对齐、停牌数据清洗。
# -*- coding:gbk -*-
definit(C):
# 获取归母净利润
finance_fields =["ASHAREINCOME.net_profit_excl_min_int_inc"]
stock =["600036.SH"]
# 获取行情收盘价
price = C.get_market_data_ex(["close"], stock, period="1d",start_time="20260101")
profit = C.get_financial_data(finance_fields,stock,"20260101","20260725")
# 后续自行合并日期、计算PE
高频踩坑汇总(避坑必看)
❌误区:用 get_market_data_ex 填 pe 字段获取估值普通行情周期 1d、tick 不存在 pe 字段,返回全部 0 或者空,不要再浪费时间调试。 ❌忘记下载【多因子数据】接口本身不会自动下载数据,本地无数据包 = 返回空值。 ❌代码股票代码格式写错必须带后缀 .SH/.SZ,6 位数字直接写会查询失败。 ❌新股、亏损股 PE 出现负数、极大值策略里记得增加过滤条件,剔除无效估值数据。 ⚠️数据延迟:估值因子盘后更新,盘中实时数值存在小幅滞后,高频策略谨慎使用。
实用小拓展
拿到 PE、PB 数据之后,可以直接写选股条件:例如:PE 大于 0、PE 小于 25,PB 小于 3,批量筛选满足低估值条件的标的,构建轮动策略。
夜雨聆风