Skip to content

DaYangtuo247/orderflow-engine

Repository files navigation

模拟股票交易对敲撮合系统

2026年 武汉大学 & 中信证券 校企合作实践项目

主要面向 A 股主板交易规则,构建完整的模拟股票交易对敲撮合系统

项目书: 武汉大学校企合作实践项目 2026 - 模拟股票交易对敲撮合系统

demo 视频

核心功能

交易流程

  • 订单接收 — HTTP API 接收交易订单/撤单请求
  • 风控校验 — 对敲检测(同股东号反向挂单拦截)+ 基础字段校验
  • 撮合引擎 — 价格优先、时间优先算法,C++高性能实现
  • 实时推送 — WebSocket 推送成交回报、订单确认、拒单消息
  • 数据持久化 — PostgreSQL 记录完整交易历史

前端可视化

  • 订单簿实时展示(买卖五档)
  • 交易面板(下单/撤单表单)
  • K线图(成交历史)
  • 实时成交推送
  • 交易量统计

技术栈

模块 技术 说明
接入层 Go 1.x, gRPC, goccy/go-json HTTP/JSON Gateway
读路径层 Go 1.x + PostgreSQL/Redis 查询接口 / 读模型
存储层 Python 3.12, SQLAlchemy, grpcio, redis Worker + 持久化
撮合引擎 C++17/20, gRPC 高性能撮合服务
缓存层 Redis 7 (Docker) 订单簿快照、会话管理
数据库 PostgreSQL 15 (Docker) 数据持久化
前端 React + TypeScript, lightweight-charts 交互式界面
测试 pytest, pandas 单元测试、数据分析

主链路:

HTTP JSON 请求
↓
Go Gateway(交易入口 / WS / 查询)
↓
交易请求 -> C++ Matching Service
↓
gRPC Streaming 事件流
↓
Python Worker / PostgreSQL / Redis

详细结构看 docs/ARCHITECTURE.md架构设计与接口规范

Locust 压力测试结果

压测详细报告

编译流程

# 1. 编译 C++ 撮合服务
cd backend/core
mkdir -p build && cd build
cmake ..
make
cd ../../..

# 2. 编译 Go Gateway
cd backend/gateway
go build -o go-gateway ./cmd/gateway
cd ../../

# 3. 前端依赖安装(如需生产构建可 npm run build)
cd frontend
npm install
cd ..

启动流程

# 1. 启动依赖服务(PostgreSQL/Redis)
docker-compose down && docker-compose up -d

# 2. 启动撮合服务
./scripts/perf/start_matching_server.sh

# 3. 启动 Go Gateway 集群
MATCHING_GRPC_TARGET=unix:///tmp/orderflow-engine/matching.sock ./scripts/perf/start_go_gateway_cluster.sh

# 4. 启动 Nginx 负载均衡
./scripts/perf/start_gateway_lb.sh

# 5. 启动 Worker
conda activate orderflow-engine
PYTHONPATH=backend/contracts/python python -m backend.persistence.worker

# 6. 启动前端(可选)
cd frontend
npm run dev

所有 gateway/shard/worker 数量、端口、连接池等参数均可自动推导。如需自定义,可通过环境变量覆盖,详见 scripts/README.md

一键停止

./scripts/perf/stop_gateway_lb.sh
./scripts/perf/stop_go_gateway_cluster.sh
./scripts/perf/stop_matching_server.sh

