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

QMT 扩展数据选股:利用 ext_data_rank 结合 K 线偏移量构建截面模型

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

问题描述

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

Title: QMT 扩展数据选股:利用 ext_data_rank 结合 K 线偏移量构建截面模型

Question: 如何在 QMT 中获取带有偏移量的扩展数据全市场排名?

解决方案

QMT 扩展数据选股:利用 ext_data_rank 结合 K 线偏移量构建截面模型

在构建截面选股策略时,全市场因子的相对排名是评估股票强弱的核心指标。QMT(迅投量化平台)提供了强大的扩展数据引用接口,通过 ext_data_rank 函数,开发者可以轻松获取自定义扩展数据在全市场品种中的排名,并支持设置 K 线偏移量(deviation) 来实现历史信号的回溯与对齐。


1. ext_data_rank 函数详解

ext_data_rank 用于获取指定的扩展数据在当前时间点(或偏移对应时间点)全市场所有品种中的排名。

接口定义

ext_data_rank(extdataname, stockcode, deviation, ContextInfo)

参数说明

  • extdataname (str): 在客户端设置并生成的扩展数据名称(例如 'mycci''my_factor')。
  • stockcode (str): 目标合约代码,格式为 代码.市场(例如 '600000.SH')。
  • deviation (int): K 线偏移量:
    • 0: 取当前 K 线周期的扩展数据排名。
    • -N: 向左偏移 N 根 K 线(获取 N 个周期前的历史排名)。
    • N: 向右偏移 N 根 K 线。
  • ContextInfo (PythonObj): 全局策略上下文对象。

返回值

  • number: 返回指定品种在全市场中的数值排名(如:1 表示该指标在全市场中排第 1 名)。

2. 代码实现示例

以下是一个基于 ext_data_rank 的截面选股策略骨架,展示如何在 handlebar 函数中动态获取截面排名并进行筛选:

#encoding:gbk

def init(ContextInfo):
    # 设定初始股票池
    stock_list = ['600000.SH', '000001.SZ', '000002.SZ', '600519.SH']
    ContextInfo.set_universe(stock_list)
    print("策略初始化完成,扩展数据排名截面模型启动")

def handlebar(ContextInfo):
    # 仅在最后一根 Bar 或每日收盘前运行策略逻辑
    if not ContextInfo.is_last_bar():
        return
    
    ext_name = 'mycci'  # 替换为在客户端中定义的扩展数据名
    universe = ContextInfo.get_universe()
    rank_dict = {}
    
    for stock in universe:
        # 获取当前 Bar 的全市场排名(deviation = 0)
        current_rank = ext_data_rank(ext_name, stock, 0, ContextInfo)
        
        # 获取上 1 周期(前一根 K 线)的全市场排名(deviation = -1)
        prev_rank = ext_data_rank(ext_name, stock, -1, ContextInfo)
        
        rank_dict[stock] = {
            'current_rank': current_rank,
            'prev_rank': prev_rank
        }
        print(f"{stock} -> 当前排名: {current_rank}, 前一周期排名: {prev_rank}")
    
    # 按照当前截面排名升序排序(排名越靠前越优秀)
    sorted_stocks = sorted(rank_dict.items(), key=lambda x: x[1]['current_rank'])
    top_picks = [stock for stock, info in sorted_stocks[:2]]  # 选取截面排名前2的股票
    
    print("当前截面选中的目标股票:", top_picks)

3. 使用注意事项与最佳实践

  1. 扩展数据预先计算:使用 ext_data_rank 前,须确保客户端【数据管理】/【扩展数据】中已正确配置并完成了对应扩展数据的计算与下载。
  2. K线偏移量的意义:在多因子截面模型中,结合 deviation = -1 可以有效防止未来函数(Look-ahead Bias),确保信号触发使用的排名数据在交易决策时刻完全可用。
  3. 批量数据拉取优化:如果需要获取历史全时间段的排名矩阵,可在 init 中使用 ContextInfo.get_ext_all_data(extdataname) 一次性调入内存以提升回测速度。