如何获取Level2行情接口连接?

发布于:2022-12-15 ⋅ 阅读:(731) ⋅ 点赞:(0)

深交所Level-2行情,市场需求量确实比较大。

很多人需要沪深L2实时行情,但是也有很多人只要深交所L2行情,不要上交所L2行情。我接触过的只要一种行情的,都是只要深交所的,没有说只要上交所不要深交所的。

至于深交所Level2实时行情程序接口,最好的是直接向深交所采购。延迟最低,行情质量最高,稳定性最好。当然,收费也是最贵的,采购流程也是很麻烦的,对程序开发者的技术能力要求也是最高的。支持的接口语言还挺多的,支持C++、C#、Java、Python,window和linux系统都支持。

Level2行情接口链接

1.下载行情工具

https://gitee.com/l2gogogo/l2-push-python/tree/master/cli

2.目录说明

名称 说明

conf 配置目录

data 数据目录

log 日志目录

txtool 命令行工具-Linux

txtool.exe 命令行工具-Windows

3.行情工具常用命令

命令 说明

txtool -h 查看帮助

txtool version 查看工具版本号

txtool proxy 启动本地代理服务器。默认命令,Windows可直接双击执行

4.接入说明

1.下载行情工具,修改conf/proxy.toml

1.设置用户名和密码:User/Passwd

2.设置推送服务器地址:RpcServer/TcpServer

2.打开命令窗口,切换到cli目录,执行命令启动本地代理服务器

1.Linux系统执行:txtool proxy

2.Windows系统执行:txtool.exe proxy

3.如果提示本机端口已占用,可修改配置项Address(代理服务器监听地址)

3.启动成功,调用代理服务器提供的GRPC接口

1.接口地址见配置项Address,默认为:localhost:8090

2.接口定义,见目录proto

4.代理服务器配置

1.proxy.toml 配置代理服务器监听地址,是否将推送消息写入本地文件等

2.log.toml 配置日志格式,是否写入控制台和文件等

Level2行情接口

l接口定义,见目录proto

订阅事件

get_subscription查询订阅

add_subscription新增订阅

del_subscription取消订阅

数据推送事件

tick_record_stream 推送逐笔成交行情数据

order_record_stream 推送逐笔委托行情数据

order_queue_record_stream推送委托队列行情数据

stock_quote_record_stream 推送股票十档行情行情数据

代码示例

# -*- coding: utf-8 -*-

# 此Demo只是演示接入过程

import grpc

import entity_pb2

import proxy_pb2_grpc

import threading

from multiprocessing import Process

# 代理服务器监听的地址和端口

ServerConnect = grpc.insecure_channel('localhost:5000')

Stub = proxy_pb2_grpc.ProxyStub(ServerConnect)

# 查询订阅

def get_subscription():

    # rep返回code为1代表成功,其余状态码可参考接入文档,data是返回订阅股票的情况

    Result = Stub.GetSubscription(entity_pb2.Void())

    print(Result)

# 新增订阅

def add_subscription():

    # 实例ProtoBuf协议的方法

    String = entity_pb2.String()

    # 修改协议的值

    # 2:市场代码标识(1为上海证券,2为深圳证券)

    # 000002:股票代码

    # 15:订阅全部标识(1为逐笔成交,2为逐笔委托,4为委托队列,8为股票十档行情,如果想全部订阅可直接填入15,原理是1+2+4+8,如果想订阅某几个行情将几个行情标识相加即可)

    String.value = '2_000002_15'

    # String.value = '2_000001_15,2_000002_5,2_000003_12,批量订阅'

    # rep返回code为1代表成功,其余状态码可参考接入文档

    Result = Stub.AddSubscription(String)

    print(Result)

# 取消订阅

def del_subscription():

    # 实例ProtoBuf协议的方法

    String = entity_pb2.String()

    # 修改协议的值

    # 2:市场代码标识(1为上海证券,2为深圳证券)

    # 000002:股票代码

    # 15:取消全部标识(1为逐笔成交,2为逐笔委托,4为委托队列,8为股票十档行情,如果想全部取消可直接填入15,原理是1+2+4+8,如果想取消某几个行情将几个行情标识相加即可)

    String.value = '2_000002_15'

    # String.value = '2_000001_15,2_000002_5,2_000003_12,批量取消'

    # rep返回code为1代表成功,其余状态码可参考接入文档

    Result = Stub.DelSubscription(String)

    print(Result)

# 推送逐笔成交行情数据

def tick_record_stream():

    StreamResult = Stub.NewTickRecordStream(entity_pb2.Void())

    # 用For循环就可以不断消费数据

    for Result in StreamResult:

        print(Result)

# 推送逐笔委托行情数据

def order_record_stream():

    StreamResult = Stub.NewOrderRecordStream(entity_pb2.Void())

    # 用For循环就可以不断消费数据

    for Result in StreamResult:

        print(Result)

# 推送委托队列行情数据

def order_queue_record_stream():

    StreamResult = Stub.NewOrderQueueRecordStream(entity_pb2.Void())

    # 用For循环就可以不断消费数据

    for Result in StreamResult:

        print(Result)

# 推送股票十档行情行情数据

def stock_quote_record_stream():

    StreamResult = Stub.NewStockQuoteRecordStream(entity_pb2.Void())

    # 用For循环就可以不断消费数据

    for Result in StreamResult:

        print(Result)

if __name__ == '__main__':

    # 可以使用多线程并发接收推送数据

    ThreadOne = threading.Thread(target=tick_record_stream)

    ThreadTwo = threading.Thread(target=order_record_stream)

    ThreadThree = threading.Thread(target=order_queue_record_stream)

    ThreadFour = threading.Thread(target=stock_quote_record_stream)

    # 多进程并发接收推送数据

    # ProcessOne = Process(target=tick_record_stream)

    # ProcessTwo = Process(target=order_record_stream)

    # ProcessThree = Process(target=order_queue_record_stream)

    # ProcessFour = Process(target=stock_quote_record_stream)

    # 这设置为随主线程退出子线程,避免产生孤儿或僵尸线程

    ThreadOne.daemon = True

    ThreadTwo.daemon = True

    ThreadThree.daemon = True

    ThreadFour.daemon = True

    # ProcessOne.daemon = True

    # ProcessTwo.daemon = True

    # ProcessThree.daemon = True

    # ProcessFour.daemon = True

    # 有一点值得注意一下,假如订阅的股票相对活跃,推送的数据就不会有休眠的状态出现,因为Python的GIL锁,所以用多线程接收推送效率不显著,这个时候可以考虑用多进程来接收推送

    ThreadOne.start()

    ThreadTwo.start()

    ThreadThree.start()

    ThreadFour.start()

    # ProcessOne.start()

    # ProcessTwo.start()

    # ProcessThree.start()

    # ProcessFour.start()

    ThreadOne.join()

    ThreadTwo.join()

    ThreadThree.join()

    ThreadFour.join()

    # ProcessOne.join()

    # ProcessTwo.join()

    # ProcessThree.join()

    # ProcessFour.join()

本文含有隐藏内容,请 开通VIP 后查看