🚀 AI 一键生成 qmt 策略代码
立即体验

QMT 平台如何使用 ext_data_rank_range 获取全市场截面排名?

qmt | 发布时间: 2026/8/2
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT 扩展数据应用:使用 ext_data_rank_range 进行全市场截面排名

Question: 如何在 QMT 中调用 ext_data_rank_range 接口获取扩展指标在全市场的排名?

解决方案

QMT 扩展数据应用:使用 ext_data_rank_range 进行全市场截面排名

在量化选股和多因子策略中,评估某个标的在全市场的相对强度(如 CCI 排名、动量排名等)是非常常见的需求。QMT 平台提供了扩展数据(ext_data)系列接口,支持自定义指标计算与全市场截面排序。

本文将详细介绍如何在 QMT 中使用 ext_data_rank_range 函数获取指定时间区间内的全市场截面排名。


1. API 接口详解

ext_data_rank_range()

用法:
ext_data_rank_range(extdataname, stockcode, begintime, endtime, ContextInfo)

释义:
获取引用的扩展数据(如自定指标、排名因子等)的数值在指定时间区间内所有品种中的排名。

参数:

  • extdataname (string):扩展数据名称(需提前在 QMT 界面或系统配置中建立扩展数据)。
  • stockcode (string):股票代码与市场,格式为 'stkcode.market'(如 '600000.SH')。
  • begintime (string):区间的起始时间(包含该时间点),格式为 'YYYY-MM-DD HH:MM:SS'(如 '2023-01-01 00:00:00')。
  • endtime (string):区间的结束时间(包含该时间点),格式为 'YYYY-MM-DD HH:MM:SS'(如 '2023-12-31 23:59:59')。
  • ContextInfo (pythonObj):Python 策略上下文全局对象。

返回值:

  • pythonDict:包含该时间段内各时刻及对应排名的字典数据。

2. 策略示例源码

以下是一个简单的示例,展示如何在 handlebar 行情驱动函数中调用 ext_data_rank_range 获取某只股票在特定区间的全市场截面排名:

#coding:gbk

def init(ContextInfo):
    # 设定基准与交易账号(根据实际需求配置)
    ContextInfo.set_universe(['600000.SH'])
    print("策略初始化完成,准备调用扩展数据截面排名接口...")

def handlebar(ContextInfo):
    # 只在最后一根Bar执行,避免重复输出
    if not ContextInfo.is_last_bar():
        return
    
    ext_name = 'mycci'  # 替换为您在QMT中设置的扩展数据名称
    stock_code = '600000.SH'
    begin_time = '2023-01-01 00:00:00'
    end_time = '2023-12-31 23:59:59'
    
    # 获取指定区间内的全市场截面排名
    rank_dict = ext_data_rank_range(ext_name, stock_code, begin_time, end_time, ContextInfo)
    
    # 打印获取结果
    print(f"{stock_code} 在区间 [{begin_time} 至 {end_time}] 内的扩展数据 '{ext_name}' 截面排名为:")
    print(rank_dict)

3. 注意事项

  1. 扩展数据预先计算:使用 ext_data_rank_range 前,必须确保 QMT 客户端中已经成功生成了对应的扩展数据(extdataname)。可以在客户端的扩展数据管理中添加并补充历史计算数据。
  2. 时间格式严格匹配begintimeendtime 必须写为标准的 'YYYY-MM-DD HH:MM:SS' 格式,否则可能导致无法准确检索到截面数据。
  3. 历史数据下载:截面排名依赖全市场标的数据,建议在回测或运行前,通过 QMT【数据管理】补充完相应时间段内的全市场行情及扩展指标数据。