这些 stop 脚本会优先按 .run/*.pid 停止进程,再按本项目二进制或 nginx conf 路径做一次兜底清理,避免 pid 文件丢失时残留进程。

详细启动步骤

1. 启动Docker

docker-compose down && docker-compose up -d

2. 编译 C++ 撮合服务

cd backend/core
mkdir -p build && cd build
cmake ..
make

3. 启动 Go Gateway 集群

推荐使用 Go gateway 作为交易热路径入口。当前模式:

  • 单请求 unary gRPC
  • 单个 C++ matching 服务进程内部按股票分 shard
  • Go 负责交易入口、协议适配、WebSocket,以及 snapshot / stats / kline / analysis 等查询接口
  • 数据库和缓存读取在 Go 层完成,Python 主要负责 worker / mock / seed / 工具脚本
  • 前置 Nginx / LB 负责把 HTTP JSON 请求分发到多个 Go gateway 实例

默认参数:

  • 默认按本机 CPU 自动推导 trade/read gateway 实例数
  • 默认按本机 CPU 自动推导 MATCHING_GRPC_POOL_SIZE
  • 默认按本机 CPU 自动推导 GOMAXPROCS
  • 默认按本机 CPU 自动推导 C++ MATCHING_SHARD_COUNT

单实例启动(使用Unix Domain Socket):

cd backend/gateway
go build -o go-gateway ./cmd/gateway
MATCHING_GRPC_ADDR=unix:///tmp/orderflow-engine/matching.sock ./backend/core/build/matching_grpc_server
MATCHING_GRPC_TARGET=unix:///tmp/orderflow-engine/matching.sock ./go-gateway

显式切回 TCP:

MATCHING_GRPC_ADDR=127.0.0.1:50051 ./backend/core/build/matching_grpc_server
MATCHING_GRPC_TARGET=127.0.0.1:50051 ./backend/gateway/go-gateway

多实例启动:

./scripts/perf/start_matching_server.sh
MATCHING_GRPC_TARGET=unix:///tmp/orderflow-engine/matching.sock ./scripts/perf/start_go_gateway_cluster.sh
./scripts/perf/start_gateway_lb.sh

高性能模式已经固化到脚本默认值,默认关闭:

  • GATEWAY_ENABLE_READ_MODEL - 读模型(订单簿快照、统计/K线/分析等查询接口)
  • GATEWAY_ENABLE_WS - WebSocket 实时推送
  • GATEWAY_ENABLE_TIMING - 链路埋点

如果要跑全功能模式,再显式打开:

GATEWAY_ENABLE_READ_MODEL=1 \
GATEWAY_ENABLE_WS=1 \
GATEWAY_ENABLE_TIMING=1 \
MATCHING_GRPC_TARGET=unix:///tmp/orderflow-engine/matching.sock \
./scripts/perf/start_go_gateway_cluster.sh

启动 Nginx / LB:

./scripts/perf/start_gateway_lb.sh

对外入口:

  • http://127.0.0.1:18000

停止:

./scripts/perf/stop_gateway_lb.sh
./scripts/perf/stop_go_gateway_cluster.sh
./scripts/perf/stop_matching_server.sh

运行产物:

  • .run/*.pid:各后台进程的 pid 文件
  • .run/nginx/go_gateway_lb.conf:nginx 负载均衡的临时配置文件,stop 时默认保留,方便复用或排查
  • tests/report/raw-logs/*.log:各服务启动日志和运行日志

4. 启动 Python Mock(可选)

mock 用于产生模拟数据,直接打中HTTP接口上:

python -m backend.mock.simulator

也可以用脚本:

./scripts/mock/start_mock.sh
./scripts/mock/stop_mock.sh

5. 启动前端

cd frontend
npm install
npm run dev

访问:http://localhost:3000

项目目录结构

orderflow-engine/
├── README.md                    # 项目入口文档
├── docker-compose.yml           # Docker 编排
│
├── backend/
│   ├── contracts/               # 协议定义与生成代码
│   │   ├── proto/               #   protobuf 源文件
│   │   ├── go/                  #   Go protobuf / gRPC 生成代码
│   │   └── python/              #   Python protobuf / gRPC 生成代码
│   ├── core/                    # C++ 撮合核心与 gRPC matching service
│   │   ├── include/
│   │   ├── src/
│   │   ├── CMakeLists.txt
│   │   └── build/
│   ├── gateway/                 # Go 交易网关(HTTP/JSON -> 微批 -> UDS gRPC)
│   │   ├── main.go              #   启动入口
│   │   ├── config.go            #   网关配置
│   │   ├── http.go              #   HTTP 接入与交易/查询接口
│   │   ├── grpc_pool.go         #   gRPC 长连接池(默认 UDS)
│   │   ├── batching.go          #   按证券分桶微批
│   │   ├── state.go             #   内存读模型与统计/K线/分析
│   │   ├── ws.go                #   WebSocket 广播
│   │   ├── timing.go            #   链路埋点
│   │   ├── bench.go             #   基准模式
│   │   └── go.mod
│   ├── persistence/             # Python 持久化/缓存/ORM/事件消费
│   │   ├── cache_service.py
│   │   ├── db_models.py
│   │   ├── db_session.py
│   │   ├── events/
│   │   ├── settings.py
│   │   ├── worker.py
│   │   ├── requirements.txt
│   │   └── Dockerfile
│   ├── mock/                    # Python mock 模拟客户端与 seed 数据
│   │   ├── simulator.py
│   │   └── seed/
│
├── frontend/                    # React 前端([jtyxhnc](https://github.com/jtyxhnc))
│   ├── src/
│   │   ├── components/          #   React 组件(TradingPanel, OrderBook, KLineChart)
│   │   ├── services/            #   API 客户端(HTTP + WebSocket)
│   │   └── App.tsx              #   应用入口
│   ├── package.json             #   前端依赖
│   └── tsconfig.json            #   TypeScript 配置
│
├── db/
│   └── init.sql                 # 数据库建表脚本(Docker 启动时自动执行)
│
├── tests/                       # 压测与报告(仅保留压力测试相关内容)
│   ├── locust/                  #   端到端业务流压测(throughput/closed-loop)
│   ├── wrk/                     #   HTTP 吞吐极限基准
│   ├── grpc/                    #   Go 直连 C++ gRPC 基准
│   ├── report/                  #   测试报告与原始日志(压测自动生成)
│   ├── requirements.txt
│   └── README.md
│
├── scripts/                     # 启停、生成代码、LB 辅助脚本
│   ├── gen_proto.sh
│   ├── start_go_gateway_cluster.sh
│   ├── start_gateway_lb.sh
│   └── start_mock.sh
│
└── docs/                        # 项目文档
    ├── README.md                #   文档索引与阅读指南
    ├── TASKS.md                 #   任务分工与开发计划(优先读)
    ├── ARCHITECTURE.md          #   架构设计与接口规范(最核心)
    ├── API.md                   #   API 协议文档
    ├── DB.md                    #   数据库设计文档
    └── pressure_result.md       #   压力测试结果

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors