【大麦小米学量化】使用xtquant调用迅投MiniQMT客户端定时操作逆回购,再也不担心忘了赚零花钱了(含完整源代码)

本文主要是介绍【大麦小米学量化】使用xtquant调用迅投MiniQMT客户端定时操作逆回购,再也不担心忘了赚零花钱了(含完整源代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、逆回购是什么?
  • 二、讯投XtQuant是什么?
      • XtQuant运行依赖环境
      • XtQuant运行逻辑
  • 三、使用xtquant进行逆回购(含完整源代码)
    • 1.深市逆回购
    • 2.深市逆回购完整代码
  • 总结


前言

前面很多人提到逆回购,但是经常一忙就忘了收盘后下单逆回购,白给的肉又飞了。这里我们使用xtquant玩玩逆回购,代码简单,复制到本地,配置好即可运行,收益无负担,送你的钱不要白不要。

一、逆回购是什么?

1、什么是逆回购?
简单来讲,逆回购从本质上讲是一种短期贷款,就是你把钱借给别人,获得固定利息;别人用债券(国债或企业债)作抵押,到期还本付息。

2、最低参与金额是多少?
上海市场国债逆回购:交易数量为10万或10万的整数倍;深圳市场债券逆回购:交易数量为1000元或其整数倍;

3、逆回购交易是否安全?
逆回购交易一般没有风险,因为逆回购方直接针对的是中国结算公司这样的第三方。如果债券质押方到期不能按时还款,结算公司会先垫付资金,然后通过罚款和处置质押券等方式向融资方追诉。
与股票交易不同的是,逆回购交易在初始交易时收益的大小即已确定,抵押债券价格的涨跌、市场利率水平的波动与逆回购交易的收益无关。

4、逆回购交易适合什么类型的客户?
逆回购交易适合风险承受能力较低的个人以及流动资金充裕且有资金管理需求的机构。

二、讯投XtQuant是什么?

XtQuant是基于迅投MiniQMT衍生出来的一套完善的Python策略运行框架,对外以Python库的形式提供策略交易所需要的行情和交易相关的API接口。使用讯投XtQuant首先需要选择支持开通QMT的券商开户,有些开通了QMT,但不支持MiniQMT。需要提前问好。

XtQuant运行依赖环境

XtQuant目前提供的库包括64位Python3.6----3.11版本,不同版本的python导入时会自动切换。 在运行使用XtQuant的程序前需要先启动MiniQMT客户端。

XtQuant运行逻辑

Xtdata作为行情模块,本模块旨在提供精简直接的数据满足量化交易者的数据需求,主要提供行情数据(历史和实时的K线和分笔)、财务数据、合约基础信息、板块和行业分类信息等通用的行情数据。

Xttrader作为交易模块,封装了策略交易所需要的Python API接口,可以和MiniQMT客户端交互进行报单、撤单、查询资产、查询委托、查询成交、查询持仓以及接收资金、委托、成交和持仓等变动的主推消息。
更多详情可查询讯投知识库:http://docs.thinktrader.net/pages/040ff7/

  1. 首先需要下载xtquant库,并将其解压到一个目录,后面会用到。
    http://dict.thinktrader.net/nativeApi/download_xtquant.html

三、使用xtquant进行逆回购(含完整源代码)

下面的代码基于以上2个条件:
1、启动MiniQMT客户端
2、下载xtquant库

如果以上环境已准备到位,下面我们说如何来实现交易。因为逆回购的交易基本没有风险,且可以在股市交易期间交易,还可以在15:00-15:30进行交易,为了最大化发挥资金优势,一般都会将股市剩余资金在休市后来购买逆回购以增加收益(虽然没多钱,但蚊子腿也是肉不是)。

1.深市逆回购

笔者一般选择深市开展逆回购(上海也有,需要自己计算下单手数),由于逆回购代码固定,这里默认选深市1天逆回购,代码:“131810.SZ”。下单手数需要进行计算,深圳市场债券逆回购交易数量为1000元或其整数倍,所以这里查询可用金额后,直接取模计算下单手数,并使用异步接口进行下单。

一般逆回购量都比较大,个人投资者基本不用考虑成交不了,需要撤单的问题,一般盘口下单立即就可以成交。所以这里只报单即可。
特别声明:不放心的可用去观察下成交情况,或者自行完善代码,笔者不对成交和收益负责!

def nihuigou(xt_trader,acc,symbol="131810.SZ"):A.asset = xt_trader.query_stock_asset(acc)if A.asset.cash >1000:vol = int((A.asset.cash//1000)*10)async_seq = xt_trader.order_stock_async(acc,symbol,xtconstant.STOCK_SELL,vol,xtconstant.LATEST_PRICE,9.99,strategy_name='nihuigou',order_remark='nihuigou卖出')print(f'nihuigou下单:async_seq({async_seq})卖出逆回购:{vol}手')else:print("nihuigou下单:逆回购金额不足")

2.深市逆回购完整代码

#coding:utf-8import sys
import time# 每个调用工具库的文件均添加以下语句,即可实现随处调用。
sys.path.append(r"D:\gszqqmt\bin.x64\Lib\site-packages")#xtquant所在目录from xtquant import xtdata
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant# 创建一个空对象,方便快速引用。持仓数据(用A.代替)
class a():pass
A = a()def nihuigou(xt_trader,acc,symbol="131810.SZ"):A.asset = xt_trader.query_stock_asset(acc)if A.asset.cash >1000:vol = int((A.asset.cash//1000)*10)async_seq = xt_trader.order_stock_async(acc,symbol,xtconstant.STOCK_SELL,vol,xtconstant.LATEST_PRICE,9.99,strategy_name='nihuigou',order_remark='nihuigou卖出')print(f'nihuigou下单:async_seq({async_seq})卖出逆回购:{vol}手')else:print("nihuigou下单:逆回购金额不足")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)if __name__ == '__main__':print("启动xtquant实盘交易-逆回购")#指定客户端所在路径path = r'D:\gszqqmt\userdata_mini'# 生成session id 整数类型 同时运行的策略不能重复session_id = int(time.time())xt_trader = XtQuantTrader(path, session_id)# 开启主动请求接口的专用线程 开启后在on_stock_xxx回调函数里调用XtQuantTrader.query_xxx函数不会卡住回调线程,但是查询和推送的数据在时序上会变得不确定# 详见: http://docs.thinktrader.net/vip/pages/ee0e9b/#开启主动请求接口的专用线程# xt_trader.set_relaxed_response_order_enabled(True)# 创建资金账号为 xxxxx 的证券账号对象acc = StockAccount('xxxxx ', 'STOCK')# 创建交易回调类对象,并声明接收回调callback = MyXtQuantTraderCallback()xt_trader.register_callback(callback)# 启动交易线程xt_trader.start()# 建立交易连接,返回0表示连接成功connect_result = xt_trader.connect()print('建立交易连接,返回0表示连接成功', connect_result)# 对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功subscribe_result = xt_trader.subscribe(acc)print('对交易回调进行订阅,订阅后可以收到交易主推,返回0表示订阅成功', subscribe_result)A.asset = xt_trader.query_stock_asset(acc)print('\n持仓市值:',A.asset.market_value,'\n总资金:',A.asset.total_asset,'\n持仓占比:',round(A.asset.market_value/A.asset.total_asset,2)*100,'%','\n逆回购可用资金:',A.asset.cash)  while '150000' <= time.strftime('%H%M%S') <= '153000':nihuigou(xt_trader,acc,symbol="131810.SZ");else:print('还未收盘,待收盘后操作');time.sleep(60)

总结

前期文章:如何优雅地调教QMT量化平台编写量化策略(使用notepad++、pycharm、vscode等外部IDE编写量化交易代码) 抛出了mpython的秘密,当时MiniQMT并不为人知晓。此篇文章也算是对上文的承接。目前官方文档已经很详尽了,可以查询讯投知识库:http://docs.thinktrader.net/pages/040ff7/

使用xtquant可以不受QMT运行环境(尤其是Python3.6.8版本)的限制,可以充分发挥本地Python的性能,也可以方便的调用第三方库。

我们这里小试牛刀,其实还有更多玩法。视评论情况,后续给大家陆续解锁。

感觉有用就点个赞,发个评论再走!让更多人可以看到!

这篇关于【大麦小米学量化】使用xtquant调用迅投MiniQMT客户端定时操作逆回购,再也不担心忘了赚零花钱了(含完整源代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/507626

相关文章

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示