使用 ClickHouse 和 Polygon.io 构建实时市场数据应用

图片

本文字数: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..."
Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值