小T导读:在不久前的“2024,我想和 TDengine 谈谈”征文活动中,我们收到了许多精彩的投稿,反映了用户与 TDengine 之间的真实故事和独特见解。今天,我们很高兴地分享此次活动的第一名作品。这篇文章详细阐述了广西多元量化科技有限公司如何利用 TDengine 构建高效的量化交易系统,提升交易效率和决策质量。通过深入分析数据库选型和数据架构设计,作者展示了 TDengine 在金融领域的强大优势和广泛应用前景。接下来让我们一同阅读,探索这一前沿技术如何推动现代金融交易的智能化与高效化。
我们的核心产品是多元量化 App,旨在以客户的舒心与安心为本,共同创造智能交易的新体验,让每个人都能轻松玩转 AI 量化。该 App 面向各层次用户,支持手机和电脑端使用,确保随时随地享受便捷、高效的量化交易体验。核心优势在于强大的交易策略构建能力,提供零代码 AI 策略、DO 语言策略以及 Python 语言策略,满足不同用户的需求。
此外,该系统还支持实时行情、AI 智选、一键配置、拆单算法、深度回测及信息实时推送服务,确保用户不错过任何重要市场动态。多元量化 App致力于为投研者和金融机构提供全面的量化解决方案,通过先进的技术手段提升交易效率和决策质量,实现资产的稳健增长。
数据库选型
多元量化 App 本身是一套大数据 AI 处理系统,涉及各交易平台的海量交易数据,对数据存储、处理、响应及安全等方面有极高的要求。数据库选型直接影响系统的性能、可扩展性、数据一致性和可靠性,对交易行情系统的开发至关重要。理想的数据库需要确保交易数据的快速读写,支持高并发访问,并提供必要的数据备份和恢复机制,保障数据安全。此外,考虑到交易行情系统的实时性要求,数据库还需具备高效的事务处理能力和低延迟的数据访问特性。
多元量化 App 在初始开发阶段及功能升级过程中,每次系统迭代到一定体量,数据库的性能都会成为系统的瓶颈,因此设计一个合适的数据库方案显得尤为重要。
在数据库选型方面,我们重点考虑以下几点:
- 选择一个高效、稳定且可扩展的数据库系统,以确保大数据处理的实时性和准确性。
- 数据模型的适应性也是选型时需要考虑的因素。多元量化 AI 策略交易系统需要实时从各交易平台提取交易行情,因此数据库应具备足够的灵活性,以适配不同类型的金融数据。选择与大数据系统需求相匹配的数据模型,可以提高数据存储和查询的效率。考虑到金融行业的特殊性和监管要求,数据的可访问性也非常重要,用户及合作方可以方便快捷地访问和查询所需数据。
- 数据库的可扩展性对于大数据系统来说也很重要。随着系统功能的迭代,数据量的不断增长,数据库需要支持水平或垂直扩展,以适应数据量的增加,避免性能瓶颈。
- 数据库的安全性非常关键。由于交易数据涉及敏感信息,选择具备高级安全特性的数据库可以有效保护数据不被未授权访问或泄露。
- 成本效益分析也是数据库选型时需要考虑的。除了初始投资成本外,还需考虑维护成本、运营成本及长期可支持性。
在多元量化交易系统研发初期,我们使用的是基于 PostgreSQL 的时序数据库——TimescaleDB,它结合了传统关系型数据库的功能与时序数据存储和查询的优化。然而,随着系统和数据逐步扩展,TimescaleDB 的问题逐渐显现:
- 写入性能:由于量化系统数据写入存在高并发,TimescaleDB 在高吞吐量写入时出现瓶颈,同时增大了硬件系统的工作负载。
- 读取延时:尽管 TimescaleDB 使用了多种索引和机制来加速查询,但在需要扫描大量历史数据的回测功能中,仍然存在延迟。
- 空间占用:由于 TimescaleDB 是基于 PostgreSQL 实现,并且为了支持高效的时序数据管理增加了额外的数据结构,因此在存储相同数量的数据时占用更多的磁盘空间,这对每日处理海量行情数据的量化系统非常不利。
根据行情模块技术开发和拓展需求,以及后期运营拓展的考量,我们需要对整个时序数据库(Time Series Database)进行迭代,通过对目前常用的数据库类型进行评判和分析:
- ClickHouse:面临的问题包括高昂的运维成本、复杂的扩展过程以及对资源的大量需求。
- InfluxDB:擅长高效查询和存储时序数据,广泛用于监控数据和物联网行业的实时数据处理,但其集群功能尚未开源。
- TDengine:在性能、成本和运维简易性方面表现良好,支持水平扩展,并具备高可用性。
针对行情数据的时效性需求,时序数据库是最合适的存储解决方案。通过对比,我们发现,在相同的数据集和硬件条件下,TDengine 的写入速度远超 InfluxDB。此外,TDengine 还提供丰富的数据接口支持,包括 C/C++、Java、Python、Go 和 RESTful 等,满足各种开发需求。
因此,我们最终选择了 TDengine。
建模及应用
多元量化 AI 策略交易系统需从多个交易所中提取大量行情数据。数据提取呈现以下特点:
Tick 快照数据:
- 每日生成超过亿条记录;
- 快照数据需长期保留,且频繁调用。
Daily数据:
- 多子表结构,每日新增约 20 万张;
- 数据量巨大,每秒约 6 万条数据写入;
- 数据需长期保存。
通用特性:
- 数据格式固定,并附带时间戳;
- 数据几乎无需更新或删除;
- 标签列数量少且稳定;
- 单条记录的字段数量少、数据量小。
基于 TDengine 推荐的数据架构,我们将针对不同特性的数据分别构建独立的数据库,并根据各自特性进行参数优化。在每个数据库中,根据数据品种(如期货、期权等)创建超级表,并将标的实体的标签信息直接作为超级表的标签字段,以此为不同品种的数据创建子表。此数据模型的构建方式高度契合了我们的数据特性和应用场景。
当前,我们的业务主要面向国内的期货和期权市场,股票业务仍在研发阶段。数据库的应用分为离线业务(回测)和实时业务两部分。回测用于计算基本框架和参数范围,实时业务结合最新数据对框架进行动态调整,二者相辅相成,共同生成交易策略。
在数据写入方面,TDengine 轻松满足了上述业务需求。在数据查询方面,针对离线和在线业务,我们主要使用如下两类高频 SQL 查询。由于 TDengine 支持缓存最新数据,并采用顺序读取机制,即使在高并发查询下也毫无压力,均可实现毫秒级返回。这为我们在离线与实时数据分析中提供了坚实的技术保障。
在线查询:
SELECT last_row(*) FROM tick_CZCE_SA501;
离线查询:
SELECT * FROM tick_CZCE_SA501 WHERE ts < '2024-10-09 15:00:00.000' ORDER BY ts DESC LIMIT 1000;
实施经验分享
为确保数据的稳定高效获取,实施过程中需要重点考虑查询性能、线上数据更新和运维情况。在此过程中,我们参考了官方博客中同花顺在 TDengine 上处理类似行情数据的解决方案。
最终,我们选择了如下硬件配置来搭建数据库:双路 AMD 48 核 96 线程 CPU,128GB 内存,8TB 固态硬盘。当前系统每日负载情况如下:CPU 使用率平均约为 20%,内存使用率 20%,数据压缩率控制在 10% 以内。
TDengine 的最大优势在于处理大规模时序数据,非常适合金融行情数据(如期货、期权价格及交易记录)。这些数据的特点在于高频写入、固定查询模式,且通常基于时间范围进行聚合或分析。然而,作为一款金融应用系统,除了时序数据外,还涉及大量其他类型的数据和复杂的业务逻辑需求,因此我们仍然保留了 PostgreSQL 关系数据库,以支持多样化的数据需求。
结语
TDengine 在成本控制、性能表现和用户友好性方面表现出色,尤其在成本节约方面尤为突出。展望未来,我们期待 TDengine 持续优化其性能和稳定性。同时,我们将基于业务需求开展二次开发,并积极向社区分享成果,共同推动 TDengine 的进步与发展。
关于多元量化
广西多元量化科技有限公司成立于 2023 年,是一家专注于人工智能技术研发与应用的领先企业。其致力于将大数据与人工智能相结合,服务于金融资产管理系统。多元量化提供程序化快速交易系统、量化策略开发及植入服务,结合先进的 IT 技术与丰富的行业经验,为机构和投资者量身定制高效的量化解决方案。多元量化产品线涵盖行情分析系统、程序化智能交易系统、策略模型平台和量化资产管理平台,并提供专属定制服务,满足客户的多样化需求。