楼主: linzier88
75 0

[其他] 【QMT】QMT 多因子数据 get_factor_data API 使用指南 [推广有奖]

  • 0关注
  • 0粉丝

学前班

40%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
0 小时
注册时间
2018-11-3
最后登录
2018-11-3

楼主
linzier88 发表于 昨天 19:53 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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
  • 市净率 (PB):对应字段为
  • 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'
  • Value:pandas DataFrame,其中行索引为日期(Index=日期),列名为所请求的因子字段名
精度说明

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

获取前一个交易日的数据通常已能满足需求。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:factor Facto fact 使用指南 Data

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-5 12:50