深入分析MiniQMT实时订阅延迟测试代码

摘要

本文将深入分析两段MiniQMT平台的Python代码,这些代码用于测试实时数据订阅的延迟情况。我们将详细探讨代码的结构、关键功能以及它们在实时交易策略中的应用,并通过代码示例展示其工作原理。

背景介绍

MiniQMT是一个量化交易平台,支持股票、期货等多种金融产品的交易。它提供了丰富的API,允许开发者编写自定义的交易策略。实时数据订阅是量化交易中的关键环节,因为数据的延迟可能直接影响交易决策的准确性。

MiniQMT具体开通方法及要求,可以参看《QMT开通规则分享》

代码分析

订阅延迟测试代码一:subscribe_quote_callback.py

功能:该代码段通过设置订阅回调函数,实时接收股票的报价数据,并计算数据到达的延迟。

关键点

  1. 订阅设置

    xtdata.subscribe_quote(stock_code=stock, period=period, count=1, callback=on_data)
    

    这行代码订阅了指定股票的实时报价数据,period参数指定了数据的周期,count参数指定了订阅的数据条数,callback参数指定了接收数据时调用的回调函数。

  2. 回调函数

    def on_data(res, stock=stock):if not ready:returndff = calculate_seconds_difference(res[stock][0]['time'])if period != 'tick':close_value = res[stock][0]['close']else:close_value = res[stock][0]['lastPrice']logging.info(f'时间戳:{res[stock][0]["time"]}, 股票代码:{stock}, 当前价格:{close_value}, 延迟:{dff}')
    

    回调函数on_data在接收到数据时被调用,计算当前时间与数据时间戳的差值(dff),从而得到延迟,并记录相关信息。

  3. 进度条显示

    def update_progress(progress):bar_length = 40  # 进度条长度block = int(round(bar_length * progress))text = f"\r[{'#' * block + '-' * (bar_length - block)}] {progress * 100:.2f}%"if progress < 1:print(text, end='', flush=True)else:print(text, flush=True)
    

    update_progress函数用于显示订阅进度,通过控制台输出进度条。

  4. 延迟计算

    def calculate_seconds_difference(specified_time):current_time = datetime.now().timestamp()time_difference =  current_time - (specified_time / 1000)return time_difference
    

    calculate_seconds_difference函数计算当前系统时间与数据时间戳的差值,并返回差值的秒数。

订阅延迟测试代码二:subscribe_quote_get.py

功能:与第一个代码段类似,但使用xtdata.get_market_data_ex函数主动获取数据,并通过调度器定期执行策略。

关键点

  1. 订阅设置

    xtdata.subscribe_quote(stock_code=stock, period=period, count=1)
    

    这行代码与第一个代码段类似,订阅了指定股票的实时报价数据。

  2. 数据获取

    def strategy(stock_list):logging.info('运行策略')scheduler = sched.scheduler(time.time, time.sleep)def task():scheduler.enter(interval, 1, task)res = xtdata.get_market_data_ex(stock_list=stock_list, period=period, count=1)for key in res.keys():if not res[key].empty:dff = calculate_seconds_difference(res[key].index[-1])if period != 'tick':close_value = res[key]['close'].iloc[-1]else:close_value = res[key]['lastPrice'].iloc[-1]if dff > 3:logging.info(f'时间戳:{res[key].index[-1]}, 股票代码:{key}, 当前价格:{close_value}, 延迟:{dff}')scheduler.enter(interval, 1, task)scheduler.run()
    

    strategy函数通过调度器定期执行数据获取任务,获取最新的市场数据,并计算延迟。

  3. 进度条显示

    def update_progress(progress):bar_length = 40  # 进度条长度block = int(round(bar_length * progress))text = f"\r[{'#' * block + '-' * (bar_length - block)}] {progress * 100:.2f}%"if progress < 1:print(text, end='', flush=True)else:print(text, flush=True)
    

    进度条显示功能与第一个代码段相同。

  4. 延迟计算

    def calculate_seconds_difference(time_str):specified_time = datetime.strptime(time_str, "%Y%m%d%H%M%S")current_time = datetime.now()time_difference =  current_time - specified_timeseconds_difference = time_difference.total_seconds()return seconds_difference
    

    calculate_seconds_difference函数计算当前系统时间与数据时间戳的差值,并返回差值的秒数。

