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, 低延迟, 依赖分析, 撮合引擎, 逆向工具, 金融交易系统, 高频交易