做市策略

交易所做市:策略与系统

深入解析做市原理、盈利机制、数据采集、策略设计(对称式、库存偏斜、Avellaneda-Stoikov模型)、数学模型、风险管理、系统架构与部署——附带交互演示。

1. 什么是做市?

做市商在交易所持续挂出买单和卖单(bid/ask),通过买卖价差获利,同时为其他参与者提供流动性。做市商是流动性市场的基石——没有他们,价差会很大,滑点很高,交易成本昂贵。

金融生态系统中的角色

市场生态由多种参与者组成,各自扮演不同角色。做市商提供双边流动性并赚取价差。吃单者通过跨越价差即时交易。套利者保持各交易所价格一致。交易所提供基础设施并收取手续费。

做市商
持续挂出买卖单,从价差中获利,提供流动性
吃单者
以市价单跨越价差立即买卖,支付价差成本
套利者
利用不同交易所或相关品种之间的价格差异获取无风险利润
交易所
提供交易场所、订单撮合和结算——从所有参与者处赚取手续费

指定做市商 vs 算法做市商

指定做市商(DMM)与交易所签订正式协议:享受手续费折扣和返佣,但需履行在线率和价差义务。独立/算法做市商无正式协议,纯粹依靠策略和技术竞争。

加密货币 vs 传统金融

7×24小时市场
加密市场永不休市——你的系统必须持续运行,不能停机
流动性碎片化
数十家交易所,各自独立的订单簿和不同的价格
更高的波动率
加密资产一天可以波动5-20%,而股票通常只有1-2%
监管较少
规则较少但保护也更少——对手方风险是真实存在的

2. 订单簿与微观结构

订单簿是任何交易所的核心数据结构。它维护所有未成交的买单(bid)和卖单(ask),按价格层级组织。理解订单簿的微观结构是做市的基础。

订单簿结构

买单(Bids)按价格从高到低排列的买入订单——买方
卖单(Asks)按价格从低到高排列的卖出订单——卖方
最优买价(BB)当前有人愿意买入的最高价格
最优卖价(BA)当前有人愿意卖出的最低价格
中间价最优买价和最优卖价的平均值:(BB + BA) / 2
价差最优买价和最优卖价之间的差距:BA - BB
深度每个价格层级的总订单数量

订单类型

限价单
以指定价格或更优价格买入/卖出的订单。挂在订单簿中直到成交或取消。做市商使用这种订单。
市价单
以当前最优价格立即买入/卖出的订单。跨越价差。吃单者使用这种订单。
只做Maker单
保证作为挂单方的限价单(如果会立即成交则被拒绝)。做市商必备。
IOC(立即成交或取消)
尽可能多地立即成交,剩余部分取消。
FOK(全部成交或取消)
要么全部立即成交,要么完全取消。

行情数据级别

Level 1(最优报价)仅最优买/卖价——最快,数据量最少。
Level 2(深度)每侧多个价格层级(通常前5-20档)。做市最常用。
Level 3(完整)每个独立订单及其ID、价格、数量和时间戳。数据最丰富,带宽最大。

队列位置与价格-时间优先

大多数交易所使用价格-时间优先(FIFO):同一价格的订单按下单时间顺序成交。在某一价格层级排在第一位意味着你比后来的订单先被成交。这就是速度重要的原因——即使在加密市场也是如此。做市商如果取消并重新下单,会失去队列位置,这是有成本的。

交互演示:订单簿模拟器

订单簿模拟器
价格数量累计
卖方(Asks)
104.007.807.80
103.502.2010.00
103.004.7014.70
102.506.0020.70
102.003.3024.00
101.505.6029.60
101.002.9032.50
100.504.1036.60
价差: 1.00  |  中间价: 100.00
买方(Bids)
99.503.203.20
99.005.108.30
98.502.8011.10
98.007.4018.50
97.504.0022.50
97.006.3028.80
96.503.5032.30
96.008.2040.50
下单
中间价$100.00
价差$1.00
买方(Bids)8 累计: 40.50
卖方(Asks)8 累计: 36.60
成交记录
暂无成交
订单簿已就绪。下单查看订单如何交互。

