量化交易API完整教程:从连接到数据获取

海星量化俱乐部 阅读:84 2025-07-10 15:03:12 评论:0

前言

本文将详细介绍miniQMT量化交易软件的完整使用流程,从API连接建立、系统设置到数据获取,为您提供一个完整的学习路径。
null

一、XtQuant API基础架构

1.1 API系统概述

miniQMT提供了完整的量化交易API接口,主要包含以下几个核心组件:

  • XtQuantTrader: 核心交易API实例
  • 系统设置接口: 用于建立连接和环境配置
  • 操作接口: 用于订阅账号信息和数据获取
  • 数据接口: 用于获取历史数据和实时数据

1.2 完整的API使用流程

使用miniQMT API的标准流程如下:

  1. 创建API实例
  2. 注册回调类
  3. 准备API环境
  4. 建立连接
  5. 订阅账号信息
  6. 获取数据

二、系统设置接口详解

2.1 创建API实例

XtQuantTrader(path, session_id)

功能说明:

  • 创建XtQuant API的实例对象
  • 后续所有API操作都需要通过该实例对象进行

参数详解:

参数名 类型 说明
path str MiniQMT客户端userdata_mini的完整路径
session_id int 与MiniQMT通信的会话ID,不同会话需要保证不重复

使用示例:

# 设置客户端路径和会话ID
path = 'D:\\迅投极速交易终端 睿智融科版\\userdata_mini'
session_id = 123456

# 创建API实例(后续所有示例将使用该实例对象)
xt_trader = XtQuantTrader(path, session_id)

2.2 注册回调类

register_callback(callback)

功能说明:

  • 将回调类实例对象注册到API实例中,用于消息回调和主推

使用示例:

from xtquant import XtQuantTraderCallback

# 创建交易回调类对象
class MyXtQuantTraderCallback(XtQuantTraderCallback):
    def __init__(self):
        super().__init__()
    
    # 在这里可以重写各种回调方法
    def on_stock_order(self, order):
        print(f"收到订单回调: {order}")
    
    def on_stock_trade(self, trade):
        print(f"收到成交回调: {trade}")

# 注册回调
callback = MyXtQuantTraderCallback()
xt_trader.register_callback(callback)

2.3 准备API环境

start()

功能说明:

  • 启动交易线程,准备交易所需的环境

使用示例:

# 启动交易线程
xt_trader.start()

2.4 建立连接

connect()

功能说明:

  • 连接MiniQMT客户端
  • 返回连接结果,成功返回0,失败返回非0

使用示例:

# 建立交易连接
connect_result = xt_trader.connect()
if connect_result == 0:
    print("连接成功!")
else:
    print(f"连接失败,错误码: {connect_result}")

2.5 系统控制方法

主要方法:

# 阻塞当前线程进入等待状态
run_forever()

# 停止API接口
stop()

使用示例:

# 保持程序运行
xt_trader.run_forever()

# 或者在程序结束时停止API
xt_trader.stop()

三、操作接口详解

3.1 订阅账号信息

subscribe(account)

功能说明:

  • 订阅账号信息,包括资金账号、委托信息、成交信息、持仓信息

使用示例:

from xtquant import StockAccount

# 订阅资金账号
account = StockAccount('1000000365')
subscribe_result = xt_trader.subscribe(account)
if subscribe_result:
    print("账号订阅成功!")
else:
    print("账号订阅失败!")

3.2 反订阅账号信息

unsubscribe(account)

使用示例:

# 反订阅资金账号
account = StockAccount('1000000365')
unsubscribe_result = xt_trader.unsubscribe(account)
if unsubscribe_result:
    print("账号反订阅成功!")
else:
    print("账号反订阅失败!")

四、完整的API连接代码

# -*- coding: utf-8 -*-
from xtquant import XtQuantTrader, XtQuantTraderCallback, StockAccount
import xtquant.xtdata as xtdata

# 第一步:创建API实例
path = 'D:\\迅投极速交易终端 睿智融科版\\userdata_mini'
session_id = 123456
xt_trader = XtQuantTrader(path, session_id)

# 第二步:创建并注册回调类
class MyCallback(XtQuantTraderCallback):
    def __init__(self):
        super().__init__()
    
    def on_stock_order(self, order):
        print(f"订单回调: {order}")
    
    def on_stock_trade(self, trade):
        print(f"成交回调: {trade}")

callback = MyCallback()
xt_trader.register_callback(callback)

# 第三步:启动交易线程
xt_trader.start()

