🚀 AI 一键生成 qmt 策略代码

QMT 平台 ContextInfo.get_turnover_rate 获取换手率读取失败怎么办?

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

问题描述

ContextInfo.get_turnover_rate - 获取换手率读取失败

在测试中无法读取换手率数据?那位大神帮忙看看。

解决方案

在 QMT 平台中使用 ContextInfo.get_turnover_rate 获取换手率数据失败,通常是由以下几个常见原因导致的。请按照以下步骤进行排查和修复:

1. 未补充本地历史数据(最常见原因)

QMT 的 get_turnover_rate 函数依赖于本地的日线行情数据。如果本地没有对应时间段的数据,函数将返回空值或报错。
解决方法
在 QMT 客户端中,点击顶部菜单栏的 “数据管理” -> “补充数据”,选择你需要测试的股票品种(如沪深A股)和对应的时间段(日线数据),进行数据下载补充。

2. 参数格式传递错误

请严格检查传入函数的参数类型和格式是否符合官方 API 文档的要求:

  • stock_list:必须是一个 列表 (list),即使只查询一只股票,也要写成 ['000001.SZ']
  • startTimeendTime:必须是 字符串 (string),且格式为 YYYYMMDD(如 '20170101')。
  • 股票代码格式:必须包含市场后缀,如 .SH(上交所)或 .SZ(深交所)。

3. 正确的代码示例

以下是一个标准的调用示例,建议在 handlebar 中进行测试:

#coding:gbk

def init(ContextInfo):
    # 初始化时可以设置股票池
    ContextInfo.set_universe(['000002.SZ', '600000.SH'])

def handlebar(ContextInfo):
    # 确保只在最后一根K线打印,避免日志过多
    if ContextInfo.is_last_bar():
        stock_list = ['000002.SZ']
        start_time = '20230101'
        end_time = '20230110'
        
        # 获取换手率数据
        turnover_df = ContextInfo.get_turnover_rate(stock_list, start_time, end_time)
        
        print("换手率数据获取结果:")
        print(turnover_df)

4. 进阶排查建议

  • 检查返回值类型:该函数返回的是一个 pandas.DataFrame。如果打印出来是空的 DataFrame,说明代码执行成功,但本地确实没有该时间段的数据。
  • 停牌股票:如果查询的时间段内股票处于停牌状态,换手率数据可能为空(NaN)。
  • 替代方案:如果 get_turnover_rate 依然无法满足需求,可以通过 ContextInfo.get_market_data 获取 volume(成交量),再通过 ContextInfo.get_last_volume 获取流通股本,自行计算换手率(换手率 = 成交量 / 流通股本)。