第一章:做市商项目实战——从零搭建做市商系统

做市商系统,说白了就是一台「自动赚钱机器」。但很多人一上来就追求高频、低延迟,结果系统还没跑稳就先亏了一笔。我个人习惯是:先搭骨架,再填血肉,最后打磨细节。

这一章,我会带你完整走一遍做市商系统的搭建流程。从策略开发到上线运维,每个环节我都会分享一些踩过的坑和总结的经验。

1.1 系统架构设计

先看整体架构。我画了一张图,帮你快速建立全局认知:

做市商系统架构图 数据源层 交易所行情API · 深度数据 · 成交数据 · 资金数据 策略引擎层 定价模型 · 库存管理 · 风险控制 · 订单生成 价差计算 · 对冲逻辑 · 参数调优 执行层 订单管理 · 撤单重发 · 成交确认 · 资金结算 监控与运维层

这个架构分四层,每层各司其职。数据源层负责「看」,策略引擎层负责「想」,执行层负责「做」,监控层负责「盯」。我见过不少团队把逻辑全塞在一层里,结果改个参数都要重启整个系统——这其实很危险。

1.2 策略开发全流程

做市商策略的开发,我总结了一套标准流程。你照着走,基本不会出大问题。

第一步:数据准备

没有数据,策略就是空中楼阁。你需要准备:

  • 历史行情数据:至少3个月的 tick 级数据
  • 深度快照数据:买卖盘口的变化记录
  • 成交数据:每一笔成交的价格和数量

我在项目中遇到过一个问题:历史数据采样频率太低,导致回测结果严重失真。后来我改用毫秒级数据,效果才正常。

第二步:定价模型开发

定价是做市商的核心。常用的模型有:

模型名称 适用场景 核心参数
Avellaneda-Stoikov 股票、期货 风险厌恶系数、波动率
库存驱动模型 加密货币 库存阈值、对冲比例
价差回归模型 ETF、配对交易 回归周期、标准差倍数

我个人习惯先用 Avellaneda-Stoikov 做基础框架,再根据实际市场情况调整参数。说白了,没有万能模型,只有最适合当前市场的模型。

第三步:回测验证

回测不是跑一遍就完事了。你需要关注:

  • 盈亏曲线:是否平稳向上?有没有大回撤?
  • 成交率:挂单成交比例是否合理?
  • 库存风险:极端行情下库存是否可控?
⚠️ 注意: 回测表现太好往往有问题。我见过一个策略回测年化50%,上线一周就亏了10%。后来发现是回测时忽略了滑点和手续费。

1.3 上线部署与运维

策略开发完,接下来就是上线。这一步很多人会忽略环境差异带来的问题。

部署环境配置

我建议用 Docker 容器化部署,好处是环境一致、迁移方便。以下是一个简单的 Dockerfile 示例:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "market_maker.py"]

嗯,这里要注意:生产环境一定要用 --no-cache-dir,不然镜像体积会大得离谱。

运维监控要点

上线后,你需要盯住这几个指标:

  • 延迟监控:从行情到下单的延迟是否稳定?
  • 订单状态:是否有大量未成交或撤单?
  • 资金变化:账户余额是否异常波动?
💡 小技巧: 我曾经在监控面板上加了「心跳检测」,每5秒检查一次系统是否正常响应。有一次凌晨3点系统挂了,心跳告警直接把我叫醒,避免了更大的损失。

1.4 性能调优实战

做市商对性能要求很高。你想想看,别人比你快1毫秒,可能就把你的单子抢走了。

常见性能瓶颈

瓶颈类型 原因 优化方案
网络延迟 服务器距离交易所远 托管机房、专线连接
CPU瓶颈 计算复杂度过高 使用C++/Rust重写核心逻辑
内存瓶颈 数据缓存过多 使用环形缓冲区、内存池

实战优化案例

我记得有一次,系统延迟从2毫秒飙升到50毫秒。排查后发现是日志打印太多,阻塞了主线程。解决方案很简单:

  • 把日志改成异步写入
  • 减少不必要的日志输出
  • 关键路径上只记录异常情况

改完之后,延迟降到了3毫秒以内。所以说,有时候问题不在算法,而在细节。

核心总结:

  • 系统架构要分层清晰,各层职责单一
  • 策略开发要数据先行,回测要严谨
  • 上线部署用容器化,监控要全面
  • 性能调优从瓶颈入手,不要盲目优化

做市商系统搭建,说白了就是「稳」字当头。你先把基础打牢,后面再慢慢优化。这一章的内容,是我多年实战经验的浓缩。你照着做,至少能少走一半弯路。

交易系统化学习资料 微信Strategy888888