3. 做市如何盈利

做市商从买入价和卖出价之间的差价——买卖价差中赚钱。但实际利润比简单的价差捕获更复杂,因为逆向选择、库存风险和手续费都会侵蚀利润。

买卖价差

如果做市商报价 bid = $100.00,ask = $100.10,价差为 $0.10。如果有人卖给做市商(成交买单),然后另一个人买入(成交卖单),做市商每单位赚取 $0.10——一个完整的往返交易。

实现价差 vs 报价价差

报价价差是你挂出的价差。实现价差是扣除两次成交之间价格变动后的实际收益。如果你在 $100.00 买入,但当你卖出时,最优卖价已经变成 $100.05,你的实现价差只有 $0.05。

盈亏分解

价差捕获完整往返交易的买卖价差收入
Maker返佣许多交易所为提供流动性付费(Maker-Taker费用模型)
逆向选择成本被知情交易者在价格对你不利之前成交的损失
库存持有成本持有库存期间价格波动带来的风险
对冲成本在其他品种对冲库存的成本(手续费、价差)
基础设施成本服务器、机房托管、数据源、开发费用

每次往返交易利润

净盈亏 = 价差 - 2 × 吃单手续费 + 2 × 挂单返佣 - 逆向选择

计算示例

价差 = 1 tick ($0.01),挂单返佣 = 0.02%,吃单手续费 = 0.05%,价格 = $100。每次往返:$0.01 + 2 × $0.02 - 逆向选择。如果每天做10,000次往返,每次净赚 $0.005 = 每天 $50 利润。放大到 $1M 名义金额,数字就有意义了。

Maker-Taker 费用模型

大多数交易所向吃单者(跨越价差的人)收费,向做市商(提供流动性的人)支付返佣。一些交易所提供基于交易量的阶梯费率:交易量越大,返佣越高。在最高等级,挂单返佣可以达到 -0.01% 到 -0.02%。

交互演示:盈亏计算器

做市盈亏计算器

4. 数据采集与市场信号

做市系统的智能来自它消费的数据。原始市场数据被转化为驱动报价决策的信号。数据管道的质量和速度直接决定盈利能力。

原始市场数据

Level 1:最优报价最优买/卖价格和数量、最新成交价、24小时成交量——最基本的数据
Level 2:深度完整的订单簿快照(前5-20档)——做市的标准数据
Level 3:订单通过WebSocket获取的单个订单事件(新增、修改、取消、成交)——最丰富的数据
成交数据每笔成交交易的时间戳、价格、数量和主动方向

衍生信号

订单簿不平衡(OBI)
(买量 - 卖量) / (买量 + 卖量)——正值表示更多买入压力,预示短期价格上涨
交易流不平衡(TFI)
一段时间窗口内的净签名成交量——衡量买方还是卖方更激进
微观价格
ask × 买量 / (买量 + 卖量) + bid × 卖量 / (买量 + 卖量)——比简单中间价更好的公允价值估计
已实现波动率
滚动窗口内对数收益率的标准差——价差设定的关键输入
价差Z-Score
当前价差与滚动均值/标准差的比较——检测异常价差状况

跨市场数据

其他交易所的价格(用于套利检测)、指数价格、资金费率(永续合约)以及与BTC/ETH的相关性。如果BTC在Binance变动,你在OKX上的山寨币报价需要立即更新。

宏观信号

资金费率正资金费率 → 多头向空头支付 → 看空信号
未平仓量持仓量随价格上升 = 趋势延续;持仓量上升但价格不变 = 潜在反转
清算数据级联清算可导致价格突变——防御性地加大价差
社交情绪Twitter/Telegram活动激增可能先于波动率上升

数据基础设施

与交易所的WebSocket连接、增量更新的订单簿状态管理、检测到数据间断时的快照重建(通过序列号跟踪),以及多数据源间的时间戳同步。

5. 核心策略:对称做市

最简单的做市策略是在中间价两侧对称地挂出买单和卖单。这是理解更高级方法的起点。

