量化交易API完整教程:从连接到数据获取
海星量化俱乐部
阅读:84
2025-07-10 15:03:12
评论:0
前言
本文将详细介绍miniQMT量化交易软件的完整使用流程,从API连接建立、系统设置到数据获取,为您提供一个完整的学习路径。
一、XtQuant API基础架构
1.1 API系统概述
miniQMT提供了完整的量化交易API接口,主要包含以下几个核心组件:
- XtQuantTrader: 核心交易API实例
- 系统设置接口: 用于建立连接和环境配置
- 操作接口: 用于订阅账号信息和数据获取
- 数据接口: 用于获取历史数据和实时数据
1.2 完整的API使用流程
使用miniQMT API的标准流程如下:
- 创建API实例
- 注册回调类
- 准备API环境
- 建立连接
- 订阅账号信息
- 获取数据
二、系统设置接口详解
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 环境准备
- 客户端路径: 确保MiniQMT客户端已正确安装并获取正确的userdata_mini路径
- 会话ID: 不同的Python策略需要使用不同的会话编号
- 权限设置: 确保Python程序有足够的权限访问客户端目录
6.2 数据获取注意事项
- 下载顺序: 必须先使用
download_history_data
下载数据,然后才能用get_local_data
读取 - 时间格式: 时间参数使用’YYYYMMDD’格式
- 股票代码: 使用标准格式,如’600000.SH’(上海)、’000001.SZ’(深圳)
- 连接状态: 确保API连接成功后再进行数据操作
6.3 错误处理建议
- 连接检查: 始终检查
connect()
的返回值 - 数据验证: 在保存前验证数据的有效性
- 异常处理: 使用try-except块处理可能的异常
- 资源清理: 程序结束时调用
stop()
方法
⚠️ 注意事项:
- 函数调用时需要确保函数模块之间的兼容性
- 在回测/交易模块函数不可用于研究模块
通过本教程,您已经学会了:
- API基础: 理解miniQMT API的完整架构和使用流程
- 连接建立: 掌握从创建实例到建立连接的完整步骤
- 数据获取: 学会获取历史数据和实时数据的方法
- 数据保存: 实现高级的数据保存和分析功能
- 实践应用: 通过完整示例了解实际使用场景
这个完整的学习路径为您提供了使用miniQMT API进行量化交易开发的坚实基础。建议在实际使用中根据具体需求调整代码,并始终关注官方文档的更新。
本文由 海星量化研究所 作者提供,转载请保留链接和署名!网址:https://qmt.hxquant.com/?id=46
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源; 2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任; 3.作者投稿可能会经我们编辑修改或补充。