🚀 AI 一键生成 qmt 策略代码

QMT API 指南:利用 get_svol 和 get_bvol 函数分析市场买卖力量

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

问题描述

请问如何获取一只股票的实时内盘和外盘成交量数据?

解决方案

在 QMT (Quantitative Trading Platform) 中,获取一只股票的实时内盘(主动卖出成交量)和外盘(主动买入成交量)数据,主要使用 ContextInfo 对象提供的专用接口。

核心函数

  1. 获取内盘成交量ContextInfo.get_svol(stockcode)

    • 含义:获取指定股票的内盘成交量(即以买入价成交的累计数量,通常代表空头力量)。
    • 返回值string 类型(注意:返回的是字符串,如需计算需转换为数值)。
  2. 获取外盘成交量ContextInfo.get_bvol(stockcode)

    • 含义:获取指定股票的外盘成交量(即以卖出价成交的累计数量,通常代表多头力量)。
    • 返回值string 类型。

代码实现示例

以下是一个完整的策略示例,展示如何在 handlebar 函数中获取并打印某只股票(例如平安银行 000001.SZ)的内盘和外盘数据。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置需要查询的股票代码
    ContextInfo.stock = '000001.SZ'
    print(f"策略初始化,监测股票: {ContextInfo.stock}")

def handlebar(ContextInfo):
    # 为了避免在回测历史K线时重复打印,通常只在最新的一根K线(实时行情)通过
    if not ContextInfo.is_last_bar():
        return

    stock_code = ContextInfo.stock
    
    # 1. 获取内盘成交量 (Active Sell Volume)
    # 注意:接口返回的是字符串类型
    svol_str = ContextInfo.get_svol(stock_code)
    
    # 2. 获取外盘成交量 (Active Buy Volume)
    bvol_str = ContextInfo.get_bvol(stock_code)
    
    # 3. 数据处理与打印
    try:
        # 转换为浮点数或整数以便计算
        svol = float(svol_str)
        bvol = float(bvol_str)
        
        print(f"========== {stock_code} 实时盘口数据 ==========")
        print(f"内盘 (主动卖出): {svol}")
        print(f"外盘 (主动买入): {bvol}")
        
        # 计算委比或量比逻辑示例
        if svol + bvol > 0:
            ratio = bvol / (svol + bvol)
            print(f"外盘占比: {ratio:.2%}")
            
    except ValueError:
        print(f"数据获取异常,返回值为: 内盘{svol_str}, 外盘{bvol_str}")

注意事项

  1. 数据类型转换get_svolget_bvol 返回的是字符串(String),如果需要进行数学运算(如计算内外盘差值、比例),必须先使用 float()int() 进行转换。
  2. 缺省参数:如果调用时不传入 stockcode 参数(即 ContextInfo.get_svol()),默认获取当前主图品种的数据。
  3. 数据更新:这两个函数获取的是快照数据,建议在 handlebar 中配合 ContextInfo.is_last_bar() 使用,以确保获取的是最新的实时状态。

Q&A

Q: get_svolget_bvol 返回的数据单位是什么?
A: 返回的数据单位通常是(1手=100股)或,具体取决于券商行情源的推送格式。建议在实盘中打印数值与行情软件对比确认,通常与行情软件上显示的“内盘”、“外盘”数值一致。

Q: 如果返回的数据为空字符串怎么办?
A: 在集合竞价期间或非交易时间,或者数据未推送到位时,可能会返回空字符串或无效数据。在代码中应加入 try-except 块或非空判断来增强策略的健壮性。

Q: 除了这两个函数,还有其他方式获取盘口详情吗?
A: 可以使用 ContextInfo.get_full_tick(stock_code) 获取最新的 Tick 数据。该函数返回一个字典,包含了 askPrice(卖价五档)、bidPrice(买价五档)、askVolbidVol 等详细盘口挂单信息,但不直接包含累计的内外盘成交量,内外盘通常需要通过 get_svol/get_bvol 获取。