# 第四步:建立连接
connect_result = xt_trader.connect()
if connect_result == 0:
    print("✅ API连接成功!")
    
    # 第五步:订阅账号信息
    account = StockAccount('1000000365')  # 替换为您的实际账号
    subscribe_result = xt_trader.subscribe(account)
    if subscribe_result:
        print("✅ 账号订阅成功!")
    else:
        print("❌ 账号订阅失败!")
else:
    print(f"❌ API连接失败,错误码: {connect_result}")

五、完整的使用示例

# -*- coding: utf-8 -*-
"""
miniQMT完整使用示例
包含API连接、数据获取的完整流程
"""

from xtquant import XtQuantTrader, XtQuantTraderCallback, StockAccount
import xtquant.xtdata as xtdata
import os
import pandas as pd
from datetime import datetime

def main():
    # ========== 第一部分:API连接 ==========
    print("🚀 开始初始化miniQMT API...")
    
    # 配置参数
    path = 'D:\\迅投极速交易终端 睿智融科版\\userdata_mini'
    session_id = 123456
    account_id = '1000000365'
    
    # 创建API实例
    xt_trader = XtQuantTrader(path, session_id)
    
    # 创建回调类
    class MyCallback(XtQuantTraderCallback):
        def __init__(self):
            super().__init__()
        
        def on_stock_order(self, order):
            print(f"📋 订单回调: {order}")
        
        def on_stock_trade(self, trade):
            print(f"💰 成交回调: {trade}")
    
    # 注册回调并启动
    callback = MyCallback()
    xt_trader.register_callback(callback)
    xt_trader.start()
    
    # 建立连接
    connect_result = xt_trader.connect()
    if connect_result == 0:
        print("✅ API连接成功!")
        
        # 订阅账号
        account = StockAccount(account_id)
        subscribe_result = xt_trader.subscribe(account)
        if subscribe_result:
            print("✅ 账号订阅成功!")
        else:
            print("❌ 账号订阅失败!")
            return
    else:
        print(f"❌ API连接失败,错误码: {connect_result}")
        return
    
    # ========== 第二部分:数据获取 ==========
    print("\n📊 开始获取历史数据...")
    
    # 数据参数
    etf_code = '600001.SH'
    period = 'tick'
    start_time = '20250709'
    end_time = '20250709'
    
    # 下载并获取数据
    download_result = xtdata.download_history_data(etf_code, period, start_time, end_time)
    if download_result:
        print("✅ 历史数据下载成功!")
        
        history_data = xtdata.get_local_data(
            stock_code=etf_code,
            period=period,
            start_time=start_time,
            end_time=end_time
        )
        
        if history_data is not None and not history_data.empty:
            print(f"✅ 成功获取 {len(history_data)} 条数据")
            
          

if __name__ == "__main__":
    main()

六、使用注意事项

6.1 环境准备

  1. 客户端路径: 确保MiniQMT客户端已正确安装并获取正确的userdata_mini路径
  2. 会话ID: 不同的Python策略需要使用不同的会话编号
  3. 权限设置: 确保Python程序有足够的权限访问客户端目录

6.2 数据获取注意事项

  1. 下载顺序: 必须先使用download_history_data下载数据,然后才能用get_local_data读取
  2. 时间格式: 时间参数使用’YYYYMMDD’格式
  3. 股票代码: 使用标准格式,如’600000.SH’(上海)、’000001.SZ’(深圳)
  4. 连接状态: 确保API连接成功后再进行数据操作

6.3 错误处理建议

  1. 连接检查: 始终检查connect()的返回值
  2. 数据验证: 在保存前验证数据的有效性
  3. 异常处理: 使用try-except块处理可能的异常
  4. 资源清理: 程序结束时调用stop()方法

⚠️ 注意事项

  • 函数调用时需要确保函数模块之间的兼容性
  • 在回测/交易模块函数不可用于研究模块

通过本教程,您已经学会了:

  1. API基础: 理解miniQMT API的完整架构和使用流程
  2. 连接建立: 掌握从创建实例到建立连接的完整步骤
  3. 数据获取: 学会获取历史数据和实时数据的方法
  4. 数据保存: 实现高级的数据保存和分析功能
  5. 实践应用: 通过完整示例了解实际使用场景

这个完整的学习路径为您提供了使用miniQMT API进行量化交易开发的坚实基础。建议在实际使用中根据具体需求调整代码,并始终关注官方文档的更新。


本文由 海星量化研究所 作者提供,转载请保留链接和署名!网址:https://qmt.hxquant.com/?id=46

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源; 2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任; 3.作者投稿可能会经我们编辑修改或补充。

搜索
排行榜
关注我们

扫码开通QMT/ptrade