迅投实盘1:一个简单的下单程序,跑通python实盘全流程

博主使用迅投投研的程序开始要写实盘的代码了,这个系列的博客就是记录使用迅投的各种方法,一边学习一边记录。

迅投把python分为两个版本:

  1. 内置python:指的是使用迅投客户端,客户端可以新建python脚本写策略
  2. 原生python:使用xtquant包就可以通过本地python操作客户端执行策略

内置python依赖客户端编辑器且无法调试,因此这个系列博主尽可能的使用本地的python,在Pycharm中进行开发。

迅投官方知识库:https://dict.thinktrader.net/
xtquant官方说明文档:https://dict.thinktrader.net/nativeApi/start_now.html

下单的示例程序

程序逻辑说明

这里我们就执行一个最简单的操作,看是否打通了整个流程:

  1. 需要先安装好python环境,并且把xtquant的压缩包放到根目录,使用如下代码判断环境是否配置好
import time, datetime, sys from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback from xtquant.xttype import StockAccount from xtquant import xtconstant from loguru import logger # 一个日志模块,安装方式:pip install loguruimport pandas as pd # 常用数据分析工具,安装方式:pip install pandas
  1. 首先是一些很套路的写法,用于链接本地python与终端
# 步骤1. 初始化 path =r'E:\迅投极速交易终端睿智融科版\userdata'# 这个填"自己的终端安装路径\userdata" session_id =int(time.time())# 这个可以自定义,确保唯一即可 xt_trader = XtQuantTrader(path, session_id) account = StockAccount('xxxxx','STOCK')# 在终端中找到自己的股票账号
  1. 配置交易环境
    代码中下单等操作均为异步(迅投很擅长高频交易,所以建议从一开始就有异步下单的习惯)
