2026年 武汉大学 & 中信证券 校企合作实践项目
主要面向 A 股主板交易规则,构建完整的模拟股票交易对敲撮合系统。
项目书: 武汉大学校企合作实践项目 2026 - 模拟股票交易对敲撮合系统
交易流程:
- 订单接收 — 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 和 架构设计与接口规范。
# 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 文件丢失时残留进程。
docker-compose down && docker-compose up -dcd backend/core
mkdir -p build && cd build
cmake ..
make推荐使用 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:各服务启动日志和运行日志
mock 用于产生模拟数据,直接打中HTTP接口上:
python -m backend.mock.simulator也可以用脚本:
./scripts/mock/start_mock.sh
./scripts/mock/stop_mock.shcd frontend
npm install
npm run devorderflow-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 # 压力测试结果

