开源项目【金融交易系统】
约 2297 字大约 8 分钟
2025-03-05
编写者:bugcode
本文已完成并校对
本页总结了github上几个优秀的开源金融交易系统,包含不同语言,不同协议实现的撮合引擎;
📊 主流撮合引擎项目对比(C++/Java/Python)
| 项目名称 | 语言 | Stars | 核心特点 | 适用场景 | GitHub地址 |
|---|---|---|---|---|---|
| exchange-core | Java | 2,114 | 基于 LMAX Disruptor 实现,极低延迟,每秒可处理 500 万订单簿操作;采用 Eclipse Collections 和 Adaptive Radix Trees 优化内存访问 | 研究高性能 Java 撮合引擎、无锁并发设计 | github.com/exchange-core/exchange-core |
| CppTrader | C++ | 842 | 高性能交易平台组件集合,包含撮合引擎、订单簿处理器、NASDAQ ITCH 协议处理器 | 学习 C++ 低延迟交易系统设计,模块化架构 | github.com/chronoxor/CppTrader |
| CoinExchange_CryptoExchange_Java | Java | 1,346 | 完整的加密货币交易所平台,基于 Spring Cloud 微服务架构,包含撮合引擎、后台管理、前台、移动端 App | 研究完整交易所系统架构、微服务设计 | github.com/jammy928/CoinExchange_CryptoExchange_Java |
| Liquibook | C++ | - | OCI 提供的开源交易撮合引擎,功能完善,支持限价单、市价单、止损单,内置多级市场深度聚合功能 | 深入理解订单簿与撮合引擎核心算法,代码纯粹聚焦 | github.com/enewhuis/liquibook |
| OpenTradingPlatform | Java | 640 | 云原生数字资产与加密货币交易平台 | 研究云原生架构、分布式交易系统 | github.com/opentradingplatform/opentradingplatform(需确认) |
| matching-engine-go | Go | 419 | 简洁的交易匹配引擎实现,价格-时间优先级队列 | 学习 Go 并发在撮合引擎中的应用 | github.com/lipwei1808/exchange-matching-engine-go |
| CoinTossX | Java | - | 学术级低延迟高吞吐量撮合引擎,使用 Aeron (UDP) 和 SBE 协议,支持 Julia/Python 客户端 | 研究低延迟网络传输、学术论文配套实现 | 需在 GitHub 搜索 CoinTossX |
| LightMatchingEngine | Python | 328 | 轻量级撮合引擎,代码简洁,适合初学者理解撮合原理 | Python 初学者入门,快速理解撮合逻辑 | github.com/gavincyi/LightMatchingEngine |
| limit-order-book | C++/Python | 247 | 限价订单簿的双语言实现,适合对比学习 | 对比 C++ 与 Python 在性能与可读性上的权衡 | github.com/Kautenja/limit-order-book |
| gitbitex-new | Java | 235 | 开源加密货币交易所实现 | 研究交易所完整功能实现 | github.com/gitbitex/gitbitex-new |
C++ 撮合引擎
| 项目 | 推荐理由 |
|---|---|
| CppTrader | 模块化设计完整,包含撮合引擎 + 订单簿 + ITCH 协议处理,代码约 26.6 MB,功能全面 |
| Liquibook | 仅头文件库,专注订单簿与撮合逻辑,代码清晰,是理解核心算法的绝佳教材 |
Java 撮合引擎
| 项目 | 推荐理由 |
|---|---|
| exchange-core | 热度最高(2,114 Stars),性能数据明确(500 万 ops/sec),基于 Disruptor 实现无锁并发,是学习 Java 高性能交易的标杆项目 |
| CoinExchange_CryptoExchange_Java | 完整交易所系统(1,346 Stars),包含撮合引擎 + 后台管理 + 移动端,适合学习微服务架构 |
| CoinTossX | 学术级实现,有论文支撑,使用 Aeron + SBE 实现低延迟 UDP 通信 |
Python 撮合引擎
| 项目 | 推荐理由 |
|---|---|
| LightMatchingEngine | 代码轻量(61.5 KB),逻辑清晰,适合 Python 开发者快速理解撮合引擎原理 |
| limit-order-book | C++ 与 Python 双实现,可对比学习两种语言在性能上的差异 |
主要研究及学习的交易引擎对比
📊 三项目全方位对比总览
| 对比维度 | CppTrader | Liquibook | exchange-core |
|---|---|---|---|
| 开发语言 | C++20/23 | C++11/14 (Header-Only) | Java |
| GitHub热度 | 842 Stars, 256 Forks | 约1.2k Stars | 2.1k+ Stars |
| 项目定位 | 高性能交易平台组件集合 | 专注的订单匹配引擎库 | 功能完整的交易所核心 |
| 核心模块 | 撮合引擎 + 订单簿 + ITCH协议处理器 | 订单簿 + 撮合逻辑 + 深度簿 | 撮合引擎 + 风控 + 账务 + 持久化 |
| 技术亮点 | 现代C++、跨平台、工业级组件 | Header-Only、零依赖、极简集成 | LMAX Disruptor、对象池化、无浮点数 |
| 性能数据 | 无官方基准 | 200-250万订单插入/秒 | 500万订单簿操作/秒 (p99 14-190µs) |
| 依赖复杂度 | 中等 (需CppCommon等子模块) | 无运行时依赖 | 较高 (Disruptor、Eclipse Collections) |
| 应用场景 | 构建完整交易平台 | 嵌入任何需要撮合的应用 | 生产级交易所核心 |
| 生产验证 | 有机构采用 | 学术研究、原型验证 | 工业级应用 |
| 学习难度 | 高 (完整系统架构) | 低 (专注核心算法) | 中-高 (需理解Java高性能) |
🧬 各项目的独立深度剖析
1、CppTrader:工业级C++组件集
核心定位:CppTrader 的设计定位是一套用于构建完整交易平台的高性能C++组件,而非单一功能的库。
主要组件:
- 超快速撮合引擎:实现价格优先、时间优先的核心匹配逻辑
- 委托账本处理器(Order Book Processor):维护和管理订单的完整生命周期
- NASDAQ ITCH处理器:这是其独特优势——能直接解析和处理交易所的原始数据流
技术特性:
- 支持Windows/Linux/macOS三大平台
- 采用现代C++20/23标准开发
- 包含完整的使用示例和测试用例
- 支持持续集成
独特价值:
- 生产级验证:已有招聘信息明确要求将CppTrader投入生产环境,填补FIX网关、WAL快照、HA集群等模块
- C++低延迟实践范本:涵盖内存池、无锁数据结构、NUMA绑定等技术
- 模块化架构:各组件可独立使用,便于分块研究
2、Liquibook:优雅简洁的纯学术派
核心定位:Liquibook 是OCI提供的开源交易撮合引擎,定位是仅包含头文件的库——你只需要 #include 即可使用,无需编译。
功能特性:
- 订单类型支持:市价单、限价单、止损单
- 深度簿(Depth Book):可配置维护各价格级别的未成交订单数和数量
- 事件通知:订单接受/拒绝/成交/取消、深度簿变化、BBO变化
- 高级订单标志:AON(全部或无)、IOC(立即或取消)、FOK(成交或取消)
技术亮点:
- 零运行时依赖:可在任何支持C++的环境中运行
- 与现有模型兼容:支持智能指针或普通指针操作订单,与现有订单模型无缝集成
- 学术认可:被用于uBFT等学术研究中,作为金融订单匹配引擎的测试基准
独特价值:
- 理解撮合算法的最佳入口:代码量适中且专注,能清晰展示"订单簿"这一数据结构的完整实现
- 仅头文件设计:你不需要纠结于构建系统,阅读理解非常顺畅
3、exchange-core:Java高性能的工业巅峰
核心定位:基于 LMAX Disruptor 和 Eclipse Collections 实现的超快速交易所核心。
核心技术栈:
- LMAX Disruptor:无锁环形队列,通过内存屏障实现微秒级线程间通信
- Eclipse Collections:高性能Java容器,优化内存访问模式
- 对象池化:重用对象实例,有效降低GC压力
性能数据(官方基准 - 8年前Intel X5690硬件):
| 吞吐量 | 50%延迟 | 99%延迟 | 99.9%延迟 | 最差延迟 |
|---|---|---|---|---|
| 125K ops/s | 0.6µs | 1.4µs | 4µs | 41µs |
| 500K ops/s | 0.6µs | 1.6µs | 14µs | 42µs |
| 1M ops/s | 0.5µs | 4µs | 22µs | 45µs |
| 5M ops/s | 1.5µs | 42µs | 150µs | 190µs |
| 7M ops/s | 60µs | 1.8ms | 1.9ms | 1.9ms |
核心设计原则:
- HFT优化:专为高频交易场景设计
- 内存工作状态:数据常驻内存,避免磁盘I/O
- 无浮点数计算:使用整数运算彻底杜绝精度丢失
- 多核并行:充分利用CPU多核能力
独特价值:
- 完整交易系统参照:不仅包含撮合,还有风控、账务、持久化模块
- 无锁并发实战:Disruptor是所有追求极致性能的Java工程师的必修课
- 工业级验证:有明确的生产部署案例
三个交易框架侧重点
| 阶段 | 主要任务 | 重点项目 | 学习目标 |
|---|---|---|---|
| 第一阶段 | 掌握核心理论 | Liquibook | 彻底理解订单簿与撮合算法,这是基础 |
| 第二阶段 | 攻克高性能实现 | CppTrader | 学习现代C++低延迟技术,对比Liquibook看优化点 |
| 第三阶段 | 理解工业级完整系统 | exchange-core | 理解完整的交易系统架构,拓展Java高性能视野 |
交叉学习对比点,在熟悉三个代码库后,可以带着以下几个"对比任务"回过头来审视:
- 订单簿的实现差异:Liquibook(Header-Only)、CppTrader(模块化)、exchange-core(Java对象池)的结构差异
- 性能优化的思路:Liquibook(算法优化) vs CppTrader(内存/线程优化) vs exchange-core(无锁并发)的优化哲学
- 各语言的并发模型:研究它们如何利用各语言独特的并发特性
综合来看,Liquibook是“主干”和“灵魂”(撮合算法),CppTrader是“骨架”(高性能组件集),而 exchange-core 是“血肉”(完整交易系统)。能打通这三者,你对整个交易系统领域的认知将相当扎实。