🚀 AI 一键生成 qmt 策略代码

如何使用 QMT Python API 实时获取账户资金、持仓和委托信息?

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

问题描述

怎样用代码查询我当前持有哪些股票以及每只股票的数量?

解决方案

在 QMT 中,查询当前持仓主要使用 get_trade_detail_data 函数。你需要指定数据类型为 'POSITION'

以下是具体的代码示例和详细说明:

代码实现

# -*- coding: gbk -*-

def init(ContextInfo):
    # 1. 设置您的资金账号
    # 请将 'YOUR_ACCOUNT_ID' 替换为您实际的资金账号,例如 '6000001234'
    # 如果您在右侧交易面板已勾选账号,也可以尝试打印 ContextInfo.accid 查看
    ContextInfo.account_id = 'YOUR_ACCOUNT_ID'
    
    # 2. 设置账号类型
    # 'STOCK': 股票, 'FUTURE': 期货, 'CREDIT': 信用(两融), 'STOCK_OPTION': 期权
    ContextInfo.account_type = 'STOCK'
    
    # 3. 绑定账号(必须步骤,否则无法接收回报)
    ContextInfo.set_account(ContextInfo.account_id)

def handlebar(ContextInfo):
    # 4. 获取持仓数据
    # 参数说明:账号ID, 账号类型, 数据类型('POSITION' 代表持仓)
    position_list = get_trade_detail_data(ContextInfo.account_id, ContextInfo.account_type, 'POSITION')
    
    # 5. 打印持仓信息
    # 为了避免每个tick都刷屏,这里简单判断一下只在最后一根K线打印,或者你可以加定时器
    if ContextInfo.is_last_bar():
        print(f"--- 开始查询账号 {ContextInfo.account_id} 的持仓 ---")
        
        if not position_list:
            print("当前无持仓。")
        
        for pos in position_list:
            # 获取持仓对象中的属性
            code = pos.m_strInstrumentID       # 证券代码 (如 600000.SH)
            name = pos.m_strInstrumentName     # 证券名称
            volume = pos.m_nVolume             # 当前总持仓量
            can_use_volume = pos.m_nCanUseVolume # 可用持仓量 (可卖数量)
            avg_price = pos.m_dOpenPrice       # 持仓成本价
            float_profit = pos.m_dFloatProfit  # 浮动盈亏
            
            print(f"股票: {code} ({name}), 总数量: {volume}, 可卖: {can_use_volume}, 成本: {avg_price:.2f}, 浮盈: {float_profit:.2f}")
        
        print("--- 查询结束 ---")

关键点说明

  1. 函数 get_trade_detail_data:

    • 这是获取交易账户信息的核心函数。
    • 第三个参数 'POSITION' 专门用于获取持仓列表。
    • 返回的是一个对象列表(List),列表中的每个元素都是一个持仓对象(Position Object)。
  2. 持仓对象属性 (pos 的属性):

    • m_strInstrumentID: 证券代码(例如 600000.SH)。
    • m_nVolume: 当前拥股(总持仓量),包含冻结的和可用的。
    • m_nCanUseVolume: 可用余额(可卖数量),如果是 T+1 市场,当天买入的股票这里会显示为 0,但 m_nVolume 会显示买入后的总量。
    • m_dOpenPrice: 持仓成本。
    • m_dFloatProfit: 浮动盈亏。
  3. 注意事项:

    • 实盘/模拟模式: 此代码需要在“实盘”或“模拟”模式下运行才能获取到真实的账户数据。如果在纯回测模式下,它获取的是回测引擎模拟的虚拟持仓。
    • 账号绑定: 必须在 init 中调用 ContextInfo.set_account(),否则可能无法获取到数据或无法接收实时推送。