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

QMT 扩展数据排名:如何使用 ext_data_rank_range 实现历史区间跨品种选股?

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

问题描述

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

Title: qmt 扩展数据排名:ext_data_rank_range 区间跨品种选股

Question: 如何在 qmt 中计算自定义扩展指标在全市场股票中的历史区间排名?

解决方案

QMT 扩展数据排名:如何使用 ext_data_rank_range 实现历史区间跨品种选股?

在 QMT(迅投 Quant Trading)量化平台中,跨品种选股和多因子横截面分析是构建量化策略的重要环节。利用扩展数据(Ext Data)功能,开发者可以获取技术指标或自定义数据,并对其进行全市场股票横向排名。

当我们需要评估某一标的数据在特定历史时间区间内的横向表现和排名时,ext_data_rank_range 接口能够提供精准的数据支持。


1. 接口解析:ext_data_rank_range

ext_data_rank_range 用于获取指定的扩展数据在指定时间区间内、全市场所有品种中的横向排名结果。

1.1 函数签名与参数说明

ext_data_rank_range(extdataname, stockcode, begintime, endtime, ContextInfo)
  • extdataname (string): 扩展数据名称(需提前在 QMT 客户端的扩展数据管理器中定义并计算)。
  • stockcode (string): 合约代码,格式为 代码.市场,例如 '600000.SH'
  • begintime (string): 统计区间的起始时间(含),格式为 'YYYY-MM-DD HH:MM:SS'
  • endtime (string): 统计区间的结束时间(含),格式为 'YYYY-MM-DD HH:MM:SS'
  • ContextInfo (PythonObj): 策略全局上下文对象。

1.2 返回值说明

  • 返回一个 Python 字典 (dict),包含指定区间段内该品种扩展数据在全市场品种中的排名分布数据。

2. 策略示例:历史区间横截面排名选股

下例展示了如何在 handlebar 行情驱动函数中调用 ext_data_rank_range 获取某只股票(如浦发银行 600000.SH)基于自定义扩展数据(如 'mycci')在 2016 至 2017 年指定时间段内的横向排名情况:

#coding:gbk

def init(ContextInfo):
    # 设定基准与股票池
    ContextInfo.set_universe(['600000.SH', '000001.SZ'])
    print("策略初始化完成,准备获取扩展数据区间排名...")

def handlebar(ContextInfo):
    # 只在最后一个 bar 运行以避免重复打印
    if not ContextInfo.is_last_bar():
        return
    
    ext_name = 'mycci'
    target_stock = '600000.SH'
    start_date = '2016-08-02 12:12:30'
    end_date = '2017-08-02 12:12:30'
    
    # 获取指定时间区间内该扩展数据在全市场中的排名情况
    rank_dict = ext_data_rank_range(ext_name, target_stock, start_date, end_date, ContextInfo)
    
    print(f"{target_stock} 在区间 [{start_date} 至 {end_date}] 的扩展数据 '{ext_name}' 排名结果:")
    print(rank_dict)

3. 注意事项与使用建议

  1. 数据补充:使用扩展数据函数前,确保已在 QMT 客户端【数据管理】或【扩展数据管理】中补充了相关历史行情并完成了扩展数据的计算。
  2. 调用效率ext_data_rank_range 返回的是指定时间段内的区间排名字典。如果仅需要当前 Bar 的全市场实时排名,可以配合使用单点排名函数 ext_data_rank(extdataname, stockcode, deviation, ContextInfo)
  3. 初始化读取:若策略涉及大量历史排名的全量批量计算,推荐在 init() 中使用 ContextInfo.get_ext_all_data() 一次性将全部数据读取到内存中,提升策略回测速度。