
本文字数:8666;估计阅读时间:22 分钟
作者:Lionel Palacin
本文在公众号【ClickHouseInc】首发

实时 Tick(Tick)数据应用是实时分析的一个经典场景。类似于在 Web 应用中追踪用户行为或监控 IoT 设备产生的指标,这类系统需要对高频事件流进行低延迟的数据摄取、存储和查询。
在金融市场中,最大的不同在于其对时效性的极高要求。哪怕只有几秒钟的延迟,也可能让一次本可盈利的交易变成亏损。每一笔交易和每一次报价(quote)更新都会产生新的 Tick,而这些 Tick 在多个交易标的(symbol)中每秒可能高达数千条。
ClickHouse 非常适合这种类型的工作负载。它能够应对高频插入、基于时间范围的查询以及超低延迟的查询需求。即使针对每个交易标的存储数十亿行数据,内置的压缩能力也能有效降低存储成本。借助物化视图(Materialized View),可以在写入时对数据进行预聚合或重排,从而无需引入额外的处理层,就能显著优化查询性能。
本文将介绍如何使用 Polygon.io [https://polygon.io/] 获取市场数据,并利用 ClickHouse 实时存储和查询 Tick。后端将采用 NodeJS,前端使用 React 实现实时可视化。让我们一起深入探索吧。
什么是 Tick?
在正式开始之前,先明确报价(quote)和交易(trade)的含义会更容易理解。报价指市场参与者当前愿意买入或卖出某只证券的价格,具体包括最高买入报价(即有人愿意支付的最高价)以及最低卖出报价(即有人愿意出售的最低价)。这些价格会随着新的订单进入或撤出市场而持续变化。

交易(trade)则是买方和卖方实际达成的成交行为。当有人接受当前的买入或卖出价格时,就会匹配成交,形成一个订单,并记录成交价格、交易数量和成交时间。

Tick 数据通常分成两个流:一个是报价更新流,另一个是交易执行流。这两种数据都对理解市场行为非常关键,但它们在分析和策略制定中的作用有所不同。
如何访问实时市场数据
现在我们已经清楚要摄取的数据类型,接下来来看看如何获取这些数据。首先需要选择并注册一个股票市场 API,目前市面上有不少可选方案,我们在这个演示项目中使用了 Polygon.io。它的付费套餐提供无限次调用 API 的权限、实时数据访问能力以及对 WebSockets 的支持。
WebSockets 对于流式传输市场数据来说至关重要,它可以避免传统轮询 REST API 时产生的延迟和额外开销。相比每次请求都重新建立连接并可能在两次请求间错过 Tick,WebSockets 可以维持一个持续的连接,在数据一旦可用时就立即推送过来,这对于对毫秒级延迟要求极高的高频市场数据来说尤其关键。
使用 Polygon.io API 开始摄取数据的过程相当简单,只需要连接到 /stocks 端点,使用你的 Polygon API key 完成身份验证,然后就可以开始处理数据消息。
下面提供一个使用 NodeJS 编写的示例代码片段。
this.authMsg = JSON.stringify({
action: "auth",
params: process.env.POLYGON_API_KEY,
});
this.ws = new WebSocket("wss://socket.polygon.io/stocks");
this.ws.on("open", () => {
console.log("WebSocket connected");
this.isConnected = true;
this.reconnectAttempts = 0;
this.lastMessageTime = Date.now();
this.connectionStartTime = Date.now();
this.statusMessage = "Connected - Authenticating..."

最低0.47元/天 解锁文章
861

被折叠的 条评论
为什么被折叠?



