🚀 AI 一键生成 qmt 策略代码

如何在 QMT 策略中获取和分析龙虎榜数据?

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

问题描述

如何获取某只股票在特定时间段内的龙虎榜数据?

解决方案

在 QMT 量化交易平台中,获取某只股票在特定时间段内的龙虎榜数据,可以使用 ContextInfo.get_longhubang() 接口。

该接口返回一个 pandas.DataFrame 对象,其中包含了上榜原因、成交额、以及买卖席位的详细信息。

核心代码实现

以下是一个完整的策略示例代码,展示了如何在策略初始化时获取“平安银行(000001.SZ)”在指定时间段内的龙虎榜数据并打印结果。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 1. 设置需要查询的股票代码列表
    stock_list = ['000001.SZ']
    
    # 2. 设置查询的起始时间和结束时间 (格式:YYYYMMDD)
    start_time = '20230101'
    end_time = '20230630'
    
    # 3. 调用接口获取龙虎榜数据
    # 注意:该函数返回的是一个 pandas DataFrame
    lhb_data = ContextInfo.get_longhubang(stock_list, start_time, end_time)
    
    # 4. 打印结果
    if lhb_data is not None and not lhb_data.empty:
        print("获取到的龙虎榜数据如下:")
        print(lhb_data)
        
        # 示例:访问第一条记录的买入席位详情
        # 注意:'buyTraderBooth' 和 'sellTraderBooth' 字段中的内容本身也是 DataFrame
        if 'buyTraderBooth' in lhb_data.columns:
            first_record_buy_seats = lhb_data.iloc[0]['buyTraderBooth']
            print("-" * 30)
            print("第一条记录的买入席位详情:")
            print(first_record_buy_seats)
    else:
        print("未查询到指定时间段内的龙虎榜数据。")

def handlebar(ContextInfo):
    # 本示例仅在 init 中演示数据获取,handlebar 中无需操作
    pass

函数详解:ContextInfo.get_longhubang

1. 参数说明

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

2. 返回值说明

返回值为 pandas.DataFrame,主要包含以下字段:

字段名 含义 数据类型
reason 上榜原因 String
close 收盘价 Float
spreadRate 涨跌幅 Float
TurnoverVolune 成交量 Float
Turnover_Amount 成交金额 Float
buyTraderBooth 买方席位详情 DataFrame (嵌套)
sellTraderBooth 卖方席位详情 DataFrame (嵌套)

3. 席位详情结构

buyTraderBoothsellTraderBooth 字段中存储的是嵌套的 DataFrame,包含以下列:

  • traderName: 交易营业部名称
  • buyAmount: 买入金额
  • buyPercent: 买入金额占总成交占比
  • sellAmount: 卖出金额
  • sellPercent: 卖出金额占总成交占比
  • totalAmount: 该席位总成交金额
  • rank: 席位排行
  • direction: 买卖方向

Q&A

Q: get_longhubang 接口返回的数据为空是什么原因?
A: 可能的原因包括:

  1. 该股票在指定的时间段内没有上过龙虎榜。
  2. 本地数据未补充完整。请在 QMT 客户端界面的“数据管理”中下载完整的历史行情和专业数据。
  3. 股票代码或时间格式输入错误(例如使用了非 'YYYYMMDD' 的格式)。

Q: 如何获取龙虎榜中买一席位的名称?
A: 返回的数据中 buyTraderBooth 是一个嵌套的 DataFrame。你可以通过索引访问。例如,假设 df 是龙虎榜数据:

# 获取第一行数据的买方席位DataFrame
buy_seats_df = df.iloc[0]['buyTraderBooth']
# 获取买一席位(假设按rank排序,通常第一行即为买一)
if not buy_seats_df.empty:
    buy_one_name = buy_seats_df.iloc[0]['traderName']

Q: 这个接口支持回测模式吗?
A: 支持。get_longhubang 接口在回测模式和实盘/模拟模式下均可使用,但必须确保本地已下载了对应的历史数据。