深度学习量化交易11使用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:
        """
        print("on position callback")
        print(position.stock_code, position.volume)
                         
def on_connected(self):
        """
        连接成功推送
        """
        pass

def on_stock_asset(self,asset):
        """
        资金变动推送,根据:https://blog.csdn.net/liuyukuan/article/details/128754695
        :param asset: XtAsset对象
        :return:
        """
        print("资金变动推送on asset callback")
        print(asset.account_id,asset.cash,asset.total_asset)

创建好回调类后,需要将其实例注册到交易对象中才能生效。这一步通过register_callback方法完成:

# 创建并注册回调实例
callback = MyXtQuantTraderCallback()
trader.register_callback(callback)

注册完成后,当交易系统发生相应事件时,XtQuant会自动调用对应的回调方法。比如当发出一个买入委托后,交易所返回状态变化时,系统会自动调用已注册的MyXtQuantTraderCallback中的on_stock_order方法。

在使用回调时需要注意:1.建议只注册一个回调实例;2.要做好异常处理,避免影响其他回调的执行;3.可以根据需要只实现必要的回调方法,未实现的方法会被忽略。

2.4 启动交易线程并建立连接

完成回调注册,需要启动交易线程并建立连接。这两个步骤必须按顺序执行,且都成功才能进行后续操作。

此外还可以设置主动请求接口的返回是否使用专用线程。

2.4.1 启动交易线程(start)

start()方法用于启动交易线程,为后续的交易操作做准备:

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

2.4.2 建立连接(connect)

connect()方法用于与miniQMT建立连接:

# 建立连接
connect_result = trader.connect()
if connect_result == 0:
    print("连接成功")
else:
    print("连接失败")

说明:

  • 必须在start()之后调用
  • 返回0表示连接成功,其他值表示失败
  • 连接断开后需要重新调用才能恢复连接
  • 不需要参数

2.4.3 设置请求线程(set_relaxed_response_order_enabled)

用于控制主动请求接口的返回是否使用专用线程,这个功能需要单独说明一下,因为根据官方文档,其是否开启需要根据策略是实际情况决定,以下是关于此功能的官方说明:


set_relaxed_response_order_enabled(enabled)

控制主动请求接口的返回是否从额外的专用线程返回,以获得宽松的数据时序
不开启(enabled=False)效果:在on_stock_xxx回调函数里调用XtQuantTrader.query_xxx函数会造成回调线程卡住,后续回调会接收不到
开启效果(enabled=True)效果:在on_stock_xxx回调函数里调用XtQuantTrader.query_xxx函数不会卡住回调线程,但是查询和推送的数据在时序上会变得不确定,参考下面的备注说明
参数:
enabled – bool 是否开启,默认为False关闭
返回:无
备注:如果开启,在on_stock_order等推送回调中调用同步请求不会卡住,但查询和推送的数据在时序上会变得不确定

timeline 	t1	t2	t3	t4
callback	push1	push2	push3	resp4
do 		query4 ------------------^

例如:分别在t1 t2 t3时刻到达三条委托数据,在on_push1中调用同步委托查询接口query_orders()
未开启宽松时序时,查询返回resp4会在t4时刻排队到push3完成之后处理,这使得同步等待结果的查询不能返回而卡住执行
开启宽松时序时,查询返回的resp4由专用线程返回,程序正常执行,但此时查到的resp4是push3之后的状态,也就是说resp4中的委托要比push2 push3这两个前一时刻推送的数据新,但在更早的t1时刻就进入了处理
使用中请根据策略实际情况来开启,通常情况下,推荐在on_stock_order等推送回调中使用查询接口的异步版本,如query_stock_orders_async

然而我在官方文档未找到query_stock_orders_async的更多说明。

总而言之,这里请大家根据各自策略仔细斟酌设置。

2.5 运行与停止

XtTrade提供了run_forever()函数,作为保持程序运行的方式:

#xt_traderXtQuant API实例对象
trader.run_forever()  # 会一直阻塞,直到调用stop()或按Ctrl+C

结束的也很简单,运行如下代码即可:

#xt_traderXtQuant API实例对象
xt_trader.stop()

注意:

  • run_forever(): 阻塞当前线程,适合单一策略程序
  • stop(): 停止交易线程,退出程序时调用

2.6 完整的初始化示例

下面是一个完整初始化示例,为了不赘述回调类简单地列举了三个,实际使用中要根据需求添加。此外miniQMT的路径和资金账号也要根据你的实际情况填写。运行下边代码,如果连接正常将会在命令行窗口输出0。

需要注意的是,对行情数据的订阅一般也在初始化中完成,在下例中就不演示了。

from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
import time

# 1. 创建回调类
class MyCallback(XtQuantTraderCallback):
    def on_disconnected(self):
        """连接断开时回调"""
        print("连接断开")
  
    def on_stock_order(self, order):
        """委托回报推送"""
        print(f"收到委托回报: {order.stock_code} {order.order_status}")
  
    def on_stock_trade(self, trade):
        """成交回报推送"""
        print(f"收到成交回报: {trade.stock_code} {trade.traded_volume}")
   #还有其他回调类不一一列举,根据实际情况编写
 
# 2. 创建API实例
path = r'D:\XX证券QMT交易端\userdata_mini'  # miniQMT客户端安装目录下的userdata_mini路径
session_id = int(time.time() * 1000)  # 使用毫秒级时间戳作为会话编号
trader = XtQuantTrader(path, session_id)

# 3. 创建资金账号
account = StockAccount('XXX')  # 这里填写实际的资金账号

# 4. 注册回调实例
callback = MyCallback()
trader.register_callback(callback)

# 5. 启动交易线程
trader.start()

# 6. 建立连接
connect_result = trader.connect()
print(f"连接结果: {connect_result}")  # 0表示成功

# 7. 保持程序运行
try:
    trader.run_forever()
except KeyboardInterrupt:  #在命令行输入Ctrl+C
    print("程序结束")

三、操作接口使用演示

上边讲了初始化要用到的一系列设置。现在讲一讲在实盘操作中要用到的一些接口。

操作接口主要包括订阅账户、报单、撤单等功能。

3.1 账户订阅与反订阅

使用subscribe订阅账号信息,包括资金账号、委托信息、成交信息、持仓信息。使用unsubscribe反订阅账号信息,订阅/反订阅成功返回0,订阅/反订阅失败返回-1。

账户订阅也是必不可少的操作,可以将这一步放在初始化当中。

# 示意代码,无法直接运行
account = StockAccount('XXX')
#xt_trader为XtQuant API实例对象
subscribe_result = xt_trader.subscribe(account)      #订阅
unsubscribe_result = xt_trader.unsubscribe(account)  #反订阅

3.2 股票交易操作

常用的股票操作其实就两种:报单和撤单,而其中又分同步操作和异步操作两种。所以常用函数有四个:

股票同步报单(order_stock)、股票异步报单(order_stock_async)、股票同步撤单(cancel_order_stock)、股票异步撤单(cancel_order_stock_async),这几个函数接口说明见附录。

关于同步和异步的区别:同步指程序按照顺序逐步执行,直到一个操作完成后才能执行下一个操作;异步是指程序可以继续执行后续操作,不需要等待某个操作的完成。

这里引用其他文章里的一段描述(说一说qmt的运行逻辑——(附异步编程代码)):

那同步编程和异步编程有啥不一样呢?还是用我妈做饭的例子来说,同步编程是等一件事做完以后,再去做另外一件事情,异步就是可以在一件事没做完的情况下,去做其他的事情,所以异步最大的好处就是快,那相应的,也会增加做事情的复杂度,大家自己做过饭就知道,如果同时做很多事情,有可能会忙得手忙脚乱的,同步的好处就是简单,一步一步往下走,肯定不会出错。

异步交易是和之前讲到的回调相关联的:对股票进行异步下单操作,异步下单接口如果正常返回了下单请求序号seq,会收到
on_order_stock_async_response的委托反馈;我猜测(因为官网文档没说),对股票进行异步撤单,如果正常返回撤单请求序号,会收到
on_cancel_order_stock_async_response的委托反馈。

# 该代码仅做案例演示,不能直接运行
from xtquant import xtconstant

# 1. 同步下单
order_id = trader.order_stock(
    account=account,  # 账户
    stock_code="XXXXXX.SH",  # 股票代码
    order_type=xtconstant.STOCK_BUY,  # 买入
    order_volume=100,  # 委托数量,单位是股
    price_type=xtconstant.FIX_PRICE,  # 限价委托
    price=10.5,  # 委托价格
    strategy_name="strategy1",  # 策略名称
    order_remark="test"  # 委托备注
)
print(f"下单结果订单号: {order_id}")

# 2. 异步下单
seq = trader.order_stock_async(
    account=account,
    stock_code="XXXXXX.SH",
    order_type=xtconstant.STOCK_BUY,
    order_volume=100,
    price_type=xtconstant.FIX_PRICE,
    price=10.5,
    strategy_name="strategy1",
    order_remark="test"
)
print(f"异步下单请求序号: {seq}")

# 3. 同步撤单
cancel_result = trader.cancel_order_stock(
    account=account,
    order_id=order_id  # 要撤销的订单号
)
print(f"撤单结果: {cancel_result}")  # 0表示成功

# 4. 异步撤单
cancel_seq = trader.cancel_order_stock_async(
    account=account,
    order_id=order_id
)
print(f"异步撤单请求序号: {cancel_seq}")

四、查询接口使用演示

查询接口用于获取账户相关信息,包括资产、持仓、委托、成交等。查询接口的说明我附在文末了。

以下是主要查询接口的使用示例:

# 该代码仅做案例演示,不能直接运行
# 1. 查询资产
asset = trader.query_stock_asset(account)
if asset:
    print(f"可用资金: {asset.cash}")
    print(f"总资产: {asset.total_asset}")

# 2. 查询当日委托
orders = trader.query_stock_orders(account)
if orders:
    print(f"今日委托数量: {len(orders)}")
    for order in orders:
        print(f"委托: {order.stock_code} {order.order_volume} {order.price}")

# 3. 查询当日成交
trades = trader.query_stock_trades(account)
if trades:
    print(f"今日成交数量: {len(trades)}")
    for trade in trades:
        print(f"成交: {trade.stock_code} {trade.traded_volume} {trade.traded_price}")

# 4. 查询持仓
positions = trader.query_stock_positions(account)
if positions:
    print(f"持仓数量: {len(positions)}")
    for pos in positions:
        print(f"持仓: {pos.stock_code} {pos.volume} {pos.can_use_volume}")

# 5. 查询单个股票持仓
position = trader.query_stock_position(account, "XXX.SH")
if position:
    print(f"持仓数量: {position.volume}")
    print(f"可用数量: {position.can_use_volume}")

以上的初始化、查询、实盘接口组合到一起就可以实现代码的实盘操作了,这里我不给大家放实盘案例代码了,以免读者误操作。

官方帮助文档中提供了几个实盘的案例,请感兴趣的朋友跳转阅读:完整实例 | 迅投知识库

五、附录-交易模块函数接口

注意:定义可能会有变动,以官网信息为准。

5.1 股票同步报单

order_stock(account, stock_code, order_type, order_volume, price_type, price, strategy_name, order_remark) 
  • 释义
    • 对股票进行下单操作
  • 参数
    • account – StockAccount 资金账号
    • stock_code – str 证券代码,如’600000.SH’
    • order_type – int 委托类型
    • order_volume – int 委托数量,股票以’股’为单位,债券以’张’为单位
    • price_type – int 报价类型
    • price – float 委托价格
    • strategy_name – str 策略名称
    • order_remark – str 委托备注
  • 返回
    • 系统生成的订单编号,成功委托后的订单编号为大于0的正整数,如果为-1表示委托失败
  • 备注

5.2 股票异步报单

order_stock_async(account, stock_code, order_type, order_volume, price_type, price, strategy_name, order_remark) 
  • 释义
    • 对股票进行异步下单操作,异步下单接口如果正常返回了下单请求序号seq,会收到on_order_stock_async_response的委托反馈
  • 参数
    • account – StockAccount 资金账号
    • stock_code – str 证券代码, 如’600000.SH’
    • order_type – int 委托类型
    • order_volume – int 委托数量,股票以’股’为单位,债券以’张’为单位
    • price_type – int 报价类型
    • price – float 委托价格
    • strategy_name – str 策略名称
    • order_remark – str 委托备注
  • 返回
    • 返回下单请求序号seq,成功委托后的下单请求序号为大于0的正整数,如果为-1表示委托失败
  • 备注
    • 如果失败,则通过下单失败主推接口返回下单失败信息

5.3 股票同步撤单

cancel_order_stock(account, order_id) 
  • 释义
    • 根据订单编号对委托进行撤单操作
  • 参数
    • account – StockAccount 资金账号
    • order_id – int 同步下单接口返回的订单编号,对于期货来说,是order结构中的order_sysid字段
  • 返回
    • 返回是否成功发出撤单指令,0: 成功, -1: 表示撤单失败
  • 备注

5.4 股票异步撤单

cancel_order_stock_async(account, order_id) 
  • 释义
    • 根据订单编号对委托进行异步撤单操作
  • 参数
    • account – StockAccount 资金账号
    • order_id – int 下单接口返回的订单编号,对于期货来说,是order结构中的order_sysid
  • 返回
    • 返回撤单请求序号, 成功委托后的撤单请求序号为大于0的正整数, 如果为-1表示委托失败
  • 备注
    • 如果失败,则通过撤单失败主推接口返回撤单失败信息

5.5 资产查询

query_stock_asset(account) 
  • 释义
    • 查询资金账号对应的资产
  • 参数
    • account – StockAccount 资金账号
  • 返回
    • 该账号对应的资产对象XtAsset在新窗口打开或者None
  • 备注
    • 返回None表示查询失败

5.6 委托查询

query_stock_orders(account, cancelable_only = False) 
  • 释义
    • 查询资金账号对应的当日所有委托
  • 参数
    • account – StockAccount 资金账号
    • cancelable_only – bool 仅查询可撤委托
  • 返回
    • 该账号对应的当日所有委托对象XtOrder在新窗口打开组成的list或者None
  • 备注
    • None表示查询失败或者当日委托列表为空

5.7 成交查询

query_stock_trades(account)
  • 释义
    • 查询资金账号对应的当日所有成交
  • 参数
    • account – StockAccount 资金账号
  • 返回
    • 该账号对应的当日所有成交对象XtTrade在新窗口打开组成的list或者None
  • 备注
    • None表示查询失败或者当日成交列表为空

5.8 持仓查询

query_stock_positions(account) 
  • 释义
    • 查询资金账号对应的持仓
  • 参数
    • account – StockAccount 资金账号
  • 返回
    • 该账号对应的最新持仓对象XtPosition在新窗口打开组成的list或者None
  • 备注
    • None表示查询失败或者当日持仓列表为空

六、相关数据字典

该部分内容比较多,但是很实用,因为目前只研究股票交易,我把相关的摘过来了。注意:定义可能会有变动,以官网信息为准。

6.1 委托类型(order_type)

  • 股票
    • 买入 – xtconstant.STOCK_BUY
    • 卖出 – xtconstant.STOCK_SELL

6.2 报价类型(price_type)

  • 最新价 – xtconstant.LATEST_PRICE
  • 指定价 – xtconstant.FIX_PRICE

6.3 委托状态(order_status)

枚举变量名

含义

xtconstant.ORDER_UNREPORTED

48

未报

xtconstant.ORDER_WAIT_REPORTING

49

待报

xtconstant.ORDER_REPORTED

50

已报

xtconstant.ORDER_REPORTED_CANCEL

51

已报待撤

xtconstant.ORDER_PARTSUCC_CANCEL

52

部成待撤

xtconstant.ORDER_PART_CANCEL

53

部撤(已经有一部分成交,剩下的已经撤单)

xtconstant.ORDER_CANCELED

54

已撤

xtconstant.ORDER_PART_SUCC

55

部成(已经有一部分成交,剩下的待成交)

xtconstant.ORDER_SUCCEEDED

56

已成

xtconstant.ORDER_JUNK

57

废单

xtconstant.ORDER_UNKNOWN

255

未知

6.4 账号状态(account_status)

枚举变量名

含义

xtconstant.ACCOUNT_STATUS_INVALID

-1

无效

xtconstant.ACCOUNT_STATUS_OK

0

正常

xtconstant.ACCOUNT_STATUS_WAITING_LOGIN

1

连接中

xtconstant.ACCOUNT_STATUSING

2

登陆中

xtconstant.ACCOUNT_STATUS_FAIL

3

失败

xtconstant.ACCOUNT_STATUS_INITING

4

初始化中

xtconstant.ACCOUNT_STATUS_CORRECTING

5

数据刷新校正中

xtconstant.ACCOUNT_STATUS_CLOSED

6

收盘后

xtconstant.ACCOUNT_STATUS_ASSIS_FAIL

7

穿透副链接断开

xtconstant.ACCOUNT_STATUS_DISABLEBYSYS

8

系统停用(总线使用-密码错误超限)

xtconstant.ACCOUNT_STATUS_DISABLEBYUSER

9

用户停用(总线使用)

6.5 资产XtAsset

属性

类型

注释

account_type

int

账号类型

account_id

str

资金账号

cash

float

可用金额

frozen_cash

float

冻结金额

market_value

float

持仓市值

total_asset

float

总资产

6.6 委托XtOrder

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

stock_code

str

证券代码,例如”600000.SH”

order_id

int

订单编号

order_sysid

str

柜台合同编号

order_time

int

报单时间

order_type

int

委托类型,参见数据字典在新窗口打开

order_volume

int

委托数量

price_type

int

报价类型,该字段在返回时为柜台返回类型,不等价于下单传入的price_type,枚举值不一样功能一样,参见数据字典在新窗口打开

price

float

委托价格

traded_volume

int

成交数量

traded_price

float

成交均价

order_status

int

委托状态,参见数据字典在新窗口打开

status_msg

str

委托状态描述,如废单原因

strategy_name

str

策略名称

order_remark

str

委托备注

direction

int

多空方向,股票不适用;参见数据字典在新窗口打开

offset_flag

int

交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等;参见数据字典在新窗口打开

6.7 成交XtTrade

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

stock_code

str

证券代码

order_type

int

委托类型,参见数据字典在新窗口打开

traded_id

str

成交编号

traded_time

int

成交时间

traded_price

float

成交均价

traded_volume

int

成交数量

traded_amount

float

成交金额

order_id

int

订单编号

order_sysid

str

柜台合同编号

strategy_name

str

策略名称

order_remark

str

委托备注

direction

int

多空方向,股票不适用;参见数据字典在新窗口打开

offset_flag

int

交易操作,用此字段区分股票买卖,期货开、平仓,期权买卖等;参见数据字典在新窗口打开

6.8 持仓XtPosition

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

stock_code

str

证券代码

volume

int

持仓数量

can_use_volume

int

可用数量

open_price

float

开仓价

market_value

float

市值

frozen_volume

int

冻结数量

on_road_volume

int

在途股份

yesterday_volume

int

昨夜拥股

avg_price

float

成本价

direction

int

多空方向,股票不适用

6.9 异步下单委托反馈XtOrderResponse

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

order_id

int

订单编号

strategy_name

str

策略名称

order_remark

str

委托备注

seq

int

异步下单的请求序号

6.10 异步撤单委托反馈XtCancelOrderResponse

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

order_id

int

订单编号

order_sysid

str

柜台委托编号

cancel_result

int

撤单结果

seq

int

异步撤单的请求序号

6.11 下单失败错误XtOrderError

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

order_id

int

订单编号

error_id

int

下单失败错误码

error_msg

str

下单失败具体信息

strategy_name

str

策略名称

order_remark

str

委托备注

6.12 撤单失败错误XtCancelError

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

order_id

int

订单编号

market

int

交易市场 0:上海 1:深圳

order_sysid

str

柜台委托编号

error_id

int

下单失败错误码

error_msg

str

下单失败具体信息

6.13 账号信息XtAccountInfo

属性

类型

注释

account_type

int

账号类型,参见数据字典在新窗口打开

account_id

str

资金账号

broker_type

int

同 account_type

platform_id

int

平台号

account_classification

int

账号分类

login_status

int

账号状态,参见数据字典

关于看量化交易系统

关于上边提到的我正在开发的基于miniQMT的量化交易系统,目前已经开放数据下载、可视化、数据清洗模块,有需要的朋友可以关注公众号”看海的城堡”获取。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/1150958
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 23小时前
下一篇 9分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注