当前位置: 首页 > news >正文

程序化交易(二)level2行情数据源接入

WEBSOCKET行情接入

行情在线测试 websocket行情接口

交易在线测试 在线交易接口

官方文档地址 行情交易接口用户文档

分配服务器

注意:每次分配的服务器地址会发生变化,连接服务前,请务必调用该接口获取最新的服务器地址。

获取服务器:

http://jvQuant.com/server?market=ab&type=websocket&token=<token>

Copy

接口参数:

#参数名类型描述
1marketstring市场标志,沪深为ab
2typestring接口类别,行情类别为websocket
3tokenstringjvQuant token

接口返回:

#参数名类型描述
1codestring请求状态码
2serverstring分配服务器地址及端口号

返回示例:

{"code": "0","server": "xx.xx.x.xx:xxxx/xxx"
}

Copy

CODE规范

jvQuant支持沪深主板、科创板、创业板,股票以及可转债行情,提供level1和level2数据推送。

订阅代码由行情标志证券代码组成,用分隔符"_"连接。

如:

lv1_600519,代表贵州茅台level1行情

lv2_127063,代表贵轮转债level2行情

#行情标志类型描述
1lv1stringlevel1行情
2lv2stringlevel2行情

连接登录

使用分配的服务器地址,通过websokcet协议连接服务器。

websocket接口地址:

ws://xx.xx.x.xx:xxxx/xxx?token=<token>

Copy

订阅行情

创建websocket连接后,您可以输入以下指令进行行情订阅:

#指令参数描述
1addstring增加订阅code
2delstring删除订阅code
3allstring覆盖全部code
4liststring查看全部订阅code

指令后接code参数,用分隔符"="连接,多个code用分隔符","分隔。

例:

add=lv1_600519,lv2_127063 ,表示增加订阅lv1_600519,lv2_127063行情。

del=lv1_600519,lv2_127063 ,表示删除订阅lv1_600519,lv2_127063行情。

all=lv1_600519 ,表示覆盖全部订阅code。

all= ,后接参数为空,表示删除全部订阅code。

list ,无需参数,表示查看全部订阅code。

解析行情

为提高数据传输速率,行情推送采用二进制方式传输,请在接收端解压缩为字符串。

level1

level1行情推送数据以换行符"\n"为分隔,每一行以lv1_xxxxxx=为开头,代表该类别code对应的行情。

lv1每笔交易数据字段以","为分隔符,定义如下:

推送时间,证券名称,最新价格,涨幅,成交量,成交额,买五档[挂单数量,挂单价格],卖五档[挂单数量,挂单价格]

leve1推送数据包格式如下:

lv1_证券代码1=推送时间,证券名称,最新价格,涨幅,成交量,成交额,买五档[挂单数量,挂单价格],卖五档[挂单数量,挂单价格]... lv1_证券代码2=推送时间,证券名称,最新价格,涨幅,成交量,成交额,买五档[挂单数量,挂单价格],卖五档[挂单数量,挂单价格]...

level2

level2行情推送数据以换行符"\n"为分隔,每一行以lv2_xxxxxx=为开头,代表该类别code对应的行情。

同一时刻会存在多笔交易,以"|"为分隔符。

lv2每笔交易数据字段以","为分隔符,定义如下:

成交时间(毫秒),成交编号,成交价格,成交数量/(股)

推送数据包格式如下:

lv2_证券代码1=成交时间1,成交编号1,成交价格1,成交数量1|成交编号2,成交时间2,成交价格2,成交数量2... lv2_证券代码2=成交时间1,成交编号1,成交价格1,成交数量1|成交编号2,成交时间2,成交价格2,成交数量2...

在线测试

行情接入示例

PYTHON

#!python3
# -*- coding:utf-8 -*-
import time
import websocket
import zlib# 发送订阅
def on_open(ws):ws.send("all=lv2_600519,lv1_000001")# 接收推送
def on_message(ws, message, type, flag):# 命令返回文本消息if type == websocket.ABNF.OPCODE_TEXT:print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Text响应:", message)print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Text响应:", message)# 行情推送压缩二进制消息,在此解压缩if type == websocket.ABNF.OPCODE_BINARY:rb = zlib.decompress(message, -zlib.MAX_WBITS)print(time.strftime('%H:%M:%S', time.localtime(time.time())), "Binary响应:", rb.decode("utf-8"))def on_error(ws, error):print(error)def on_close(ws, code, msg):print(time.strftime('%H:%M:%S', time.localtime(time.time())), "连接已断开")wsUrl = "ws://<服务器地址>?token=<jvQuant token>"
ws = websocket.WebSocketApp(wsUrl,on_open=on_open,on_data=on_message,on_error=on_error,on_close=on_close)
ws.run_forever()

Copy

GOLANG

