QMT多因子策略开发指南:获取估值与成长性因子数据
本文将详细介绍如何在QMT平台上高效获取股票的估值、成长性及盈利能力等相关因子数据,助力构建科学严谨的多因子选股模型。通过调用平台提供的多因子数据接口,用户可直接获得已计算好的因子值,避免手动从财务报表和行情数据中繁琐推导。
get_factor_data
如何批量获取股票的历史市盈率(PE)与市净率(PB)?
在QMT系统中,推荐使用内置的多因子数据接口来获取历史PE与PB数据。该方法无需自行处理财报日期对齐或股价匹配问题,极大提升策略开发效率。
ContextInfo.get_factor_data
操作流程概览
1. 数据准备
进入QMT客户端界面,依次点击菜单栏中的【数据管理】→【补充数据】,勾选“多因子数据”选项,并下载所需时间段的数据包。此步骤为前提条件,若未下载则后续接口将返回空值。
2. 确定目标字段
参考QMT API文档中的“股票因子库_表名对照表”,估值类指标主要位于
Valuation_and_Market_Cap
表下:
- 市盈率 (PE):对应字段为
Valuation_and_Market_Cap.PE
(具体定义可能为TTM或动态值,视数据源而定)。如需明确使用滚动市盈率,建议采用
Valuation_and_Market_Cap.PETTM
Valuation_and_Market_Cap.PB
3. 调用接口获取数据
使用以下函数完成数据提取:
ContextInfo.get_factor_data
代码示例:在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
init
返回结果解析与注意事项
数据结构说明
当同时传入多只股票与多个交易日时,
get_factor_data
返回一个字典(Dict)类型对象:
- Key:股票代码,例如
'600000.SH'
精度说明
QMT平台提供的因子数据通常保留至小数点后四位,满足一般量化研究需求。
常见问题排查
- 返回为空或全为NaN:最可能的原因是本地尚未下载多因子数据。请前往【数据管理】→【补充数据】完成下载。
- 字段名报错:所有因子字段必须严格区分大小写,并包含完整的表名前缀,例如
Valuation_and_Market_Cap.
扩展阅读:常用估值类因子字段
除PE与PB外,
Valuation_and_Market_Cap
表还提供以下重要估值指标:
PS
:市销率
PCF
:市现率
PEG3Y
:市盈率相对净利润三年复合增长率(PEG)
StaticPE
:静态市盈率
ForwardPE
:动态市盈率
高频问答(Q&A)
Q: 为什么运行代码后输出为空或出现异常?
A: 最常见的原因是本地数据库缺少多因子数据。请注意,QMT不会实时联网拉取此类数据,而是依赖本地缓存。请务必在客户端顶部菜单进入“数据管理” → “补充数据”,勾选“多因子数据”并完成指定时间段的下载。
Q:
Valuation_and_Market_Cap.PE
与
Valuation_and_Market_Cap.PETTM
有何区别?
A:
PE通常所说的市盈率一般指普通市盈率,其具体定义可能因数据来源不同而有所差异,可能是静态市盈率,也可能是动态市盈率。
(Trailing Twelve Months) 滚动市盈率是基于最近12个月的净利润来计算的,能够更准确地反映企业当前的实际盈利状况。在进行量化回测时,通常建议优先采用该指标。
PETTM
如何获取当天实时的PE/PB数据?
常规情况下,
get_factor_data
主要用于提取历史上的PE/PB序列数据。若在实盘环境中需要获取当日最新值,而该数据尚未更新至多因子数据库中,可考虑通过
ContextInfo.get_full_tick
获取最新的行情快照,并结合
ContextInfo.get_financial_data
调取最近一期的财务报告数据,自行计算出当前的PE/PB值。此外,也可检查是否已接入订阅的Level-2行情数据流,部分高级数据源会直接提供此类指标。不过,在大多数日频交易策略中,使用
get_factor_data
获取前一个交易日的数据通常已能满足需求。


雷达卡


京公网安备 11010802022788号







