我的编程空间,编程开发者的网络收藏夹
学习永远不晚

[QMT]04-在QMT之外调用xtquant直接编写策略

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

[QMT]04-在QMT之外调用xtquant直接编写策略

背景

希望不用在QMT软件里面憋屈地写代码,想使用pychar、vscode、notepad++等IDE编写python代码,因为有代码提示、补全。这完全没问题!QMT简直是为个人量化交易者量身打造的神器,它支持以上想法。

前提

想在Python本地调用(只支持python 36\37\38),需要两个前提条件:

  1. 启动XtMiniQmt.exe,它存在于QMT安装目录下的bin.x64子目录中。

  1. 将xtquant库,从bin.x64\Lib\site-packages拷贝到python本地的Lib\site-packages中。比如这里我的安装路径是G:\Anaconda3\Lib\site-packages\xtquant

xtquant简介

xtquant是QMT官方内置的XtMiniQmt极简客户端对应的Python接口,目前支持Python的版本为3.6~3.8,可支持历史行情下载、实时数据订阅、外部数据访问、普通账户和两融账户交易(需开通相关权限),对量化交易支持的比较完善,跟极速策略交易系统相比最主要的优势是简洁、灵活,不局限在bar、kline的事件触发,可以容易地集成多种数据源进行综合分析、判断。

QMT内置的Python版本为3.6,第一次使用的话需手动下载相关的库,或直接拷贝已经下载好的xtquant库。

XtMiniQmt.exe存在于QMT安装目录下的bin.x64子目录中, xtquant库默认安装在bin.x64\Lib\site-packages中。

内置的Python版本较老,对于一些较新的库支持有限,因此,如果我们想在自定义的Python中调用,如Python3.8,只需将xtquant拷贝到我们自己python安装目录的Lib\site-packages中便可,这里我的安装路径是 C:\ProgramData\Anaconda3\Lib\site-packages\xtquant。

QMT这个东东基本是由两部分组成的:QMT交易终端(看盘界面 + 策略界面) + 量化库(xtquant)

XtQuant:基于迅投MiniQMT衍生出来的一套完善的Python策略运行框架,以Python库的形式提供策略交易所需要的:行情 + 交易 API接口。

它封装了策略交易所需要的Python API接口,可以和MiniQMT客户端交互,报单、撤单、查资产、查委托、查成交、查持仓以及收到资金、委托、成交和持仓等变动的主推消息。

xtquant主要包含两大块:

  • xtdata:xtdata提供和MiniQmt的交互接口,本质是和MiniQmt建立连接,由MiniQmt处理行情数据请求,再把结果回传返回到python层。需要注意的是这个模块的使用目前并不需要登录,因此只要安装了QMT,就可以无门槛的使用其提供的数据服务。

  • xttrader:xttrader是基于迅投MiniQMT衍生出来的一套完善的Python策略运行框架,对外以Python库的形式提供策略交易所需要的交易相关的API接口。该接口需开通A股实盘版权限方可登录使用。

启动XtMiniQmt客户端

启动MiniQMT客户端。通常有两种方式,一种是直接启动极简QMT客户端XtMiniQmt.exe:

另一种是启动QMT量化交易终端XtItClient.exe,在登录界面选择极简模式:

部分券商不支持策略的云服务器运行,但接收行情数据不受影响。设置好客户端后,便可在ipython、jupyter等环境中调试数据和策略了。

xttrader验证Demo

需要调整的参数:①:77行的path变量需要改为本地客户端路径 ②:84行的资金账号需要调整为自身资金账号

注意:本策略只用于提供策略写法及参考,若您直接进行实盘下单,造成损失本博主概不负担责任。

