🚀 AI 一键生成 qmt 策略代码

QMT API 指南:如何使用 get_total_share 函数获取股票总股本?

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

问题描述

如何通过API查询一只股票的总股本是多少?

解决方案

在 QMT (Quant Maker Trading) 平台中,查询一只股票的总股本主要有两种方式,取决于您是需要获取当前最新的总股本,还是需要获取历史回测中某一天对应的财务数据总股本。

方法一:使用 get_total_share (最简便)

如果您只需要获取指定股票的总股数(通常用于获取当前基础信息),可以使用 ContextInfo.get_total_share(stockcode) 接口。

  • 函数: ContextInfo.get_total_share(stockcode)
  • 参数: stockcode (字符串),例如 '600000.SH'
  • 返回: number (数值),即总股数。

方法二:使用 get_financial_data (适用于回测/历史数据)

如果您在进行历史回测,并且需要获取历史上某一天的总股本(例如计算当时的市值),建议使用财务数据接口 ContextInfo.get_financial_data 读取股本结构表。

  • 表名: CAPITALSTRUCTURE (股本表)
  • 字段: total_capital (总股本)

代码示例

以下代码展示了如何在策略中通过这两种方式查询浦发银行(600000.SH)的总股本。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 在初始化中设置股票池,这里以浦发银行为例
    ContextInfo.stock = '600000.SH'
    print("策略初始化完成")

def handlebar(ContextInfo):
    # 获取当前周期对应的K线索引
    index = ContextInfo.barpos
    # 获取当前K线的时间戳
    timetag = ContextInfo.get_bar_timetag(index)
    # 将时间戳转换为易读的日期格式
    date_str = timetag_to_datetime(timetag, '%Y%m%d')
    
    stock_code = ContextInfo.stock
    
    # --- 方法一:使用 get_total_share (简单直接) ---
    # 注意:此函数通常返回的是基础信息中的总股本
    total_share_simple = ContextInfo.get_total_share(stock_code)
    
    # --- 方法二:使用 get_financial_data (财务数据,适合回测) ---
    # 获取股本表(CAPITALSTRUCTURE)中的总股本(total_capital)
    # 参数说明:表名, 字段名, 市场, 代码, 报告期类型(默认), 当前bar索引
    total_share_financial = ContextInfo.get_financial_data(
        'CAPITALSTRUCTURE', 
        'total_capital', 
        'SH', 
        '600000', 
        'report_time', 
        index
    )
    
    # 打印结果
    print(f"日期: {date_str} | 股票: {stock_code}")
    print(f"方法1 (get_total_share) 获取的总股本: {total_share_simple}")
    print(f"方法2 (财务数据) 获取的总股本: {total_share_financial}")
    
    # 仅在最后一根K线打印,避免历史K线刷屏(如果是回测,可注释掉此行以查看历史变化)
    if not ContextInfo.is_last_bar():
        return

注意事项

  1. 单位问题:返回的数值通常是股数(例如 10亿股),而不是金额。在计算市值时,需要乘以股价。
  2. 数据补充:使用 get_financial_data 前,请确保在 QMT 客户端的【数据管理】中补充了财务数据
  3. 代码格式:股票代码必须包含市场后缀,例如 '600000.SH''000001.SZ'

Q&A

Q: get_total_shareget_last_volume 有什么区别?
A: get_total_share 获取的是总股本(包含流通股和限售股),而 get_last_volume 获取的是最新流通股本(仅包含在市场上自由交易的股份)。

Q: 为什么回测时建议使用 get_financial_data
A: 公司的总股本会因为增发、送股、回购等事件发生变化。get_financial_data 是基于历史财务报表的,能准确反映回测当时那个时间点的股本情况,避免使用当前股本去计算历史指标(即避免“未来函数”)。

Q: 如何计算当前的总市值?
A: 总市值 = 最新价 (close) × 总股本 (total_share)。您可以通过 ContextInfo.get_market_data_ex 获取最新价,再结合上述方法获取总股本进行计算。