工作原理

  1. 计算中间价:mid = (best_bid + best_ask) / 2
  2. 选择半价差:例如 half_spread = 0.05%
  3. 在 mid - half_spread 处挂买单
  4. 在 mid + half_spread 处挂卖单
  5. 当任一侧成交后,重新挂单
  6. 持续重复

选择价差宽度

更宽的价差 = 更少的成交风险 + 每笔更多的利润,但成交量较低。更窄的价差 = 更多的成交但更多的逆向选择。最优价差需要根据波动率、竞争和风险偏好来平衡。

多档报价

不是只在一个价格层级报价,而是在多个层级以不同数量报价。第1档(最接近中间价)数量最小,更深的档位数量更大。这在限制最优价格风险的同时提供了更多深度。

每档数量

固定数量每档相同数量——简单但不考虑更差价格的风险
几何衰减每个更深的档位 = 数量 × 衰减因子——例如 100, 80, 64, 51...
波动率调整数量与波动率成反比——波动大的市场用更小的数量

问题:库存累积

对称报价在均值回归、低波动的市场中效果很好。但在趋势行情中,一侧反复成交而另一侧不成交——累积大量方向性头寸。如果趋势继续,累积的库存会产生重大亏损。

交互演示:对称做市模拟器

对称做市模拟器

6. 库存管理与偏斜

库存风险是做市的核心问题。如果你累积了太多某种资产而价格下跌,你就会亏钱。库存偏斜通过调整报价来鼓励减少头寸的成交。

核心问题

别人卖的时候你买,别人买的时候你卖。在下跌趋势中,你的买单不断被成交——你累积的库存在贬值。在上涨趋势中,你的卖单不断被成交——你卖光了所有东西错过了上涨,或者更糟,做空了。

库存偏斜

调整报价以鼓励减少库存的成交。如果你多头持仓,让卖价更有竞争力(更低)以吸引卖方。如果你空头持仓,让买价更有竞争力(更高)以吸引买方。

  • 多头库存 → 降低卖价(鼓励卖出),提高买价(阻止买入)
  • 空头库存 → 降低买价(鼓励买入),提高卖价(阻止卖出)
  • 中性库存 → 对称报价

偏斜公式

bid = mid - half_spread + skew,ask = mid + half_spread + skew,其中 skew = -gamma × inventory × sigma²。Gamma(γ)是库存厌恶参数——越高的gamma意味着越激进的再平衡。

Gamma 参数

γ = 0无偏斜——等同于对称做市
γ = 0.01轻微偏斜——温和的库存减少
γ = 0.1中度偏斜——明显的报价不对称
γ = 1.0激进偏斜——强力推动库存回到目标

目标库存

目标可以是零(delta中性)或正/负值(方向性偏好)。纯做市时目标 = 0。看多的做市商目标 > 0(愿意持有一些多头头寸)。

仓位限制

库存最大值的硬性上限(例如 ±$100,000 名义金额)。当库存达到限制时,完全停止在该侧报价。这是防止无限风险敞口的最后防线。

对冲策略

Delta中性对冲
使用相关品种持续对冲库存(例如用ETH永续期货对冲现货ETH)
基于阈值的对冲
仅当库存超过阈值时对冲——减少对冲成本但承受更多风险
基于时间的对冲
每N秒重新平衡到目标库存——可预测但可能不是最优

交互演示:库存偏斜对比

库存偏斜对比

7. Avellaneda-Stoikov 模型

Avellaneda-Stoikov(AS)模型是最优做市的基础学术框架。它通过最大化终端财富的期望效用来计算最优买卖价格,平衡价差捕获与库存风险。

问题形式化

做市商希望最大化 E[U(W_T)],其中 U 是效用函数(通常是指数型:U(w) = -e^{-γw}),W_T 是时间 T 的终端财富,γ 是风险厌恶参数。

关键参数

σ(sigma)资产的波动率——以收益率的标准差衡量
γ(gamma)风险厌恶参数——越高表示做市商越厌恶风险
k订单到达强度——市价单到达的频率
T时间窗口——交易期结束时间
t当前时间
s当前中间价
q当前库存(正 = 多头,负 = 空头)

