Python 核心技术与实战
景霄
Facebook 资深工程师
78765 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
Python 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

35 | RESTful & Socket:行情数据对接和抓取

你好,我是景霄。
上一节课,我们介绍了交易所的交易模式,数字货币交易所 RESTful 接口的常见概念,以及如何调用 RESTful 接口进行订单操作。众所周知,买卖操作的前提,是你需要已知市场的最新情况。这节课里,我将介绍交易系统底层另一个最重要的部分,行情数据的对接和抓取。
行情数据,最重要的是实时性和有效性。市场的情况瞬息万变,合适的买卖时间窗口可能只有几秒。在高频交易里,合适的买卖机会甚至在毫秒级别。要知道,一次从北京发往美国的网络请求,即使是光速传播,都需要几百毫秒的延迟。更别提用 Python 这种解释型语言,建立 HTTP 连接导致的时间消耗。
经过上节课的学习,你对交易应该有了基本的了解,这也是我们今天学习的基础。接下来,我们先从交易所撮合模式讲起,然后介绍行情数据有哪些;之后,我将带你基于 Websocket 的行情数据来抓取模块。

行情数据

回顾上一节我们提到的,交易所是一个买方、卖方之间的公开撮合平台。买卖方把需要 / 可提供的商品数量和愿意出 / 接受的价格提交给交易所,交易所按照公平原则进行撮合交易。
那么撮合交易是怎么进行的呢?假设你是一个人肉比特币交易所,大量的交易订单往你这里汇总,你应该如何选择才能让交易公平呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Python 核心技术与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(32)

  • 最新
  • 精选
  • Jingxiao
    置顶
    思考题答案: Websocket 可能丢包。TCP 协议保证了所有的包按顺序抵达(即使是乱序抵达,在前面的包收到之前,TCP 协议下的底层程序也会讲先到达的靠后的包缓存,直到前面的包抵达,才送给上层的应用程序),但是并不能保证不可恢复的错误发生的时候,包不会丢失。这种情况发生的时候,就会出现 Orderbook 中一个或多个(价格,数量)信息没得到及时更新。这种错误越积攒越多的情况下,就会导致本地的 Orderbook 充满垃圾信息,变得完全不可靠。因此一个很好的做法是,可以设置一个时间间隔,通过 RESTFul 或者其他方式重新抓一下 Orderbook 的 Snapshot,然后和本地的 Orderbook 进行比对,纠正错误。
    54
  • SCAR
    思考题: 1. websocket基于tcp的,虽然协议上有纠错,重传和等待的机制,但一些特殊的情况还是可能会有丢包的情况,比如同时有超过服务器负载的客户端在请求数据。 2.如果丢包的情况发生时,类似开大会会场人人都发微信图片,看着WiFi信号满格,却发不出去,差不多一样的道理爬虫也是收不到数据的。 3.查了下websocket的WebSocketApp的函数,有个参数on_error,是websocket发生错误的时候触发的,那么我们可以编写这个对应的回调函数来让服务器重发或者其他有效的处理。

    作者回复: 👍

    44
  • JustDoDT
    websocket资料 https://pypi.org/project/websocket_client/

    作者回复: 👍

    5
  • Geek_adeba6
    想请问是否可以使用STOMP协议与Gemini这样的交易平台通信, 像消息队列rabbitmq 有 stomp的plugins

    作者回复: 理论上他可以这么做,但是 Gemini 目前官方只支持 RESTFul 和 Websocket,以及金融工程中经常用到的 FIX 协议,这些协议都有着广泛支持的开源库和经过充分时间验证的安全性,切换到新的协议没有太大必要,但是以后的事情谁也说不定呢

    3
  • shiziwen
    请问文章中,接口获取的数据中,bids和ask是什么意思呢?

    作者回复: orderbook 的买方和卖方:https://www.investopedia.com/terms/b/bid-and-ask.asp

    2
  • Merlin
    对于web socket的编程,可以用asyncio,我觉得用asyncio来开发web socket更为方便

    作者回复: 嗯嗯

    2
  • _stuView
    我之前看到Linux公众号讲python并不是一个解释型语言,而是一个运行在虚拟机上的语言https://mp.weixin.qq.com/s/Yqwk_eXO1t5N2cjRz_u0sw

    作者回复: 如果一定要回答 Python 是不是解释型语言,那么答案是它是部分编译型语言。它和 Java 类似,不会像 C++ 一样编译到机器语言,而是编译成字节码来提高执行速度。https://stackoverflow.com/questions/6889747/is-python-interpreted-or-compiled-or-both

    2
  • tt
    websocket包的安装使用如下命令: pip -m install websocket_client安装。 pip -m install websocket会安装另外一个完全不同的包
    1
    44
  • tux
    干布球和tt 的提示,解决了报错。 import websocket #pip install websocket-client import _thread as thread 在查找资料时,看到了: import websocket try: import thread except ImportError: import _thread as thread
    16
  • 干布球
    第二段代码少了个import time,python3里面thread用import _thread,不知是不是这样?
    1
    8
收起评论
显示
设置
留言
32
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部