当前位置:首页>python>量化交易软件QMT实战技巧!如何用 Python 批量获取成交量排名数据

量化交易软件QMT实战技巧!如何用 Python 批量获取成交量排名数据

  • 2026-09-06 23:12:51
量化交易软件QMT实战技巧!如何用 Python 批量获取成交量排名数据

一、实现思路

QMT 没有内置 “一键获取市场排名” 的独立接口,成交量榜单需要三步走:

定义目标股票池(沪深 A 股、自选股、指数成分股);

通过get_market_data_ex批量获取当日volume(成交量)、amount(成交额)、最新价、涨跌幅;

提取最新一日数据,使用 Pandas 降序排序,输出成交量 TOP 榜单。

区分两个概念:

volume:成交量(手);amount:成交额(元)

日常热度榜单大多使用成交额排序,脚本内可自由切换。

二、运行前置条件

成功登录 QMT 客户端 /;

Python 环境已导入xtquant;

盘前建议执行行情数据下载,避免缺数;盘中可开启实时订阅。

三、完整代码

# -*- coding:utf-8 -*-

from xtquant import xtdata

import pandas as pd

def get_volume_rank(stock_list, top_n=30):

    """

    QMT 获取成交量排名

    :param stock_list: 股票代码列表 ['600000.SH','000001.SZ']

    :param top_n: 返回榜单数量

    :return: 排序后的DataFrame榜单

    """

    # 批量读取日线行情,取最新1根K线(当日数据)

    data = xtdata.get_market_data_ex(

        field_list=["close", "volume", "amount"],

        stock_list=stock_list,

        period="1d",

        count=1,

        fill_data=False

    )

    res = []

    for code in stock_list:

        df = data.get(code, None)

        if df is None or len(df) == 0:

            continue

        row = df.iloc[-1]

        res.append({

            "code": code,

            "close": row["close"],

            "volume": row["volume"],       # 成交量(手)

            "amount": round(row["amount"]/1e8,2) # 成交额,单位:亿元

        })

    df_rank = pd.DataFrame(res)

    # 按成交量降序;如需成交额排序改为 ascending=False

    df_rank = df_rank.sort_values("volume", ascending=False).head(top_n)

    df_rank.reset_index(drop=True, inplace=True)

    df_rank["排名"] = df_rank.index + 1

    cols = ["排名","code","close","volume","amount"]

    return df_rank[cols]

if __name__ == "__main__":

    # 示例:自定义股票池;可替换为全市场A股、自选股列表

    stock_pool = [

        "600000.SH","601318.SH","000001.SZ",

        "300750.SZ","600519.SH","002594.SZ"

    ]

    rank_result = get_volume_rank(stock_pool, top_n=20)

    print("=======成交量排名榜单=======")

    print(rank_result)

四、策略模型内调用版本(QMT 策略编辑器 Python 模型)

如果你要写在init/handlebar策略中使用,适配 Context 环境:

# -*- coding:gbk -*-

import pandas as pd

def init(ContextInfo):

    stock_list = ["600000.SH","000001.SZ"]

    df = get_volume_rank_strategy(ContextInfo, stock_list, 10)

    print(df)

def get_volume_rank_strategy(ContextInfo, stock_list, top_n):

    res = []

    for code in stock_list:

        bar = ContextInfo.get_market_data(

            stock_code=code, period="1d", count=1,

            fields=["close","volume","amount"]

        )

        if len(bar) == 0:

            continue

        res.append({

            "code":code,

            "close":bar["close"][-1],

            "volume":bar["volume"][-1],

            "amount":bar["amount"][-1]/1e8

        })

    df = pd.DataFrame(res).sort_values("volume",ascending=False).head(top_n)

    return df

五、常见优化拓展方向

切换成交额榜单

排序字段由volume改为amount,市场活跃度参考价值更高;

盘中动态刷新榜单

添加xtdata.subscribe_quote()订阅行情,定时循环重新执行排序,实现实时榜单;

增加量比、换手率过滤

搭配get_instrument_detail或实时行情接口,剔除长期低迷个股;

导出榜单至 Excel

df_rank.to_excel("成交量排名.xlsx",index=False)自动保存文件;

行业分组排行

先对股票按行业分类,再分组计算成交量排名,寻找板块轮动机会。

六、高频踩坑提醒

全市场一次性传入几千只股票会超时

建议分批次循环获取标的数据,不要一次性传入 4000 + 个股;

非交易时间无当日 volume 数据

收盘前、盘中运行脚本效果最佳;盘前只能读取前一交易日成交量;

退市、停牌标的 volume 为 0,脚本已做简单过滤,可继续加强剔除逻辑;

七、量化应用场景

盘中自动扫描每日成交量 TOP 标的,监控放量突破机会;

构建放量选股因子,用于回测多因子策略;

联动自动预警,当个股成交量进入榜单前 50 推送提醒;

批量导出每日榜单,长期统计历史高活跃股票清单。

最新文章

随机文章