一、做市商系统概述
大家好,我是这次课程的主讲人。在量化交易这个圈子里摸爬滚打了十几年,我见过太多系统因为高可用设计不到位,在行情剧烈波动时直接「躺平」——那场面,真是惨不忍睹。今天咱们就来聊聊做市商系统,以及为什么高可用对它来说就是命根子。
1.1 什么是做市商系统
做市商系统,说白了就是一套自动报价和成交的软件。它的核心任务很简单:同时挂出买单和卖单,赚取中间的价差。
你可能会问:「这不就是低买高卖吗?」嗯,道理是这么个道理,但实际操作起来,复杂度完全不在一个量级。
我举个例子。假设你在交易ETH/USDT这个币对。做市商系统需要实时监控盘口深度、计算合理价格、动态调整报价、管理库存风险……所有这些操作,必须在毫秒级完成。手动交易?想都别想。
核心定义:做市商系统是一套自动化交易软件,它通过持续提供双边报价(买入价和卖出价),为市场提供流动性,并从买卖价差中获利。
1.2 做市商的核心业务逻辑
做市商的业务逻辑,其实可以拆解成几个关键环节。我在项目中遇到过不少团队,连这几个环节都没搞清楚就开始写代码,结果可想而知。
1.2.1 报价生成
这是最基础的一步。系统需要根据市场行情,计算出合理的买入价和卖出价。通常我们会参考以下几个因素:
- 中间价(Mid Price):通常是买一价和卖一价的均值,或者从多个交易所加权计算
- 价差(Spread):根据市场波动率、库存情况动态调整
- 库存偏移(Inventory Skew):如果手里某个币太多,报价就要偏向卖出
我曾经接手过一个项目,他们的报价逻辑写死了价差,结果市场一波动,直接亏掉了一周的利润。嗯,从那以后我养成了一个习惯:所有参数必须可动态配置。
1.2.2 订单管理
报价生成之后,需要把订单发到交易所。这里涉及几个关键操作:
- 挂单:把买单和卖单同时挂到盘口
- 撤单:当价格变化或需要调整时,撤销旧订单
- 重挂:根据新价格重新挂单
- 成交处理:订单成交后,更新库存和盈亏
你想想看,如果撤单延迟了100毫秒,而行情在这100毫秒内剧烈波动,会发生什么?对,你会以不利价格成交。这就是为什么低延迟在做市商系统里如此重要。
1.2.3 风险管理
做市商不是印钞机,风险控制不到位,分分钟爆仓。我个人习惯把风险分为三类:
| 风险类型 | 说明 | 常见应对措施 |
|---|---|---|
| 市场风险 | 价格不利波动导致亏损 | 动态调整价差、设置止损 |
| 库存风险 | 某个币种持仓过大 | 库存偏移算法、对冲交易 |
| 操作风险 | 系统故障、网络延迟 | 冗余设计、熔断机制 |
注意:很多新手做市商只关注市场风险,忽略了操作风险。我见过最惨的一次,交易所API升级,他们的系统没做兼容处理,结果所有订单都卡住了,库存敞口暴露了整整30分钟……
1.3 高可用的重要性
做市商系统对高可用的要求,怎么说呢,比银行系统还苛刻。为什么?因为做市商是「7×24小时」运行的,而且每一秒都在产生盈亏。
我给大家算一笔账。假设你的做市商系统每天交易量是1000万U,利润率是0.01%。那么:
- 每秒钟的预期利润大约是:1000万 × 0.01% ÷ 86400 ≈ 0.0116 U
- 看起来不多对吧?但如果你停机1小时,损失就是:0.0116 × 3600 ≈ 41.76 U
- 更重要的是,停机期间可能错过行情,实际损失远不止这个数
这还只是直接损失。间接损失更可怕:
- 信誉损失:交易所可能降低你的做市商等级
- 机会成本:错过一波大行情,可能损失几天的利润
- 合规风险:某些交易所对做市商的在线率有硬性要求
我的经验:做市商系统的高可用设计,不能只盯着「不宕机」这一个指标。还要考虑「降级运行」——也就是系统部分功能失效时,还能不能继续报价。我曾经设计过一个方案,即使数据库挂了,系统也能基于本地缓存继续运行30分钟。这30分钟,可能就是救命的时间。
1.4 做市商系统的整体架构
说了这么多,咱们来看看做市商系统的整体架构长什么样。下面这张图是我根据多年经验总结的,你可以把它当作一个参考模板。
这张图展示的是做市商系统的核心分层。从上到下依次是:行情数据层、策略引擎层、订单管理层、风控与监控层。每一层都有自己独立的高可用设计,后面几章我会详细展开。
你可能会注意到,左侧有一个「高可用保障层」。这不是一个独立的模块,而是贯穿所有层的设计理念。包括:
- 冗余设计:关键组件至少双活
- 故障转移:主节点挂了,备用节点秒级接管
- 数据一致性:即使发生故障,订单状态也不能乱
- 降级策略:部分功能失效时,系统还能继续运行
一句话总结:做市商系统的高可用,不是「要不要」的问题,而是「必须做到什么程度」的问题。我见过太多团队在这个问题上栽跟头,希望你能从这门课里学到真正的实战经验。
好了,这一章就到这里。做市商系统的概念和核心逻辑,咱们已经讲清楚了。下一章我会深入讲解高可用架构设计的具体方案,包括如何做冗余、如何做故障转移、如何保证数据一致性——这些都是我在实战中踩过坑之后总结出来的经验。