package mainimport ("bytes""compress/flate""github.com/gorilla/websocket""log""time"
)func main() {//连接地址wsUrl := "ws://<服务器地址>?token=<jvQuant token>"conn, _, err := websocket.DefaultDialer.Dial(wsUrl, nil)if err != nil {log.Fatalln("连接错误:", err)}//接收协程go func() {receive(conn)}()//发送订阅cmd := "all=lv2_600519,lv1_000001"err = conn.WriteMessage(websocket.TextMessage, []byte(cmd))if err != nil {log.Fatalln("发送指令错误:", err)}log.Println("发送指令成功,等待接收")for {time.Sleep(time.Second)}
}func receive(conn *websocket.Conn) {for {//阻塞接收messageType, rb, err := conn.ReadMessage()if err != nil {log.Fatalln("接收错误:", err)return}//文本消息if messageType == websocket.TextMessage {log.Println("Text响应:", string(rb))}//二进制消息if messageType == websocket.BinaryMessage {unZipByte := DeCompress(rb)log.Println("Binary推送:", string(unZipByte))}}
}//解压方法
func DeCompress(b []byte) []byte {var buffer bytes.Bufferbuffer.Write([]byte(b))reader := flate.NewReader(&buffer)var result bytes.Bufferresult.ReadFrom(reader)reader.Close()return result.Bytes()
}

相关文章:

程序化交易(二)level2行情数据源接入

WEBSOCKET行情接入 行情在线测试 websocket行情接口 交易在线测试 在线交易接口 官方文档地址 行情交易接口用户文档 分配服务器 注意&#xff1a;每次分配的服务器地址会发生变化&#xff0c;连接服务前&#xff0c;请务必调用该接口获取最新的服务器地址。 获取服务器:…...

4.6 static修饰符

static是一个修饰符&#xff0c;用于修饰类的成员属性和成员方法&#xff0c;还可以编写static代码块来优化程序性能。 1. static修饰属性 在Java程序中使用static修饰属性&#xff0c;则该属性称为静态属性&#xff08;也称全局属性&#xff09;&#xff0c;静态属性可以使用…...

C++头文件定义变量

1.在进行头文件学习时&#xff0c;犯了不少错误&#xff0c;记录一下&#xff0c;先贴代码. .h头文件 #ifndef MY_FIRST_H_ #define MY_FIRST_H_struct Person {std::string name;int age;char8_t gender; };//需要使用extern来声明,否则在多个文件中引入该头文件会出现重定义…...

[蓝桥杯-610]分数

题面 解答 这一题如果不知道数论结论的话&#xff0c;做这个题会有两种天壤之别的体验 此题包含以下两个数论知识 1. 2^02^12^2...2^(n-1)2^n-1 2. 较大的数如果比较小的数的两倍大1或者小1&#xff0c;则两者互质 所以答案就是2^n-1/2^(n-1) 标程1 我的初次解答 #in…...

Vue指令大全:深入探索Vue提供的强大指令功能

目录 v-bind指令 v-on指令 v-if和v-show指令 v-for指令 自定义指令 其他常用指令 总结 Vue.js是一款流行的JavaScript框架&#xff0c;具备丰富的指令系统。Vue指令允许开发者直接在模板中添加特殊属性&#xff0c;以实现DOM操作、事件绑定、样式控制等功能。在本文中&a…...

x210项目重新回顾之十七升级到linux4.19.114 +buildroot2018再讨论

代码参考https://github.com/colourfate/x210_bsp/ 他的是linux_4.10(dtb为 s5pv210-x210..dtb)我打算用linux4.19.114(dtb为 s5pv210-smdkv210.dtb) &#xff0c;所以修改build.sh ------------------------------------------------------------------------------ 5 M…...

shell_56.Linux永久重定向

永久重定向 1.脚本中有大量数据需要重定向&#xff0c;那么逐条重定向所有的 echo 语句会很烦琐。 这时可以用 exec 命令&#xff0c;它会告诉 shell 在脚本执行期间重定向某个特定文件描述符&#xff1a; $ cat test10 #!/bin/bash # redirecting all output to a file ex…...

CN考研真题知识点二轮归纳(1)

本轮开始更新真题中涉及过的知识点&#xff0c;总共不到20年的真题&#xff0c;大致会出5-10期&#xff0c;尽可能详细的讲解并罗列不重复的知识点~ 目录 1.三类IP地址网络号的取值范围 2.Socket的内容 3.邮件系统中向服务器获取邮件所用到的协议 4.RIP 5.DNS 6.CSMA/CD…...

hadoop使用简介

git clone hadoop源码地址&#xff1a;https://gitee.com/CHNnoodle/hadoop.git git clone错误&#xff1a; Filename too long错误&#xff0c;使用git config --global core.longpaths true git clone https://gitee.com/CHNnoodle/hadoop.git -b rel/release-3.2.2 拉取指定…...

WebSocketClient objects are not reuseable

好久没写东西&#xff0c;夜深了来冒个泡&#xff0c;先啰嗦几句。今天测试 Android App 的时候&#xff0c;发现推到后台不到一分钟再唤醒直接闪退&#xff0c;初次以为网络和GPS信号弱导致的&#xff08;当时是在地铁上进行的测试&#xff09;&#xff0c;之后在网络与GPS 信…...

分享54个ASP.NET源码总有一个是你想要的

分享54个ASP.NET源码总有一个是你想要的 链接&#xff1a;https://pan.baidu.com/s/1khPzxtOFP0wUHpg7TBDitg?pwd8888 提取码&#xff1a;8888 项目名称 (ASP.Net)基于三层架构的企业信息管理系统 asp .net mvc编写的房产管理系统 asp.net core mvc 病人管理后台 asp.ne…...

闭包通俗解释,Demo(Go Java Python)

闭包的概念 想象一下&#xff0c;你有一个包裹着变量的函数&#xff0c;就像是一个封闭的包裹。这个包裹里有一个变量&#xff0c;而这个函数&#xff08;或包裹&#xff09;本身就是一个完整的单元。当你把这个函数传递给其他地方&#xff0c;就像是把这个包裹传递出去。 这…...

Linux部署Redis Cluster高可用集群(附带集群节点添加删除以及槽位分配操作详解)

目录 一、前言二、下载安装Redis2.1、选择需要安装的Redis版本2.2、下载并解压Redis2.3、编译安装Redis 三、部署Redis Cluster高可用集群3.1、准备配置文件3.2、启动Redis服务3.3、创建Redis集群3.4、查看集群关系3.5、连接集群Redis进行数据读写以及重定向测试3.6、故障转移和…...

【PWN · heap | Off-By-One】Asis CTF 2016 b00ks

萌新进度太慢了&#xff0c;才真正开始heap&#xff0c;还是从简单的Off-By-One开始吧 前言 步入堆的学习。堆的知识复杂而多&#xff0c;于是想着由wiki从简单部分逐个啃。 b00ks是经典的堆上off-by-one漏洞题目。刚开始看很懵&#xff08;因为确实连堆的管理机制都没有完全…...

C++STL---Vector、List所要掌握的基本知识

绪论​ 拼着一切代价&#xff0c;奔你的前程。 ——巴尔扎克&#xff1b;本章主要围绕vector和list的使用&#xff0c;以及容器底层迭代器失效问题&#xff0c;同时会有对原码的分析和模拟实现其底层类函数。​​​​话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑…...

使用FastAPI部署Ultralytics YOLOv5模型

YOLO是You Only Look Once(你只看一次)的缩写&#xff0c;它具有识别图像中的物体的非凡能力&#xff0c;在日常应用中会经常被使用。所以在本文中&#xff0c;我们将介绍如何使用FastAPI的集成YOLOv5&#xff0c;这样我们可以将YOLOv5做为API对外提供服务。 Python有几个web框…...

A. Doremy‘s Paint 3

今天第一次打CF&#xff0c;不过鼠鼠被气死了 先说说战况&#xff0c;今天一发没A&#xff08;赛场上&#xff09;&#xff0c;生活真是无奈&#xff0c;废物女友真是一点用没有 心里也很烦&#xff0c;什么压力都自己扛着。每天想尝试改变什么&#xff0c;又被现实掣肘&…...

深度学习_1 介绍;安装环境

深度学习 学习自李沐老师的课程。笔记主要以总结老师所讲解的内容以及我个人的想法为主&#xff0c;侵删&#xff01; 课程链接&#xff1a;课程安排 - 动手学深度学习课程 (d2l.ai) 介绍 AI地图&#xff1a; 首先&#xff0c;AI 能对问题处理到什么地步&#xff1f;分为四…...

Python基础入门例程19-NP19 列表的长度(列表)

最近的博文&#xff1a; Python基础入门例程18-NP18 生成数字列表&#xff08;列表&#xff09;-CSDN博客 Python基础入门例程17-NP17 生成列表(列表)-CSDN博客 Python基础入门例程16-NP16 发送offer(列表)-CSDN博客 目录 描述 输入描述&#xff1a; 输出描述&#xff1…...

LeetCode 2558. 从数量最多的堆取走礼物

【LetMeFly】2558.从数量最多的堆取走礼物 力扣题目链接&#xff1a;https://leetcode.cn/problems/take-gifts-from-the-richest-pile/ 给你一个整数数组 gifts &#xff0c;表示各堆礼物的数量。每一秒&#xff0c;你需要执行以下操作&#xff1a; 选择礼物数量最多的那一…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...