🚀 AI 一键生成 qmt 策略代码

QMT 平台获取 SH 股票流通股本为 0 怎么办?

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

问题描述

【bug】xtdata.get_instrument_detail获取SH流通股本为0

获取 SH 股票的流通股本:FloatVolume,返回为 0,但是 SZ 的是正常的,为什么?

解决方案

在 QMT 平台中使用 get_instrument_detail 获取沪市(SH)股票流通股本时返回 0,通常是由以下几个原因导致的。以下是详细的排查步骤和替代解决方案:

1. 检查字段拼写是否正确

首先,请注意 QMT 官方 API 文档中的字段拼写。流通股本的字段名是 FloatVolumn(注意结尾是 mn,而不是 me),总股本是 TotalVolumn。如果您在代码中使用了 FloatVolume,可能会获取不到正确的值。

2. 交易所数据推送与本地数据同步差异

get_instrument_detail 获取的是合约的静态基础信息。有时由于交易所推送规则的差异或本地基础数据未完全同步,可能会导致某些字段(如沪市的流通股本)为空或为 0。建议在 QMT 终端的【数据管理】中,重新补充一下基础数据和财务数据。

3. 推荐的替代方案(更稳定)

如果 get_instrument_detail 依然无法获取,QMT 提供了专门用于获取股本数据的 API,建议使用以下方法:

方案 A:使用 get_last_volume 函数(最直接)

QMT 提供了专门获取最新流通股本的接口 ContextInfo.get_last_volume(),该接口通常比静态详情接口更可靠。

def handlebar(ContextInfo):
    # 获取浦发银行的最新流通股本
    float_vol = ContextInfo.get_last_volume('600000.SH')
    print(f'600000.SH 流通股本: {float_vol}')

方案 B:使用财务数据接口获取(最准确)

流通股本本质上属于财务数据中的股本结构。您可以通过 ContextInfo.get_financial_data 接口,查询股本表(CAPITALSTRUCTURE)中的已上市流通A股(circulating_capital)字段。

def handlebar(ContextInfo):
    # 取股本结构中的已上市流通A股
    fieldList = ['CAPITALSTRUCTURE.circulating_capital']
    stockList = ['600000.SH']
    startDate = '20230101'
    endDate = '20231231'
    
    # 获取财务数据
    df = ContextInfo.get_financial_data(fieldList, stockList, startDate, endDate)
    print(df)

(注:使用财务数据接口前,请确保在 QMT 终端的【数据管理】中下载了对应的财务数据)

方案 C:获取总股本作为参考

如果您需要的是总股本,可以使用 ContextInfo.get_total_share()

def handlebar(ContextInfo):
    total_share = ContextInfo.get_total_share('600000.SH')
    print(f'600000.SH 总股本: {total_share}')

总结

遇到 get_instrument_detail 返回 0 的情况,首选检查拼写是否为 FloatVolumn。如果拼写无误但依然为 0,强烈建议改用 ContextInfo.get_last_volume('代码.SH')财务数据接口 来获取流通股本,这两种方式在实盘和回测中表现更为稳定。