一、做市引擎概述

做市引擎,说白了就是一套自动报价系统。它不停地向市场挂买单和卖单,赚取中间的价差。我刚开始接触这个领域时,觉得这不就是低买高卖嘛,有什么难的?后来真正上手才发现,这里面的门道深着呢。

你想想看,一个合格的做市引擎,每秒要处理成千上万笔订单,同时还要管理风险、控制库存、预测价格走势。这可不是简单的买卖逻辑能搞定的。

什么是做市引擎

做市引擎是一套自动化交易系统。它的核心任务是在交易所同时挂出买单和卖单。比如比特币现价30000美元,做市引擎可能在29990挂买单,在30010挂卖单。只要市场波动,就能赚到这20美元的差价。

我在项目中遇到过最典型的情况:一个客户想给自家交易所做流动性。他们之前用手工做市,三个人轮班,每人盯8小时。结果呢?经常漏单、报价延迟、甚至挂错价格。后来换成做市引擎,这些问题全解决了。

核心要点:做市引擎不是简单的买卖机器人。它需要实时分析市场深度、订单簿状态、历史波动率,然后动态调整报价策略。

做市引擎的核心功能

一个完整的做市引擎,至少包含以下五个功能模块。我按重要程度排了个序:

  1. 订单管理 - 负责创建、修改、撤销订单。嗯,这里要注意,交易所的API限频很严格,我曾经因为没处理好限频,被交易所封了半小时。
  2. 风险管理 - 控制库存、设置最大亏损、监控异常波动。说白了就是保命用的。
  3. 报价策略 - 决定挂什么价格、挂多少量。这是做市引擎的大脑。
  4. 市场数据 - 实时获取行情、深度、成交记录。数据慢了,报价就废了。
  5. 性能监控 - 跟踪延迟、成交率、盈亏情况。我习惯每5秒输出一次性能指标。

这五个模块缺一不可。你想想看,如果风险管理没做好,一次黑天鹅事件就能让你爆仓。我见过太多这样的案例了。

做市引擎在量化交易中的角色

做市引擎在量化交易体系里,扮演着「流动性提供者」的角色。它不像趋势策略那样追涨杀跌,也不像套利策略那样寻找价差。做市引擎的核心价值在于:

  • 稳定市场 - 通过持续报价,缩小买卖价差,降低交易成本
  • 赚取价差 - 每笔交易赚一点点,积少成多
  • 降低冲击成本 - 大单交易时,做市引擎可以帮忙消化

我记得有一次,一个朋友问我:「做市引擎和普通量化策略有什么区别?」我打了个比方:普通策略像猎人,找到猎物就出击;做市引擎像农夫,每天耕耘,稳定收获。两者没有好坏之分,只是赚钱的逻辑不同。

个人经验:做市引擎最适合波动率适中的市场。波动太小,价差赚不到钱;波动太大,风险控制不住。我一般选择日均波动率在1%-3%之间的品种。

做市引擎的核心架构

下面这张图展示了一个典型做市引擎的架构。我画了不下十版才定下来这个结构:

做市引擎核心架构图 市场数据层 行情数据 | 深度数据 | 成交数据 | 账户数据 策略引擎 报价策略 | 风险管理 | 库存管理 | 成本计算 波动率分析 | 价差优化 | 订单调度 订单管理 订单创建 | 订单修改 | 订单撤销 | 订单状态跟踪 交易所接口 WebSocket | REST API | 限频管理 | 重连机制 交易所 监控模块 延迟监控 成交率统计 盈亏计算 报警通知 日志记录

这张图我用了很多年。每次给团队新人讲解,我都会指着它说:「记住这个结构,做市引擎就这些东西。复杂的是每个模块里的细节。」

避坑指南:我曾经犯过一个错误——把策略引擎和订单管理混在一起写。结果每次改策略都要动订单管理的代码,出了好几次生产事故。后来我强制要求:策略引擎只负责计算报价,订单管理只负责执行。职责分离,这是血的教训。

做市引擎的技术选型

说到技术选型,我个人习惯用Python做原型开发,用C++做核心引擎。为什么?Python开发快,适合快速迭代;C++性能好,适合高频场景。

下面是我常用的技术栈:

模块 技术选型 说明
市场数据 WebSocket + asyncio 实时性要求高,必须用异步IO
策略引擎 Python + NumPy 计算密集型,用NumPy加速
订单管理 C++ 延迟敏感,必须用底层语言
数据存储 InfluxDB + PostgreSQL 时序数据用InfluxDB,业务数据用PG
监控告警 Prometheus + Grafana 开源方案,够用

你可能会问:为什么不用Go?Go的并发确实好,但生态不如Python丰富。我试过用Go重写策略引擎,结果发现很多量化库都没有Go版本,最后还是换回Python了。

做市引擎的常见误区

这些年我带过不少团队,发现新手做市引擎时容易犯几个错误:

  • 过度优化 - 一上来就追求微秒级延迟。其实对于大多数品种,毫秒级就够了。先跑起来,再优化。
  • 忽视风控 - 只想着赚钱,没想过亏钱。我见过有人一天赚了10万,第二天亏了50万。风控不是摆设。
  • 策略太复杂 - 一个策略里塞了十几个参数。参数越多,过拟合风险越大。我一般控制在3-5个核心参数。

我的建议:刚开始做做市引擎,先跑模拟盘。模拟盘跑一个月,把各种边界情况都测一遍。我曾经在模拟盘上发现过一个bug——订单簿深度为0时程序会崩溃。这个bug要是上了实盘,后果不堪设想。

做市引擎这个领域,说难不难,说简单也不简单。核心就三点:报价要快、风控要严、策略要稳。把这三点做好了,你的做市引擎就能稳定盈利了。


专注资料整理