应用场景

这些代码可以用于量化交易策略的开发,特别是在需要评估数据延迟对交易决策影响的场景。通过这些测试,开发者可以了解数据订阅的实时性,并据此优化交易策略。

结论

MiniQMT提供的实时数据订阅功能对于量化交易至关重要。通过分析这两段代码,我们可以看到不同的数据接收和处理方式对延迟测试的影响。开发者可以根据实际需求选择合适的方法来评估和优化交易策略。

源码获取

搜索知识星球:AI量化投资

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/386159.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS实现文本溢出处理

1.单行文本溢出 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

总结——TI_音频信号分析仪

一、简介 设备&#xff1a;MSPM0G3507 库&#xff1a;CMSIS-DSP TI 数据分析&#xff1a;FFT 软件&#xff1a;CCS CLion MATLAB 目的&#xff1a;对音频信号进行采样&#xff08;滤波偏置处理&#xff09;&#xff0c;通过FFT获取信号的频率成分&am…

【Vue3】watchEffect

【Vue3】watchEffect 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文…

了解Selenium中的WebElement

Selenium中到处都使用WebElement来执行各种操作。什么是WebElement&#xff1f;这篇文章将详细讨论WebElement。 Selenium中的WebElement是一个表示网站HTML元素的Java接口。HTML元素包含一个开始标记和一个结束标记&#xff0c;内容位于这两个标记之间。 HTML元素的重命名 …

C#插件 调用存储过程(输出参数类型)

存储过程 CREATE PROCEDURE [dbo].[GetSum]num1 INT,num2 INT,result INT OUTPUT AS BEGINselect result num1 num2 END C#代码 using Kingdee.BOS; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Util; using System; using System.…

放大电路总结

补充: 只有直流移动时才有Rbe动态等效电阻 从RsUs看进去,实际上不管接了什么东西都能够看成是一个Ri(输入电阻) Ri Ui/Ii Rb//Rbe Ui/Us Ri/(RiRs) Aus (Uo/Ui)*(Ui/Us) Au *Ri/(RiRs) 当前面是一个电压源的信号 我们就需要输入电阻更大 Ro--->输出电阻--->将…

基于FFmpeg和SDL的音视频解码播放的实现过程与相关细节

目录 1、视频播放器原理 2、FFMPEG解码 2.1 FFMPEG库 2.2、数据类型 2.3、解码 2.3.1、接口函数 2.3.2、解码流程 3、SDL播放 3.1、接口函数 3.2、视频播放 3.3、音频播放 4、音视频的同步 4.1、获取音频的播放时间戳 4.2、获取当前视频帧时间戳 4.3、获取视…

MongoDB教程(二十三):关于MongoDB自增机制

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、MongoD…

加密货币赋能跨境电商:PayPal供应链金融服务如何引领行业新趋势

跨境电商行业近年来呈现出爆发式增长&#xff0c;随着全球化贸易壁垒的降低和数字经济的快速发展&#xff0c;越来越多的商家和消费者跨越国界进行交易。根据eMarketer的数据&#xff0c;全球跨境电商交易额在2023年已超过4万亿美元&#xff0c;并预计在未来几年内仍将保持两位…

《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

ProxmoxPVE虚拟化平台--安装PVE虚拟机

Proxmox 虚拟机 Proxmox是一个基于Debian Linux和KVM的虚拟化平台&#xff0c;‌它提供了虚拟化的环境&#xff0c;‌允许用户在同一台物理机上运行多个虚拟机。‌Proxmox虚拟环境&#xff08;‌PVE&#xff09;‌是一个开源项目&#xff0c;‌由Proxmox Server Solutions Gmb…

