找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1933|回复: 0

[代码与实例] python如何可以获取股票L2行情

4

主题

4

帖子

4

积分

贫民

积分
4
QQ
level2.API 发表于 2022-12-8 13:51:53 | 显示全部楼层 |阅读模式


python究竟怎么可以获取level2行情呢?比如百度、新浪、搜狐、CSDN等都有教程还有说明,同时还有提供一些常见的股票L2接口,包括许多模拟股票交易系统也提供了数据,但这些获取股票数据的方法并不像通过python那样方便。那么,如何通过python实现股票L2接口呢?
以下有两种情况说明:
(1)你有自己的证券商及客服专员;
在这种情况下,个人直接打电话给交易账户的证券期货供应商客户服务专员,获取CTP数据接口信息。CTP是指根据要求,进入期货公司的交易程序必须经过穿戴认证。简单地说,它是在期货公司提供的模拟环境中完成指定的交易和查询任务。完成后,期货公司将提供生产环境的授权代码。一般1-2周客户服务专员提供CTP主中心公共服务。IP地址、内网地址、交易端口、行情端口、brokeID、授权编码等信息。

(2)没有任何证券客服专员支持。
这第二种情况是可以直接挑选使用第三方的SDK或开源代码,如AlgoPlus,PyTdx,VNPY等自行编程开发接口及数据解析,免费获取实时行情数据,比较讲究的是编程技术,这一点对于普通交易者理解起来难,但对使用起来却方便很多。
相信大家对股票交易接口并不陌生,那么要想获取股票数据获取,也是可以通过python股票交易接口实现股票分时图K线图及抓取level2行情的开发程序分析如下:

# 推送逐笔成交行情数据
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()

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表