classMyXtQuantTraderCallback(XtQuantTraderCallback):defon_disconnected(self):""" 连接断开 :return: """print(datetime.now(),'连接断开回调')defon_stock_order(self, order):""" 委托回报推送 :param order: XtOrder对象 :return: """print(datetime.now(),'委托回调 投资备注', order.order_remark)defon_stock_trade(self, trade):""" 成交变动推送 :param trade: XtTrade对象 :return: """print(datetime.now(),'成交回调', trade.order_remark,f"委托方向(48买 49卖) {trade.offset_flag} 成交价格 {trade.traded_price} 成交数量 {trade.traded_volume}")defon_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}")defon_cancel_error(self, cancel_error):""" 撤单失败推送 :param cancel_error: XtCancelError 对象 :return: """print(datetime.now(), sys._getframe().f_code.co_name)defon_order_stock_async_response(self, response):""" 异步下单回报推送 :param response: XtOrderResponse 对象 :return: """print(f"异步委托回调 投资备注: {response.order_remark}")defon_cancel_order_stock_async_response(self, response):""" :param response: XtCancelOrderResponse 对象 :return: """print(datetime.now(), sys._getframe().f_code.co_name)defon_account_status(self, status):""" :param response: XtAccountStatus 对象 :return: """print(datetime.now(), sys._getframe().f_code.co_name)# 步骤2.连接交易 trade_call_back = MyXtQuantTraderCallback() xt_trader.register_callback(trade_call_back) xt_trader.start()# 启动交易线程# 步骤3.连接交易主推 connect_result = xt_trader.connect() subscribe_result = xt_trader.subscribe(account)# 获取交易主推

其中MyXtQuantTraderCallback这个是实盘中,出现事件后的回调类,函数名都是固定的,注意不要修改。

更多细节请参考:XtQuant.Xttrade 交易模块

  1. 最后一步就是下单操作了

比如我们买入平安银行100股,按照最新价下单:

xt_trader.order_stock_async(account,'000001.SZ', xtconstant.STOCK_BUY,100, xtconstant.LATEST_PRICE,-1,'测试下单函数',"测试下单函数")

这个下单函数适用于股票期货期权等,实际上这是一个委托,详细说明如下:

deforder_stock_async(self, account, stock_code, order_type, order_volume, price_type, price, strategy_name='',order_remark=''):""" :param account: 证券账号 :param stock_code: 证券代码, 例如"600000.SH" :param order_type: 委托类型, 23:买, 24:卖 :param order_volume: 委托数量, 股票以'股'为单位, 债券以'张'为单位 :param price_type: 报价类型, 详见帮助手册 :param price: 报价价格, 如果price_type为指定价, 那price为指定的价格, 否则填0 :param strategy_name: 策略名称 :param order_remark: 委托备注 :return: 返回下单请求序号, 成功委托后的下单请求序号为大于0的正整数, 如果为-1表示委托失败 """

这里的所有字段都可以参考:委托 XtOrder

完整代码

import time, datetime, sys from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback from xtquant.xttype import StockAccount from xtquant import xtconstant from loguru import logger classMyXtQuantTraderCallback(XtQuantTraderCallback):defon_disconnected(self):""" 连接断开 :return: """print(datetime.now(),'连接断开回调')defon_stock_order(self, order):""" 委托回报推送 :param order: XtOrder对象 :return: """print(datetime.now(),'委托回调 投资备注', order.order_remark)defon_stock_trade(self, trade):""" 成交变动推送 :param trade: XtTrade对象 :return: """print(datetime.now(),'成交回调', trade.order_remark,f"委托方向(48买 49卖) {trade.offset_flag} 成交价格 {trade.traded_price} 成交数量 {trade.traded_volume}")defon_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}")defon_cancel_error(self, cancel_error):""" 撤单失败推送 :param cancel_error: XtCancelError 对象 :return: """print(datetime.now(), sys._getframe().f_code.co_name)defon_order_stock_async_response(self, response):""" 异步下单回报推送 :param response: XtOrderResponse 对象 :return: """print(f"异步委托回调 投资备注: {response.order_remark}")defon_cancel_order_stock_async_response(self, response):""" :param response: XtCancelOrderResponse 对象 :return: """print(datetime.now(), sys._getframe().f_code.co_name)defon_account_status(self, status):""" :param response: XtAccountStatus 对象 :return: """print(datetime.now(), sys._getframe().f_code.co_name)# 步骤1. 初始化 path =r'E:\迅投极速交易终端睿智融科版\userdata'# 这里写自己的迅投路径 session_id =int(time.time()) xt_trader = XtQuantTrader(path, session_id) account = StockAccount('xxxxxxx','STOCK')# 这里写自己的股票代码# 步骤2.连接交易 trade_call_back = MyXtQuantTraderCallback() xt_trader.register_callback(trade_call_back) xt_trader.start()# 启动交易线程# 步骤3.连接交易主推 connect_result = xt_trader.connect() subscribe_result = xt_trader.subscribe(account)# 获取交易主推# 执行下单! logger.debug("准备下单") xt_trader.order_stock_async(account,'000001.SZ', xtconstant.STOCK_BUY,100, xtconstant.LATEST_PRICE,-1,'测试下单函数',"测试下单函数") logger.success("下单完成")

执行完成后,就可以在终端的【交易】->【股票交易】中看到结果了,其中:

  1. 所有的委托都会在"任务列表"中展示,这是详细的说明委托的结果与当前成交进度
  2. 所有委托也会在"委托"这个界面中展示
  3. 成交的结果会显示在"成交"界面
  4. 当前的持仓会在"持仓"界面(有时候持仓界面来不及及时刷新,等一会即可)

Read more

安利一款超实用的前端可视化打印设计器:Vue Print Designer

安利一款超实用的前端可视化打印设计器:Vue Print Designer

做前端开发的朋友应该都懂,业务开发中遇到打印需求真的头大 —— 手写分页逻辑繁琐、不同框架适配麻烦、票据 / 快递单这类定制化打印场景不好实现,找个趁手的打印插件更是难上加难。最近发现了一款开源的可视化打印设计器Vue Print Designer,完美解决了这些痛点,不管是快速开发还是企业级定制化需求都能满足,今天就跟大家详细聊聊这款工具。 一、Vue Print Designer 是什么? Vue Print Designer 是一款面向业务表单、标签、票据、快递单等打印场景的可视化设计器,核心主打模板化、变量化设计,还提供了静默打印、云打印能力,同时支持 PDF / 图片 / Blob 等多种导出方式,完全能覆盖日常开发中的各类打印需求。 它不是简单的打印插件,而是一套完整的打印解决方案,从可视化设计模板,到参数配置、多端打印,再到定制化扩展,一站式搞定,而且项目还在持续更新,最新版本已经支持英寸、厘米作为单位,对国际化和精细化设计更友好了。 项目地址:https://gitee.com/

By Ne0inhk
我的算法修炼之路--5——专破“思维陷阱”,那些让你拍案叫绝的非常规秒解

我的算法修炼之路--5——专破“思维陷阱”,那些让你拍案叫绝的非常规秒解

💗博主介绍:计算机专业的一枚大学生 来自重庆 @燃于AC之乐✌专注于C++技术栈,算法,竞赛领域,技术学习和项目实战✌💗 💗根据博主的学习进度更新(可能不及时) 💗后续更新主要内容:C语言,数据结构,C++、linux(系统编程和网络编程)、MySQL、Redis、QT、Python、Git、爬虫、数据可视化、小程序、AI大模型接入,C++实战项目与学习分享。 👇🏻 精彩专栏 推荐订阅👇🏻 点击进入🌌作者专栏🌌: 算法画解 ✅ C++ ✅ 🌟算法相关题目点击即可进入实操🌟 感兴趣的可以先收藏起来,请多多支持,还有大家有相关问题都可以给我留言咨询,希望希望共同交流心得,一起进步,你我陪伴,学习路上不孤单! 文章目录 * 前言 * 题目清单 * 1.Metoer Shower(流星雨) * 2.

By Ne0inhk

Flutter 三方库 serial 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、稳定的 Web 串口通信与工业硬软连接实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 serial 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、稳定的 Web 串口通信与工业硬软连接实战 在鸿蒙(OpenHarmony)系统的工业平板、手持 PDA 及桌面协同场景中,如何通过 Web 容器直接操控外部硬件设备(如扫码枪、打印机、传感器)?serial 做为一个优秀的 window.navigator.serial API 的 Flutter 封装库,为鸿蒙开发者提供了跨平台的硬件底座。本文将深入探讨其在鸿蒙生态中的适配要点。 前言 什么是 Web Serial?它允许鸿蒙应用内的 Web 组件直接请求访问用户的串行设备。在 Flutter for OpenHarmony 的实际开发中,serial

By Ne0inhk
力扣--1411. 给 N x 3 网格图涂色的方案数

力扣--1411. 给 N x 3 网格图涂色的方案数

目录 前言: 题目: 题目分析: 代码一: 代码二: 代码一分析: 代码二分析(公式推导): 关键观察:每行只有两种模式 类型 1:ABA 型(首尾相同) 类型 2:ABC 型(三色全不同) 动态规划状态设计 推导转移关系(关键!) 结语: 前言: 这是力扣的一个题目,很经典!就是找不到规律和找到规律,写代码完全不是一个级别!希望这篇可以给大家参考,我刚开始做的时候也想找规律,但是没找到,没有理解到意思! 题目: 你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。 给你网格图的行数 n

By Ne0inhk