🚀 AI 一键生成 qmt 策略代码
立即体验

qmt 平台如何使用 get_last_volume 获取最新流通股本进行基本面选股?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: qmt 基本面选股:使用 get_last_volume 获取最新流通股本

Question: qmt 如何获取股票的最新流通股本数据进行小市值选股?

解决方案

qmt 基本面选股:使用 get_last_volume 获取最新流通股本

在基本面量化选股策略中,流通股本(Float Volume)与总市值/流通市值是极其重要的因子。例如在小市值因子策略中,投资者需要筛选出流通股本较小或流通市值较低的标的进行构建组合。

在 QMT(迅投 QMT)量化平台中,我们可以通过全局上下文对象 ContextInfo 提供的 get_last_volume() 接口快速获取指定股票的最新流通股本。


1. ContextInfo.get_last_volume 接口说明

1.1 语法

ContextInfo.get_last_volume(stockcode)

1.2 参数说明

  • stockcode: string 类型,股票代码,格式必须为 '代码.市场'(例如 '000002.SZ', '600000.SH')。

1.3 返回值

  • number: 返回指定股票最新的流通股本数量(单位:股)。

2. 策略实现思路

  1. 定义股票池:获取目标股票池(如沪深300、中证500或全A股)。
  2. 计算流通市值
    • 调用 ContextInfo.get_last_volume(stockcode) 获取最新流通股本。
    • 调用 ContextInfo.get_market_data_ex()get_history_data() 获取股票最新的收盘价。
    • 计算公式:流通市值 = 流通股本 × 最新收盘价
  3. 筛选与排序:按流通市值升序排列,选取市值最小的前 N 只股票作为买入目标。

3. QMT 完整策略源码示例

以下是一个基于 QMT 的小市值选股示例代码:

#encoding:gbk
import pandas as pd

def init(ContextInfo):
    # 1. 设置股票池(以沪深300成份股为例,也可通过 get_stock_list_in_sector 获取全市场)
    ContextInfo.stocks = ContextInfo.get_stock_list_in_sector('沪深300')
    ContextInfo.set_universe(ContextInfo.stocks)
    
    # 设置调仓持股数量
    ContextInfo.hold_count = 5
    
    # 设置定时器:每周一开盘后 09:31 运行策略
    ContextInfo.run_time("rebalance", "1nDay", "2023-01-01 09:31:00", "SH")

def rebalance(ContextInfo):
    print("--- 开始进行小市值选股调仓 ---")
    
    market_cap_dict = {}
    
    # 2. 获取股票最新价格
    price_data = ContextInfo.get_market_data_ex(['close'], ContextInfo.stocks, period='1d', count=1)
    
    for stock in ContextInfo.stocks:
        # 跳过停牌股
        if ContextInfo.is_suspended_stock(stock):
            continue
            
        # 3. 获取最新流通股本(股)
        float_volume = ContextInfo.get_last_volume(stock)
        
        # 获取最新收盘价
        if stock in price_data and not price_data[stock].empty:
            latest_price = price_data[stock]['close'].iloc[-1]
            
            # 4. 计算流通市值(元)
            float_market_cap = float_volume * latest_price
            market_cap_dict[stock] = float_market_cap
            
    # 5. 按流通市值升序排序,选择市值最小的前 N 只股票
    sorted_stocks = sorted(market_cap_dict.items(), key=lambda x: x[1])
    target_stocks = [stock for stock, cap in sorted_stocks[:ContextInfo.hold_count]]
    
    print(f"本日筛选出的目标小市值股票: {target_stocks}")
    
    # 6. 执行简单买入/调仓逻辑(回测模式)
    # 实际交易中可结合 passorder 或 order_target_percent 等交易函数进行下单
    for stock in target_stocks:
        order_target_percent(stock, 1.0 / ContextInfo.hold_count, ContextInfo)

def handlebar(ContextInfo):
    pass

4. 注意事项

  1. 代码格式:调用 get_last_volume 时,传入的代码必须带有市场后缀(如 '000002.SZ'),否则可能无法正确读取。
  2. 停牌过滤:建议配合 ContextInfo.is_suspended_stock() 函数过滤停牌股票,避免因无法交易影响策略执行。
  3. 财务数据扩展:如果需要更丰富的资产负债表或利润表指标(如总股本、净利润等),可以结合 ContextInfo.get_financial_data() 函数共同使用。