保留价格(无差异价格)

r(s, q, t) = s - q × γ × σ² × (T - t)

保留价格是做市商对持有当前库存无差异的价格。它根据库存偏离中间价:如果你多头持仓(q > 0),你的保留价格低于中间价(你对资产的估值更低,因为你已经持有太多)。

最优价差

δ(t) = γ × σ² × (T - t) + (2/γ) × ln(1 + γ/k)

最优价差有两个组成部分:(1) 库存风险补偿(γσ²τ),随着T的临近而减小;(2) 与订单到达率相关的部分(ln项)——到达频率越低 → 价差越宽以补偿等待。

最优买卖价

bid = r - δ/2,ask = r + δ/2

最终报价以保留价格(不是中间价!)为中心,加上最优价差。这在一个优雅的框架中同时处理了价差大小和库存偏斜。

加密市场的实际修改

  • 用滚动窗口替代 T-t(例如 τ = 300秒)——加密市场没有收盘
  • 添加最小价差约束——不能在tick size内报价
  • 添加最大库存约束——硬性仓位限制
  • 根据观察到的成交率动态估计 k,而非假设恒定
  • 使用EWMA波动率代替静态 σ——适应变化的市场条件
  • 添加延迟缓冲——稍微加大价差以考虑过期报价

交互演示:Avellaneda-Stoikov 模型

Avellaneda-Stoikov 模型
保留价格: r = s - q × γ × σ² × τ
最优价差: δ = γσ²τ + (2/γ)ln(1 + γ/k)
运行模型

8. 逆向选择与毒性检测

逆向选择是做市商最大的敌人。当知情交易者在价格即将变动时与你成交——你在价格上涨前卖出,或在价格下跌前买入——就发生了逆向选择。检测和避免有毒订单流至关重要。

什么是逆向选择?

你在 $100.10 挂了卖单。一个知情交易者(知道一个大买单即将到来)吃掉了你的卖单。价格立即涨到 $100.50。你在 $100.10 卖出,现在市场在 $100.50——你每单位亏损 $0.40。你 $0.05 的价差本应是利润,但逆向选择把它变成了 $0.35 的亏损。

衡量逆向选择

成交后价格冲击成交后N秒内的平均价格变化——冲击越大 = 逆向选择越严重
VPIN基于成交量同步的知情交易概率——通过比较买入和卖出成交量来衡量订单流的毒性
成交-中间价比率每次成交后中间价移动了多远——随机流应接近零

毒性信号

突然的大额市价单
大型市价单的激增信号知情交易——可能是新闻或巨鲸活动
订单簿变薄
当其他做市商撤走报价时,这是一个警告信号——他们知道些什么
跨交易所价格背离
如果同一资产在另一个交易所的价格急剧变动,套利者即将打击你的过期报价
关联资产大幅波动
BTC的突然暴跌会拖累所有山寨币——在被扫单之前更新你的山寨币报价

防御措施

  • 检测到毒性信号时加大价差
  • 高毒性期间减少报价数量
  • 在新闻事件或极端波动期间完全撤单
  • 使用断线取消功能防止停机期间的过期报价
  • 优化延迟——更快地对逆向信号做出反应意味着更少的亏损
  • 实施非对称衰减:减少被扫单一侧的数量

做市商的困境

你希望被噪音交易者(随机流,有利可图)成交,避免被知情交易者(有毒流,代价高昂)成交。但你无法总是实时区分两者。你能做的最好的是统计检测:监控你的成交,衡量逆向选择,并相应调整防御。

9. 数学框架与核心公式

本节汇总了做市中使用的所有关键数学公式。每个公式都给出了其用途、输入和实际解释。

中间价估计

NameFormulaNotes
简单中间价(best_bid + best_ask) / 2基本方法;忽略订单大小
微观价格P_ask × V_bid / (V_bid + V_ask) + P_bid × V_ask / (V_bid + V_ask)按订单量加权;更好的公允价值估计
VWAP中间价对前N档按成交量加权平均考虑完整订单簿深度