# 创建策略#coding=utf-8from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallbackfrom xtquant.xttype import StockAccountfrom xtquant import xtconstantclass MyXtQuantTraderCallback(XtQuantTraderCallback):    def on_disconnected(self):        """        连接断开        :return:        """        print("connection lost")    def on_stock_order(self, order):        """        委托回报推送        :param order: XtOrder对象        :return:        """        print("on order callback:")        print(order.stock_code, order.order_status, order.order_sysid)    def on_stock_asset(self, asset):        """        资金变动推送        :param asset: XtAsset对象        :return:        """        print("on asset callback")        print(asset.account_id, asset.cash, asset.total_asset)    def on_stock_trade(self, trade):        """        成交变动推送        :param trade: XtTrade对象        :return:        """        print("on trade callback")        print(trade.account_id, trade.stock_code, trade.order_id)    def on_stock_position(self, position):        """        持仓变动推送        :param position: XtPosition对象        :return:        """        print("on position callback")        print(position.stock_code, position.volume)    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)        def on_cancel_error(self, cancel_error):        """        撤单失败推送        :param cancel_error: XtCancelError 对象        :return:        """        print("on cancel_error callback")        print(cancel_error.order_id, cancel_error.error_id,        cancel_error.error_msg)    def on_order_stock_async_response(self, response):        """        异步下单回报推送        :param response: XtOrderResponse 对象        :return:        """        print("on_order_stock_async_response")        print(response.account_id, response.order_id, response.seq)    if __name__ == "__main__":    print("demo test")    # path为mini qmt客户端安装目录下userdata_mini路径    path =r'输入你本地的userdata_mini目录'    # session_id为会话编号,策略使用方对于不同的Python策略需要使用不同的会话编号    session_id = 123456    xt_trader = XtQuantTrader(path, session_id)        # 创建资金账号为1000000365的证券账号对象    #acc = StockAccount('1000000365')    acc = StockAccount('输入你的QMT资金账号')    # 创建交易回调类对象,并声明接收回调    callback = MyXtQuantTraderCallback()    xt_trader.register_callback(callback)        # 启动交易线程    xt_trader.start()        # 建立交易连接,返回0表示连接成功    connect_result = xt_trader.connect()    print(connect_result)        # 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功    subscribe_result = xt_trader.subscribe(acc)    print(subscribe_result)    #stock_code = '600000.SH'    stock_code = '000768.SZ'    # 使用指定价下单,接口返回订单编号,后续可以用于撤单操作以及查询委托状态    print("order using the fix price:")    fix_result_order_id = xt_trader.order_stock(acc, stock_code,    xtconstant.STOCK_BUY, 200, xtconstant.FIX_PRICE, 10.5, 'strategy_name',    'remark')    print(fix_result_order_id)        # 使用订单编号撤单    print("cancel order:")    cancel_order_result = xt_trader.cancel_order_stock(acc, fix_result_order_id)    print(cancel_order_result)        # 使用异步下单接口,接口返回下单请求序号seq,seq可以和on_order_stock_async_response 的委托反馈response对应起来    print("order using async api:")    async_seq = xt_trader.order_stock(acc, stock_code, xtconstant.STOCK_BUY,    200, xtconstant.FIX_PRICE, 10.5, 'strategy_name', 'remark')    print(async_seq)    # 查询证券资产    print("query asset:")    asset = xt_trader.query_stock_asset(acc)    if asset:        print("asset:")        print("cash {0}".format(asset.cash))    # 根据订单编号查询委托    print("query order:")    order = xt_trader.query_stock_order(acc, fix_result_order_id)    if order:        print("order:")        print("order {0}".format(order.order_id))    # 查询当日所有的委托    print("query orders:")    orders = xt_trader.query_stock_orders(acc)    print("orders:", len(orders))    if len(orders) != 0:        print("last order:")        print("{0} {1} {2}".format(orders[-1].stock_code,        orders[-1].order_volume, orders[-1].price))        # 查询当日所有的成交    print("query trade:")    trades = xt_trader.query_stock_trades(acc)    print("trades:", len(trades))    if len(trades) != 0:        print("last trade:")        print("{0} {1} {2}".format(trades[-1].stock_code,        trades[-1].traded_volume, trades[-1].traded_price))    # 查询当日所有的持仓    print("query positions:")    positions = xt_trader.query_stock_positions(acc)    print("positions:", len(positions))        if len(positions) != 0:        print("last position:")        print("{0} {1} {2}".format(positions[-1].account_id,        positions[-1].stock_code, positions[-1].volume))        # 根据股票代码查询对应持仓    print("query position:")    position = xt_trader.query_stock_position(acc, stock_code)    if position:        print("position:")        print("{0} {1} {2}".format(position.account_id, position.stock_code,        position.volume))    # 阻塞线程,接收交易推送    xt_trader.run_forever()

运行结果

来源地址:https://blog.csdn.net/liuyukuan/article/details/128749621

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

[QMT]04-在QMT之外调用xtquant直接编写策略

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录