程序化交易(二)level2行情数据源接入
WEBSOCKET行情接入
行情在线测试 websocket行情接口
交易在线测试 在线交易接口
官方文档地址 行情交易接口用户文档
分配服务器
注意:每次分配的服务器地址会发生变化,连接服务前,请务必调用该接口获取最新的服务器地址。
获取服务器:
http://jvQuant.com/server?market=ab&type=websocket&token=<token>
Copy
接口参数:
| # | 参数名 | 类型 | 描述 |
|---|---|---|---|
| 1 | market | string | 市场标志,沪深为ab |
| 2 | type | string | 接口类别,行情类别为websocket |
| 3 | token | string | jvQuant token |
接口返回:
| # | 参数名 | 类型 | 描述 |
|---|---|---|---|
| 1 | code | string | 请求状态码 |
| 2 | server | string | 分配服务器地址及端口号 |
返回示例:
{"code": "0","server": "xx.xx.x.xx:xxxx/xxx"
}
Copy
CODE规范
jvQuant支持沪深主板、科创板、创业板,股票以及可转债行情,提供level1和level2数据推送。
订阅代码由行情标志和证券代码组成,用分隔符"_"连接。
如:
lv1_600519,代表贵州茅台level1行情
lv2_127063,代表贵轮转债level2行情
| # | 行情标志 | 类型 | 描述 |
|---|---|---|---|
| 1 | lv1 | string | level1行情 |
| 2 | lv2 | string | level2行情 |
连接登录
使用分配的服务器地址,通过websokcet协议连接服务器。
websocket接口地址:
ws://xx.xx.x.xx:xxxx/xxx?token=<token>
Copy
订阅行情
创建websocket连接后,您可以输入以下指令进行行情订阅:
| # | 指令 | 参数 | 描述 |
|---|---|---|---|
| 1 | add | string | 增加订阅code |
| 2 | del | string | 删除订阅code |
| 3 | all | string | 覆盖全部code |
| 4 | list | string | 查看全部订阅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行情接口 交易在线测试 在线交易接口 官方文档地址 行情交易接口用户文档 分配服务器 注意:每次分配的服务器地址会发生变化,连接服务前,请务必调用该接口获取最新的服务器地址。 获取服务器:…...
4.6 static修饰符
static是一个修饰符,用于修饰类的成员属性和成员方法,还可以编写static代码块来优化程序性能。 1. static修饰属性 在Java程序中使用static修饰属性,则该属性称为静态属性(也称全局属性),静态属性可以使用…...
C++头文件定义变量
1.在进行头文件学习时,犯了不少错误,记录一下,先贴代码. .h头文件 #ifndef MY_FIRST_H_ #define MY_FIRST_H_struct Person {std::string name;int age;char8_t gender; };//需要使用extern来声明,否则在多个文件中引入该头文件会出现重定义…...
[蓝桥杯-610]分数
题面 解答 这一题如果不知道数论结论的话,做这个题会有两种天壤之别的体验 此题包含以下两个数论知识 1. 2^02^12^2...2^(n-1)2^n-1 2. 较大的数如果比较小的数的两倍大1或者小1,则两者互质 所以答案就是2^n-1/2^(n-1) 标程1 我的初次解答 #in…...
Vue指令大全:深入探索Vue提供的强大指令功能
目录 v-bind指令 v-on指令 v-if和v-show指令 v-for指令 自定义指令 其他常用指令 总结 Vue.js是一款流行的JavaScript框架,具备丰富的指令系统。Vue指令允许开发者直接在模板中添加特殊属性,以实现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) ,所以修改build.sh ------------------------------------------------------------------------------ 5 M…...
shell_56.Linux永久重定向
永久重定向 1.脚本中有大量数据需要重定向,那么逐条重定向所有的 echo 语句会很烦琐。 这时可以用 exec 命令,它会告诉 shell 在脚本执行期间重定向某个特定文件描述符: $ cat test10 #!/bin/bash # redirecting all output to a file ex…...
CN考研真题知识点二轮归纳(1)
本轮开始更新真题中涉及过的知识点,总共不到20年的真题,大致会出5-10期,尽可能详细的讲解并罗列不重复的知识点~ 目录 1.三类IP地址网络号的取值范围 2.Socket的内容 3.邮件系统中向服务器获取邮件所用到的协议 4.RIP 5.DNS 6.CSMA/CD…...
hadoop使用简介
git clone hadoop源码地址:https://gitee.com/CHNnoodle/hadoop.git git clone错误: Filename too long错误,使用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
好久没写东西,夜深了来冒个泡,先啰嗦几句。今天测试 Android App 的时候,发现推到后台不到一分钟再唤醒直接闪退,初次以为网络和GPS信号弱导致的(当时是在地铁上进行的测试),之后在网络与GPS 信…...
分享54个ASP.NET源码总有一个是你想要的
分享54个ASP.NET源码总有一个是你想要的 链接:https://pan.baidu.com/s/1khPzxtOFP0wUHpg7TBDitg?pwd8888 提取码:8888 项目名称 (ASP.Net)基于三层架构的企业信息管理系统 asp .net mvc编写的房产管理系统 asp.net core mvc 病人管理后台 asp.ne…...
闭包通俗解释,Demo(Go Java Python)
闭包的概念 想象一下,你有一个包裹着变量的函数,就像是一个封闭的包裹。这个包裹里有一个变量,而这个函数(或包裹)本身就是一个完整的单元。当你把这个函数传递给其他地方,就像是把这个包裹传递出去。 这…...
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
萌新进度太慢了,才真正开始heap,还是从简单的Off-By-One开始吧 前言 步入堆的学习。堆的知识复杂而多,于是想着由wiki从简单部分逐个啃。 b00ks是经典的堆上off-by-one漏洞题目。刚开始看很懵(因为确实连堆的管理机制都没有完全…...
C++STL---Vector、List所要掌握的基本知识
绪论 拼着一切代价,奔你的前程。 ——巴尔扎克;本章主要围绕vector和list的使用,以及容器底层迭代器失效问题,同时会有对原码的分析和模拟实现其底层类函数。话不多说安全带系好,发车啦(建议电脑…...
使用FastAPI部署Ultralytics YOLOv5模型
YOLO是You Only Look Once(你只看一次)的缩写,它具有识别图像中的物体的非凡能力,在日常应用中会经常被使用。所以在本文中,我们将介绍如何使用FastAPI的集成YOLOv5,这样我们可以将YOLOv5做为API对外提供服务。 Python有几个web框…...
A. Doremy‘s Paint 3
今天第一次打CF,不过鼠鼠被气死了 先说说战况,今天一发没A(赛场上),生活真是无奈,废物女友真是一点用没有 心里也很烦,什么压力都自己扛着。每天想尝试改变什么,又被现实掣肘&…...
深度学习_1 介绍;安装环境
深度学习 学习自李沐老师的课程。笔记主要以总结老师所讲解的内容以及我个人的想法为主,侵删! 课程链接:课程安排 - 动手学深度学习课程 (d2l.ai) 介绍 AI地图: 首先,AI 能对问题处理到什么地步?分为四…...
Python基础入门例程19-NP19 列表的长度(列表)
最近的博文: Python基础入门例程18-NP18 生成数字列表(列表)-CSDN博客 Python基础入门例程17-NP17 生成列表(列表)-CSDN博客 Python基础入门例程16-NP16 发送offer(列表)-CSDN博客 目录 描述 输入描述: 输出描述࿱…...
LeetCode 2558. 从数量最多的堆取走礼物
【LetMeFly】2558.从数量最多的堆取走礼物 力扣题目链接:https://leetcode.cn/problems/take-gifts-from-the-richest-pile/ 给你一个整数数组 gifts ,表示各堆礼物的数量。每一秒,你需要执行以下操作: 选择礼物数量最多的那一…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
