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

qmt 选股教程:利用 get_turnover_rate 批量获取并筛选高换手率热点股

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

问题描述

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

Title: qmt 选股教程:利用 get_turnover_rate 捕捉高换手率热点股

Question: qmt 如何批量获取指定时间段内股票的日均换手率?

解决方案

QMT 选股教程:利用 get_turnover_rate 批量获取并筛选高换手率热点股

在量化交易与短线策略中,**换手率(Turnover Rate)**是衡量个股流动性和市场关注度的核心指标。高换手率通常意味着资金交投活跃、热度高,常伴随着短期波段行情。

本文将详细介绍如何在 QMT(迅投量化交易系统)中使用 Python API 函数 ContextInfo.get_turnover_rate() 批量获取指定时间段内股票的换手率数据,并计算日均换手率进行选股。


1. API 接口说明:ContextInfo.get_turnover_rate()

QMT 提供了专门获取股票历史换手率数据的内置函数:

ContextInfo.get_turnover_rate(stock_list, startTime, endTime)

参数解析:

  • stock_list (list): 股票代码列表,例如 ['600000.SH', '000001.SZ']
  • startTime (str): 起始时间,格式为 'YYYYMMDD'(如 '20230101')。
  • endTime (str): 结束时间,格式为 'YYYYMMDD'(如 '20230131')。

返回值:

返回一个 pandas.DataFrame 对象,索引(Index)为日期,列(Columns)为股票代码,元素值为对应的每日换手率(单位为 %)。


2. 批量获取与筛选计算步骤

实现批量计算日均换手率并筛选热点股的完整流程如下:

  1. 定义股票池:获取目标板块(如沪深300、中证500或自定义板块)的所有股票。
  2. 调用换手率接口:获取指定时间段内的每日换手率矩阵。
  3. 计算日均换手率:对 DataFrame 按列求均值(mean())。
  4. 排序与筛选:设定换手率阈值(例如日均换手率 > 5%),筛选出排名前列的高换手率标的。

3. 完整 Python 策略源码

以下代码展示了如何在 QMT 环境下运行换手率选股逻辑:

#encoding:gbk
import pandas as pd

def init(ContextInfo):
    # 设置测试的起始与结束时间
    ContextInfo.start_date = '20230501'
    ContextInfo.end_date = '20230531'
    # 设置换手率筛选阈值 (日均换手率大于 5%)
    ContextInfo.turnover_threshold = 5.0

def handlebar(ContextInfo):
    # 仅在最后一根 K 线(或最新状态)时执行选股逻辑,避免重复计算
    if not ContextInfo.is_last_bar():
        return
    
    print("=== 开始执行高换手率选股策略 ===")
    
    # 1. 获取目标股票池(以沪深300成份股为例,也可替换为全A股板块)
    index_code = '000300.SH'
    stock_list = ContextInfo.get_sector(index_code)
    
    if not stock_list:
        print("股票池为空,请检查数据下载情况!")
        return
        
    print(f"获取到股票池数量: {len(stock_list)}")
    
    # 2. 批量获取指定时间段内的换手率数据
    df_turnover = ContextInfo.get_turnover_rate(stock_list, ContextInfo.start_date, ContextInfo.end_date)
    
    if df_turnover.empty:
        print("获取换手率数据为空,请确认是否补充了历史财务与行情数据。")
        return
        
    # 3. 计算区间内每只股票的日均换手率
    avg_turnover = df_turnover.mean(axis=0)
    
    # 4. 筛选日均换手率高于阈值的股票
    selected_stocks = avg_turnover[avg_turnover > ContextInfo.turnover_threshold].sort_values(ascending=False)
    
    print(f"\n在 {ContextInfo.start_date} 至 {ContextInfo.end_date} 区间内,")
    print(f"日均换手率大于 {ContextInfo.turnover_threshold}% 的股票共有 {len(selected_stocks)} 只:")
    
    for stock, val in selected_stocks.items():
        stock_name = ContextInfo.get_stock_name(stock)
        print(f"代码: {stock} | 名称: {stock_name:<8} | 日均换手率: {val:.2f}%")


4. 注意事项与使用建议

  1. 数据补充:在运行策略前,请确保已通过 QMT 客户端的 【数据管理】 -> 【补充数据】 下载了对应市场的历史行情与衍生财务数据,否则 get_turnover_rate 可能返回空值。
  2. 剔除停牌与新股:新股上市初期换手率极高,建议结合 ContextInfo.get_open_date() 剔除次新股;同时配合 ContextInfo.is_suspended_stock() 剔除长期停牌股。
  3. 多因子结合:单纯高换手率可能伴随主力出货风险,建议结合均线突破(如 MA5/MA20)或成交量放大指标(如 VOL)共同构建复合选股策略。