重生之我当程序猿外包

第一章 个人介绍与收入历程 我出生于1999年&#xff0c;在大四下学期进入了一家互联网公司实习。当时的实习工资是3500元&#xff0c;公司还提供住宿。作为一名实习生&#xff0c;这个工资足够支付生活开销&#xff0c;每个月还能给父母转1000元&#xff0c;自己留2500元用来吃…

科普文:万字详解Kafka基本原理和应用

一、Kafka 简介 1. 消息引擎系统ABC Apache Kafka是一款开源的消息引擎系统&#xff0c;也是一个分布式流处理平台。除此之外&#xff0c;Kafka还能够被用作分布式存储系统&#xff08;极少&#xff09;。 A. 常见的两种消息引擎系统传输协议&#xff08;即用什么方式把消息…

探索 Milvus 存储系统:如何评估和优化 Milvus 存储性能

欢迎来到探索 Milvus 系列。Milvus 是一款支持水平扩展和具备出色性能的开源向量数据库。Milvus 的核心是其强大的存储系统&#xff0c;是数据持久化和存储的关键基础。该系统包括几个关键组成部分&#xff1a;元数据存储&#xff08;meta storage&#xff09;、消息存储&#…

LexLIP——图片搜索中的多模态稀疏化召回方法

LexLIP——图片搜索中的多模态稀疏化召回方法 FesianXu 20240728 at WeChat Search Team 前言 最近笔者在回顾&笔记一些老论文&#xff0c;准备整理下之前看的一篇论文LexLIP&#xff0c;其很适合在真实的图片搜索业务场景中落地&#xff0c;希望笔记能给读者带来启发。如…

深度学习趋同性的量化探索:以多模态学习与联合嵌入为例

深度学习趋同性的量化探索&#xff1a;以多模态学习与联合嵌入为例 参考文献 据说是2024年最好的人工智能论文&#xff0c;是否有划时代的意义&#xff1f; [2405.07987] The Platonic Representation Hypothesis (arxiv.org) ​arxiv.org/abs/2405.07987 趋同性的量化表达 …

【2024蓝桥杯/C++/A组/零食采购】

题目 方法 最近公共祖先lca的倍增算法binary lifting 深度优先搜索 二进制模拟 代码 #include<bits/stdc.h> using namespace std;// 定义常量N const int N 1e510;// 边的集合 vector<int> edge[N]; // 每个节点对应的数值 int num[N]; // 父节点数组&#x…

VS code 与Pycharm 的使用区别(个人)

注明&#xff1a;本文从这开始VS code简称VS&#xff0c;Pycharm简称PY 安装包大小 VS:PY 1:0 安装后实际大小 vs py VS:PY 2:0 界面ui&#xff08;简易&#xff09; vs py VS:PY 2:1 启动速度 VS:PY 3:1 注&#xff1a;以上为个人测评&#xff0c;无特殊意图

DHCP笔记

DHCP---动态主机配置协议 作用&#xff1a;为终端动态提供IP地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;DNS网址等信息 具体流程 报文抓包 在DHCP服务器分配iP地址之间会进行广播发送arp报文&#xff0c;接收IP地址的设备也会发送&#xff0c;防止其他设备已经使用…

Google Test 学习笔记(简称GTest)

文章目录 一、介绍1.1 介绍1.2 教程 二、使用2.1 基本使用2.1.1 安装GTest &#xff08;下载和编译&#xff09;2.1.2 编写测试2.1.3 运行测试2.1.4 高级特性2.1.5 调试和分析 2.2 源码自带测试用例2.3 TEST 使用2.3.1 TestCase的介绍2.3.2 TEST宏demo1demo2 2.3.3 TEST_F宏2.3…