波动率估计

NameFormulaNotes
已实现波动率σ = std(log_returns) × √(N_periods)标准方法;仅使用收盘价
Parkinsonσ_P = √(1/(4N×ln2) × Σ(ln(H_i/L_i))²)使用最高-最低价范围;更高效的估计器
Garman-Klass结合开盘、最高、最低、收盘价最高效的单日估计器
EWMAσ²_t = λσ²_'{'{t-1'}' + (1-λ)r²_t指数加权;快速适应状态变化

订单到达与成交概率

NameFormulaNotes
泊松过程P(t时间内N次成交) = (λt)^N × e^'{'-λt'}' / N!模拟随机订单到达
成交概率P(fill) = A × e^'{'-k×δ'}'概率随距中间价的距离呈指数衰减

最优报价(Avellaneda-Stoikov)

NameFormulaNotes
保留价格r = s - q × γ × σ² × τ根据库存风险调整中间价
最优半价差δ*/2 = γσ²τ/2 + (1/γ)×ln(1 + γ/k)平衡风险与成交概率

风险指标

NameFormulaNotes
风险价值(VaR)VaR_α = -μt + z_α × σ × √t置信度α下时间t内的最大亏损
预期不足(CVaR)ES_α = -μt + σ√t × φ(z_α)/(1-α)超过VaR的平均亏损
最大仓位Q_max = VaR_limit / (z_α × σ × √t)从风险预算推导仓位限制

绩效指标

NameFormulaNotes
夏普比率SR = (R_portfolio - R_f) / σ_portfolio风险调整后收益;做市>2为佳
成交率成交数 / 总报价数 × 100%报价被执行的百分比
实现价差每次往返的实际盈亏逆向选择后的真实盈利能力

10. 策略变体与扩展

除了基本的对称式和库存偏斜做市,还存在许多策略变体。每种策略在复杂度、风险和潜在收益之间有不同的权衡。

策略描述复杂度适用场景
网格做市在固定价格间隔(网格间距)下单。从网格范围内的均值回归中获利。风险:价格突破网格范围,留下水下头寸。震荡市场
多档报价在多个价格层级以递减数量报价。捕获更多成交量但增加更差价格的库存风险。低-中流动性好的市场
跨交易所做市在交易所A报价,在交易所B对冲。从不同场所的价差差异中获利。需要与两个交易所的快速连接。碎片化市场
统计套利做市使用协整或与参考资产的相关性来估计公允价值。围绕模型公允价值而非简单中间价报价。相关联的交易对
趋势感知做市使用交易流检测短期趋势。将报价倾向于趋势方向——趋势侧更紧,反趋势侧更宽。趋势市场
价差曲线不同数量级别使用不同价差宽度。小单量用更紧的价差(竞争流量),大单量用更宽的价差(收取仓储风险费)。所有市场

自适应与机器学习策略

现代做市系统根据实际表现持续调整参数。在线学习算法调优gamma、价差和数量。强化学习方法可以从经验中学习最优策略,但需要谨慎处理金融市场的非平稳性。

11. 风险管理框架

风险管理是盈利的做市商和破产的做市商之间的分水岭。没有适当风险控制的做市系统是一颗定时炸弹——一次极端事件可以抹去数月的利润。

仓位限制

单资产限制最多持有10 BTC多头/空头——单一资产的硬性上限
名义金额限制最多 $500K 总风险敞口——限制美元风险
相关性限制不要同时做多BTC + 做多ETH + 做多SOL = 3倍加密货币敞口——需要分散

亏损限制

单笔最大亏损如果单次成交造成超过阈值的滑点则触发终止
小时亏损限额如果累计亏损超过小时限额则停止交易
日亏损限额达到日最大亏损时硬性停止(如 -$5,000)
最大回撤从权益最高点回撤5%时暂停

熔断机制

波动率熔断
当波动率超过正常值3倍时加大价差或停止报价
价差熔断
如果观察到的价差小于最低盈利价差则停止报价
流动性熔断
如果订单簿深度低于最低阈值则停止
相关性熔断
如果相关资产偏离超过阈值则停止(套利风险)

对冲规则

Delta中性
使用相关品种持续对冲库存——风险最低,成本最高
基于阈值
仅当库存超过阈值时对冲——平衡方案
基于时间
每N秒重新平衡到目标——可预测但可能不是最优

终止开关

每个做市系统都必须有终止开关。自动触发的基于回撤、仓位限制或错误计数。手动的允许运维人员通过仪表板立即停止交易。交易所级别的全部取消API在断线时提供最后的安全网。

操作风险

  • API频率限制——控制订单更新频率以保持在限制之内
  • WebSocket断线——断线时取消所有订单,重连时协调状态
  • 序列号间断——检测并在数据间断时重建订单簿
  • 时钟漂移——同步各数据源的时间戳

交互演示:风险管理仪表板

风险管理仪表板
模拟场景:
仓位监控
BTC+2.5 / ±10
25%
ETH-8 / ±50
16%
SOL+120 / ±500
24%
盈亏追踪
日盈亏
$1,250
最大回撤
$-800
回撤限制: $-5,000
波动率监控
0.8%
正常
正常范围: 0.5% - 1.5%
熔断机制
VolatilityVol > 3×正常
SpreadSpread < 2bps正常
LiquidityDepth < $50K正常
CorrelationDiverge > 2%正常

12. 系统架构与部署

生产级做市系统是由专业组件组成的分布式管道。每个组件都有明确的职责,系统必须快速、可靠且可观测。

核心组件

行情数据处理器
与交易所的WebSocket连接、订单簿构建、成交数据处理。必须处理重连、快照重建和间断检测。
信号引擎
从原始数据计算衍生信号:微观价格、波动率、OBI、交易流、跨市场信号。以数据更新频率运行。
策略引擎
核心报价逻辑:接收信号作为输入,输出期望的买卖价格和数量。实现数学模型(对称、偏斜、AS等)。
订单管理系统(OMS)
跟踪所有未成交订单,处理成交报告,管理订单状态转换(待处理、挂单中、部分成交、全部成交、已取消)。
风险管理器
交易前检查(仓位限制、亏损限制)、实时监控、熔断机制。可以阻止或修改策略引擎的订单。
执行引擎
将期望报价转换为API调用:下单、撤单、改单。处理频率限制、重试和错误恢复。
数据库与日志
存储行情数据、成交记录、盈亏、信号用于事后分析和回测。时序数据库存市场数据,关系数据库存配置。

技术栈

编程语言Python(原型/研究),Rust/C++(生产环境,延迟敏感),Go(良好的平衡)
消息队列ZeroMQ、Redis Pub/Sub 或 Kafka 用于组件间通信
时序数据库TimescaleDB 或 ClickHouse 用于行情数据存储和分析
状态存储Redis 用于实时状态(仓位、未成交订单、信号)
配置数据库PostgreSQL 用于策略参数、风险限制、交易所凭证

延迟考量

网络延迟到交易所服务器的地理距离——托管可达<1ms
处理延迟信号计算 + 策略决策时间——目标<100μs
API延迟下单的往返时间——取决于交易所(5-50ms)
总预算有竞争力的加密做市<10ms,高频交易<1ms

部署拓扑

单交易所配置每个交易所运行一个进程。多交易所部署使用协调进程加每交易所工作进程。热备保证故障转移。所有组件应发出指标用于监控(Prometheus + Grafana 是常见技术栈)。

13. 回测与模拟

回测在用真金白银冒险之前,在历史数据上验证你的策略。但做市的回测比方向性策略难得多,因为成交模拟本质上是不确定的。

为什么要回测?

  • 在部署真金之前验证策略逻辑
  • 估计预期盈亏、夏普比率和回撤
  • 在历史数据上调优参数(价差、gamma、数量)
  • 对极端历史事件进行压力测试(闪崩、级联清算)

数据需求

Level 2 快照100ms+粒度的订单簿快照——做市回测的标准
成交数据每笔交易的时间戳、价格、数量和方向标签
OHLCV最低限度的数据——仅用于粗略的方向性验证,不适合做市专用

回测陷阱

前视偏差
在当前决策中使用未来数据。例如:用收盘价来设置开盘价差。

始终确保信号计算只使用决策时可用的数据。

成交假设偏差(#1致命错误)
假设当价格触及你的限价单时就会成交。实际上你排在队列中——如果前面有人,你可能不会被成交。

模拟队列位置。模拟部分成交。假设最坏情况:只有当价格穿过你的价格层级时才成交。

过拟合
在特定历史时期上调优太多参数。策略在2023年数据上有效但2024年失败。

使用前向验证。保持参数少而直观。在样本外数据上测试。

忽略费用和延迟
不考虑交易所手续费、滑点或决策到执行之间的时间延迟。

包含所有费用。添加真实延迟(如10ms)。为大额订单模拟滑点。

模拟方法

事件驱动回放回放历史订单簿事件,模拟你的下单和成交逻辑并建模队列。最真实的方法。
基于代理的模拟模拟多个交互的代理(其他做市商、吃单者、套利机器人)以获得更真实的成交动态。昂贵但强大。
蒙特卡洛生成具有已知统计特性的合成价格路径以压力测试边界情况。

关键评估指标

指标描述
净盈亏扣除所有费用后的总利润——底线
夏普比率年化风险调整收益——做市策略>2为佳
最大回撤最大峰谷下跌——最坏情况有多糟?
成交率被执行的报价百分比——太低说明价差太宽
库存利用率平均|库存| / 最大库存——你承受了多少风险?
利润因子毛利润 / 毛亏损——做市>1.5为健康

模拟交易

回测之后,在实时数据上使用模拟成交运行完整系统,然后再部署真实资金。模拟交易可以发现回测遗漏的问题:API行为、频率限制、重连逻辑和实时延迟。

14. 管理者视角:运营做市团队

管理做市业务需要组合级别的视角。不仅仅是关于单个交易——而是关于资金分配、绩效归因、扩展和整体业务管理。

资金分配

  • 根据预期成交量、波动率和目标仓位规模为每个交易对分配资金
  • 期货/永续做市的保证金要求(通常可用5-20倍杠杆)
  • 为回撤缓冲预留资金——建议预留最大预期回撤的3-5倍
  • 永远不要将超过5-10%的总资金分配给单个交易对

绩效监控

日盈亏归因
分解为:价差捕获 + 库存盈亏 + 返佣收入——知道你的钱从哪里来
滚动夏普比率
跟踪30天滚动夏普比率——下降的夏普信号策略衰退或竞争加剧
成交率趋势
监控成交率的时间变化——下降的成交率可能意味着更多的激进竞争者
逆向选择跟踪
衡量成交后价格冲击——上升的逆向选择意味着知情交易者在针对你

扩展运营

添加新交易对标准:日成交量 > $1M,价差 > 2 ticks,竞争做市商少于5个
多交易所同一交易对在多个交易所:更多成交量 + 跨交易所套利机会
团队结构量化研究员(信号 + 模型),开发工程师(基础设施),运维(监控 + 事故处理)

交易所关系

  • 做市商计划:手续费折扣(-0.01% 挂单费),专用API限额,优先支持
  • SLA要求:95%+在线率,最大价差宽度,最小报价深度
  • 一些交易所免费为指定做市商提供市场数据
  • 协商API频率限制提升(标准限制的2-5倍)

监管考量

  • 各司法管辖区的加密监管不同:MiCA(欧盟),MAS(新加坡),SEC/CFTC(美国)
  • 如果被指定为做市商:在线率义务,最大价差,最小报价量要求
  • 机构做市商的AML/KYC要求
  • 记录保存和审计追踪要求——记录一切

竞争格局

主要的加密做市商包括 Jump Crypto、Wintermute、GSR 和 DWF Labs。竞争将价差推向零——要生存,你需要:(1) 卓越的技术(更低延迟),(2) 更好的风险管理,(3) 独特的信号/alpha,或 (4) 在竞争较少的交易对中找到利基。

15. 实战部署清单

部署做市系统是一个分阶段的过程。在没有充分验证的情况下匆忙上线是失败的最常见原因。

第一阶段:研究与开发(2-4周)

  1. 选择目标交易所和交易对——从一个交易对开始
  2. 搭建数据采集系统(WebSocket → 时序数据库)
  3. 实现订单簿管理器和信号计算管道
  4. 构建具有真实成交模拟的回测框架
  5. 实现并回测基础策略(从对称做市开始)

第二阶段:模拟交易(1-2周)

  1. 在实时数据上使用模拟成交部署策略
  2. 监控成交率、盈亏和库存行为
  3. 与回测结果对比(实盘应该更差但方向一致)
  4. 根据模拟交易观察调优参数

第三阶段:实盘交易(谨慎启动)(2-4周)

  1. 以最小数量启动(1手/最小可能订单量)
  2. 运行1周——对比实盘盈亏与模拟交易预期
  3. 逐步增加数量(如果表现稳定每周翻倍)
  4. 实现完整风险管理:仓位限制、回撤限制、终止开关

第四阶段:扩展(持续进行)

  1. 根据实盘数据添加库存偏斜或AS模型优化
  2. 实现逆向选择检测和防御措施
  3. 扩展到更多交易对和/或交易所
  4. 构建自动化监控、告警和仪表板

常见新手错误

  • 在策略验证之前投入过多资金——从最小量开始
  • 盈亏计算不考虑手续费——手续费可以把盈利策略变成亏损策略
  • 忽视库存风险('它会涨回来的')——不会,至少不总是
  • 没有终止开关 → 闪崩或交易所故障时灾难性亏损
  • 在回测数据上过度优化 → 实盘表现差(过拟合)

16. 总结与参考

核心要点

  1. 做市从买卖价差中获利同时提供流动性——这是一种服务,不是投机
  2. 真正的挑战是逆向选择:知情交易者扫走你的过期报价
  3. 通过偏斜进行库存管理至关重要——永远不要让库存失控
  4. Avellaneda-Stoikov模型为最优报价提供了有原则的框架
  5. 数据管道质量直接决定盈利能力——垃圾进,垃圾出
  6. 波动率估计是最重要的信号——它驱动价差宽度和仓位规模
  7. 风险管理不可妥协:仓位限制、回撤限制和终止开关
  8. 做市回测比方向性策略更难——成交模拟是关键挑战
  9. 从小开始,充分验证,逐步扩展——没有捷径
  10. 跨交易所策略增加复杂度但也带来机会(套利 + 更多成交量)
  11. 竞争格局激烈——你需要明确的优势才能生存
  12. 将做市视为一项业务:资金分配、绩效归因和运营卓越

必读书籍

Algorithmic and High-Frequency TradingCartea, Jaimungal & Penalva——权威学术教科书
Trading and ExchangesLarry Harris——从第一性原理讲解市场微观结构
Market Microstructure TheoryMaureen O'Hara——理论基础

重要论文

High-frequency trading in a limit order bookAvellaneda & Stoikov (2008)——基础做市模型
Dealing with the inventory riskGuéant, Lehalle & Fernandez-Tapia (2013)——AS模型的实际扩展
Optimal market makingGuilbaud & Pham (2013)——泊松到达的替代表述

开源工具

Hummingbot
开源做市机器人框架(Python)
https://hummingbot.org
CCXT
统一的加密交易所API库(JS/Python/PHP)
https://github.com/ccxt/ccxt
Cryptofeed
加密市场数据订阅处理器(Python)
https://github.com/bmoscon/cryptofeed
Barter-rs
Rust事件驱动交易框架
https://github.com/barter-rs/barter-rs

交易所API

Binance
最大的加密交易所——全面的API,WebSocket数据流
https://binance-docs.github.io/apidocs/
OKX
主要交易所,支持高级订单类型
https://www.okx.com/docs-v5/
Bybit
专注衍生品的交易所
https://bybit-exchange.github.io/docs/
dYdX
去中心化永续合约交易所
https://docs.dydx.exchange/