level2行情接口怎么用?在股票交易细节中,左第一列交易时间,一般15秒,第二列是交易价格,第三列是交易数量,如果是主动买入交易显示红色和向上箭头,如果是主动卖出交易显示绿色和向下箭头,第四列是交易数量,即多少委托交易,通过交易数量和相应数量,可以大致估计交易参与者是否有机构,大或全是散户投资者。
1、逐笔交易一般显示的数据格式是在几分钟内以多少价格划分多少手。
这里我们要注意的是,交易数量有时是小数点,这是因为股票买入的股票数量至少是100股,委托的股票数量也应该是100股的整数倍,但卖出没有限制,所以交易数量会有小数点。另一点是,如果交易价格和手数没有显示在前面,一半是默认的。
2、分时成交一般显示的数据格式为在几分几秒以多少价格成交了多少手。
这里需要注意的是成交手数永远是整数,不会出现小数点数字。
3、一个孤独的数字是缺乏意义的,但是一些连续的数字则是充满想像的。
一般来说,交易数量越少,金额越大,这意味着交易相对较强,反之亦然。特别是当交易数量相对较大且集中时,表明有大量资金活跃的迹象,股票价格变动的可能性较大,应引起投资者的注意。如果没有人买半天或一些小名单,至少在短期内不太可能成为好股票。
4、交易数据三维元素----数量、价格和笔数。
不陌生的是前两个,笔数是交易批次。在一定数量的前提下,笔数少意味着交易强度强,反之亦然。笔数的变化与数量方向一致,交易正常,反之亦然。这些都可以在以后的操作中慢慢理解。为了提升自己的炒股经验,初学者可以在前期用牛股宝模拟炒股,学习股票知识和操作技巧,未来股市的盈利有一定的帮助。
以下就是L2行情接口代码,希望对你有所帮助。
Level2行情接口
订阅事件
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()