adityashirsatrao007/order-matching-engine
GitHub: adityashirsatrao007/order-matching-engine
基于 C++17 的低延迟限价订单撮合引擎,实现了价格-时间优先级撮合并通过 FastAPI+WebSocket 提供实时行情数据服务。
Stars: 0 | Forks: 0
# 🔒 订单撮合引擎
一个**低延迟限价订单撮合引擎**,采用价格-时间优先级,
使用 C++17 编写,零外部依赖。旨在作为驱动电子交易的系统组合级别的演示:不可变订单模型、确定性的撮合核心、成交流水以及 WebSocket 行情数据流。
```
┌──────────────────────────┐
Client order ──▶ │ Matching Engine (C++) │ ──▶ Trade tape
│ price-time priority │
│ FIFO within level │ ──▶ Order book depth
└──────────────────────────┘
│
▼
┌──────────────────────────┐
│ FastAPI + WebSocket │
│ REST /orders /depth │
│ WS /ws (live ticks) │
└──────────────────────────┘
```
## 为什么做这个项目
电子交易所和交易公司的运行依赖于撮合引擎。
本项目演示了在低延迟系统中反复出现的核心工程问题:
- **价格-时间优先级** — 最优价格优先,同一价位遵循 FIFO
- **订单生命周期** — GTC / IOC / FOK、部分成交、撤单、拒绝
- **确定性** — 相同的输入产生相同的成交(不使用浮点数,使用整数数量)
- **可观测性** — 通过 callback 获取成交流水 + 订单簿深度快照
- **延迟控制** — 测量 µs/订单吞吐量的基准测试套件
## 功能矩阵
| 订单类型 | 有效期 | 支持 |
|---|---|---|
| `LIMIT` | GTC / IOC / FOK | ✅ |
| `MARKET` | GTC / IOC / FOK | ✅ |
| `STOP` | GTC | ✅(由参考价格触发) |
| `STOP_LIMIT` | GTC | ✅(由参考价格触发) |
## 快速开始
```
# 构建所有内容
make
# 运行单元测试(无外部 framework)
make test
# 交互式 CLI — 尝试: S 10 100 → B 10 50 → M B 25 → X → q
./build/ome-cli
# 延迟 / 吞吐量 benchmark(1,000,000 个可成交订单)
make bench
```
### 预期基准测试概况(因机器而异)
```
bench: 1000000 marketable orders in 1234.56 ms (1.23 us/order, 810000 orders/sec)
```
## 实时行情数据流(Python)
```
cd server
pip install -r requirements.txt
uvicorn main:app --reload --port 8000
```
- `POST /orders` — 提交订单(JSON)
- `DELETE /orders/{id}` — 撤单
- `GET /depth` — 当前订单簿深度
- `WS /ws` — 实时推送成交和深度变化
## 项目结构
```
├── engine/ # C++ core (no external deps)
│ ├── order.h # order model, enums
│ ├── types.h # fills, levels, accept results
│ ├── order_book.h # price-time priority book interface
│ ├── order_book.cpp
│ ├── matching_engine.h / .cpp
│ └── main.cpp # CLI demo + benchmark
├── tests/test_engine.cpp
├── server/ # FastAPI + WebSocket bridge
├── bench/ # benchmark notes
├── .github/workflows/ci.yml # build + test on every PR
└── Makefile
```
## 下一步改进计划
- 添加常驻**止损订单簿**(目前止损订单仅在最后的参考价格触发,这是一个简化处理)
- 在引擎和数据流发布者之间使用无锁队列
- 为每个已接受的订单添加持久化/审计日志(WAL)
- 实现真正的 `tcp_nodelay` WebSocket 扇出,并支持基于客户端的背压(backpressure)
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:AV绕过, C++17, FastAPI, HTTP头分析, WebSocket, 低延迟, 依赖分析, 撮合引擎, 逆向工具, 金融交易系统, 高频交易