【深度学习量化交易11】miniQMT快速上手教程——使用XtQuant进行实盘交易篇(一万七千字超详细版本)

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现 股票自动交易,目的是实现财务自由~
目前我正在开发基于miniQMT的量化 交易系统

在前几篇的文章中讲到,我正在开发的看海量化交易系统,底层是使用miniQMT的Python接口实现的数据获取和交易执行。

通过前几篇文章已经基本上将行情模块XtData的主要功能讲完了,由于知乎或者公众号的文章不便于维护,我搭建了一个帮助文档手册,未来关于XtQuant的教程将统一在此处更新维护:miniQMT接口使用教程——看海量化交易平台

本文将系统介绍XtQuant的交易模块(XtTrade)的使用方法,对常用功能进行演示和讲解。由于行情交易模块是有机整体,所以就不再拆分章节,而是这一篇文章全讲完了。

一、基本概念介绍

1.1 XtTrade模块概述

XtTrade是XtQuant中专门用于交易的模块。它提供了完整的交易功能接口,包括:

  • 系统设置接口:用于创建API实例、注册回调、启动交易线程等基础功能
  • 操作接口:提供下单、撤单、订阅等交易操作功能
  • 查询接口:用于查询账户资产、持仓、委托、成交等信息
  • 回调接口:用于接收交易推送信息

1.2 交易流程概述

使用XtTrade进行交易的基本流程如下:

  1. 创建API实例并注册回调
  2. 启动交易线程并建立连接
  3. 订阅账户信息
  4. 进行交易操作(下单、撤单等)
  5. 接收交易推送信息
  6. 程序结束时取消订阅并断开连接

二、系统设置接口使用演示

在开始编写交易策略之前,我们需要先完成交易系统的初始化工作。这部分内容主要包括创建API实例、注册回调、启动交易线程等基础设置,属于程序运行前的准备工作,与具体的交易策略关联不大(不过部分回调功能中可以考虑与策略衔接)。

让我们按照初始化的流程,逐步了解这些基础设置:

2.1 创建API实例

创建API实例是使用XtTrade的第一步。通过XtQuantTrader类来创建实例,需要提供两个重要参数:path和session_id。前者是MiniQMT客户端安装路径中userdata_mini文件夹的完整路径,用以和miniQMT客户端建立连接;后者是与MiniQMT通信的会话ID,不同的会话要保证不重。

创建实例的写法如下,其中的session_id我用了毫秒级的时间戳,可以比较有效地防止重复,当然如果你有其他方式也可以。

from xtquant.xttrader import XtQuantTrader
import time

# 创建API实例
path = "D:\\XX证券QMT交易端\\userdata_mini"  # miniQMT客户端安装目录下的userdata_mini路径
session_id = int(time.time() * 1000)  # 使用毫秒级时间戳作为会话编号
trader = XtQuantTrader(path, session_id)

注意事项:1.确保path路径正确,否则无法与miniQMT建立连接,需根据本地电脑实际路径修改。2.通常一个策略只需要创建一个API实例。

2.2 创建资金账号

在进行任何交易操作之前,我们需要先创建一个资金账号对象。这个账号对象用来标识我们要操作的证券账户,需要和登录的miniQMT的账号保持一致:

from xtquant.xttype import StockAccount

# 创建证券账户对象
account = StockAccount('XXXXX')  # 参数是资金账号

2.3 注册回调类

回调类是实现交易系统与用户策略之间通信的关键机制。通过回调类,我们可以实时接收交易状态变化(如委托、成交、撤单等),处理异常情况(如连接断开、委托失败等),并根据这些信息执行相应的交易逻辑。

回调类可以理解为一个"事件监听器"。当我们进行交易时,会发生各种事件:比如委托单成交了、撤单成功了、连接断开了等等。回调类就是用来接收这些事件通知的。

XtTrade模块中规定的回调包括失去连接时推送信息回调、账号状态信息变动推送等等,过会儿会详细介绍。

在使用回调函数时需要注意,所有的回调都是在主线程中执行的。这意味着如果在回调函数中执行耗时的操作,会阻塞后续回调消息的处理。当回调函数执行时间过长时,可能会错过重要的交易信息,或者导致其他回调处理发生延迟,从而影响整个交易系统的响应性。在实际开发中,建议将回调函数的实现保持简单和高效。可以在回调函数中进行必要的日志记录、状态检查等轻量级操作,但复杂的业务逻辑最好放在独立的处理线程中执行。同时,要注意做好异常处理,避免因为回调函数的异常导致整个交易系统受到影响。

下面是一个包含主要回调方法的官方示例(案例连接),其中演示的是最简单的通过打印来进行信息通知的处理方式:

from xtquant.xttrader import XtQuantTraderCallback

class MyXtQuantTraderCallback(XtQuantTraderCallback):
    def on_disconnected(self):
        """
        连接断开
        :return:
        """
        print(datetime.datetime.now(),'连接断开回调')

    def on_stock_order(self, order):
        """
        委托回报推送
        :param order: XtOrder对象
        :return:
        """
        print(datetime.datetime.now(), '委托回调', order.order_remark)


    def on_stock_trade(self, trade):
        """
        成交变动推送
        :param trade: XtTrade对象
        :return:
        """
        print(datetime.datetime.now(), '成交回调', trade.order_remark)


    def on_order_error(self, order_error):
        """
        委托失败推送
        :param order_error:XtOrderError 对象
        :return:
        """
        # print("on order_error callback")
        # print(order_error.order_id, order_error.error_id, order_error.error_msg)
        print(f"委托报错回调 {order_error.order_remark} {order_error.error_msg}")

    def on_cancel_error(self, cancel_error):
        """
        撤单失败推送
        :param cancel_error: XtCancelError 对象
        :return:
        """
        print(datetime.datetime.now(), sys._getframe().f_code.co_name)

    def on_order_stock_async_response(self, response):
        """
        异步下单回报推送
        :param response: XtOrderResponse 对象
        :return:
        """
        print(f"异步委托回调 {response.order_remark}")

    def on_cancel_order_stock_async_response(self, response):
        """
        收到撤单回调信息
        :param response: XtCancelOrderResponse 对象
        :return:
        """
        print(datetime.datetime.now(), sys._getframe().f_code.co_name)

    def on_account_status(self, status):
        """
        账号状态信息变动推送
        :param response: XtAccountStatus 对象
        :return:
        """
        print(datetime.datetime.now(), sys._getframe().f_code.co_name)

以上八种回调类是官方文档中提到了的,据我查看xtquant.xttrader的源码,所能支持的回调类应该还有以下这几种,大家可以在实战中实验甄别:

def on_stock_position(self, position):
        """
        持仓变动推送,根据:https://blog.csdn.net/liuyukuan/article/details/128754695
        :param position: XtPosition对象
        :return:
        ""&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值