Trader OS
Phase 3 · 市场微观结构

第 15 章 · Market Maker

同时挂买单和卖单、赚中间的差价,为什么没有看上去那么简单?

阅读模式
Phase 3 · 市场微观结构TRD-MICRO-003 · v1.0
练习的能力
理解市场实际成交控制损失
3D 模拟
交易大厅 · 做市(规划中)

市场现场

当前的阅读模式收起了这一节。

小周读完第 13 章,想到了一个办法:不猜涨跌,只赚差价。

他写了一个小程序,在一家交易所的 BTC 上同时挂两张单:一张买单,比中间价低 0.05%;一张卖单,比中间价高 0.05%。有人来买,他就卖给对方;有人来卖,他就买下来。每成交一次,程序就按新的中间价把两张单重新挂好。

他算过一笔账:一天大约有 1,000 个订单找上门,每个 0.1 个 BTC,也就是 6,000 美元。每成交一笔,他赚 0.05%,也就是 3 美元。来买的和来卖的差不多一样多,手里的 BTC 进进出出,最后应该还是零。

第一天,程序赚了 1,602 美元。

第十二天,程序亏了 12,616 美元。那一天的成交和平时差不多,按每笔 3 美元算,甚至比平时多赚了一点。可是那一整天,来买的人一直比来卖的人多,程序一直在卖,卖到手里欠了 5 个多 BTC;而价格偏偏一路往上走。

一个月下来,30 天里有 13 天亏钱,全月合计只赚了 1,504 美元。

他明明只赚差价,为什么还会亏,而且一亏就是十几天的利润?

你来决定

当前的阅读模式收起了这一节。

假设在这个市场里,每五个来成交的人里,就有一个比你先知道价格接下来往哪边走。你的买单和卖单,各挂在离中间价多远的地方?

观察结果

当前的阅读模式收起了这一节。

四个选项放在一起,可以看到三件事:

  • 挂得太近会亏。 普通人来得多,但每笔赚得少;而先知道行情的人不管你挂在哪里,只要有利可图就一定会来。
  • 挂得太远也不好。 每笔赚得多,但普通人不来了,先知道行情的人却一个都没少。中间有一个最好的位置,在这个市场里是各离 0.06%,平均每天 672 美元。
  • 平均赚钱,不等于每天都赚钱。 小周的设置平均每天赚 600 美元,却会在某一天亏掉十几天的利润。那一天的差价照赚不误,亏在手里越积越多的币上。给手里的币设一个上限,平均少赚一点,最差的日子就没那么差。

小周第一天赚了 1,602 美元,不说明他的设置好;第十二天亏了 12,616 美元,也不说明他的设置差。要看的是一千天的分布。

背后的机制

小周的钱,从三个地方来,也从三个地方走:

  1. 每一笔赚一半的差价
  2. 被先知道行情的人挑中
  3. 手里的币跟着价格涨跌

第一块,差价。 每成交一笔,他都按离中间价 0.05% 的价格成交,赚 3 美元。这一块永远是正的。

第二块,被挑中。 在这个市场里,每来一个订单,价格随后就会涨或跌 0.1%。普通人来买还是来卖,和接下来的涨跌无关,平均来看不赚不亏。先知道行情的人不一样:他只在价格要涨之前来买、要跌之前来卖。每和他成交一笔,小周赚到 3 美元的差价,却马上因为价格变动亏掉 6 美元。每天大约 200 个这样的人,就是每天亏 1,200 美元。

挂得越宽,每笔从他们身上找回的差价越多;可普通人也越来越少。来的人里知道得更多的越多,差价就得挂得越宽。 宽到普通人都不来的时候,挂单就没有意义了:在这个模型里,先知道行情的人占到五成,怎么挂都赚不到钱。

第三块,手里的币。 普通人来买还是来卖是随机的,所以小周手里的币会随机地变多变少;价格也在随机涨跌。两者碰到一起,平均来看是零,但某一天可能很大。第十二天就是这样:

那一天的三块金额
差价+1,922 美元
被先知道行情的人挑中−1,340 美元
手里的币跟着价格涨跌−13,197 美元
合计−12,616 美元

那一天他最多欠了 5.4 个 BTC,收盘时还欠 5.1 个。差价赚的是小钱,手里的币可能赔大钱,所以做市最要紧的,是管住手里的数量。

它叫什么

做市商Market Maker

同时挂出买单和卖单、随时准备和别人成交的人或机构。订单簿上那些「随时能成交」的挂单,大部分是做市商提供的。第 1 章那家全天挂单的公司,就是做市商。

报价Quote

做市商挂出的买价和卖价,以及愿意成交的数量。报价离中间价多远,就是半个价差。小周的报价是各离中间价 0.05%。

价差收益Spread Capture

每成交一笔赚到的那半个价差。它是做市商唯一稳定的收入,但单笔很小,要靠成交的笔数累积。

库存Inventory

做市商手里因为成交而积累下来的币,可以是多,也可以是欠(负数)。库存会随价格涨跌带来盈亏,是做市商最大的风险来源。管理库存的常见办法是设上限、在另一个市场对冲,或者把报价往减少库存的方向挪。

逆向选择Adverse Selection

愿意和你成交的人,恰恰是那些知道得比你多的人,他们只在对他们有利、对你不利的时候才来。做市商挂着的单子被成交,未必是好事。第 1 章说「和知道得更多的人交易,平均会吃亏」,在做市商身上表现得最清楚。

真实市场

交易所的做市商计划CEX

很多交易所都有专门的做市商计划:做市商承诺在一定比例的时间里挂出报价,价差不超过某个宽度、数量不少于某个规模;交易所则给他们更低的手续费,甚至倒贴返佣。

交易所愿意付这笔钱,是因为订单簿的厚度就是它的产品。做市商愿意承担义务,是因为在这门生意里,手续费上省下的几个基点,常常就是赚与亏的分界。

45 分钟2012 年 8 月 1 日美国股市

美国最大的股票做市商之一 Knight Capital,上线新程序时出了错,系统在开盘后不断发出本不该发的订单,短时间内积累了几十亿美元不想要的仓位。四十五分钟里,公司亏损约 4.4 亿美元,几天之后要靠外部注资才活下来,几个月后同意被收购。

它亏掉的不是差价,而是失控的库存。这也是后来的风险引擎都要求有 Kill Switch 的原因之一。

链上的做市商DEX

在没有订单簿的去中心化交易所里,把两种币存进资金池、赚交易手续费的流动性提供者,其实也是做市商:别人来换币,池子就是那个挂着的报价。

他们同样面对逆向选择:当别处的价格已经变了、池子里的价格还没跟上时,套利者会先来成交,把差价拿走。第 16 章会讲这种撮合方式。

动手

Lab当一天做市商30 分钟本站的做市模拟

下面就是小周的市场,默认值就是他的设置。

平均每天成交
600 笔
价差收入
+1,800 美元
逆向选择
−1,200 美元
平均每天合计
+600 美元

上面四个数是按期望算的长期平均,不含库存(库存随价格的涨跌,平均来看是零),也不考虑库存上限。

模拟 1,000 天的平均价差收入
+1,799 美元
1,000 天里亏钱的日子
34.4%
最差 5% 的那天
−3,863 美元
第 12 天的盈亏
−12,616 美元
第 12 天,手里的库存怎样变化(上方是多,下方是欠)最多5.4 个 BTC

一天 1,000 个订单,每个 0.1 BTC;每来一个订单,价格涨或跌 10 个基点。模型刻意简化,只用来看做市的几种钱从哪里来。

课程版本V1-docs;来源lab:market-maker;第 15 章 / TRD-MICRO-003

只记录点击时的参数和结果;不代表实验通过。
查看待保存快照
  1. 不改参数,记下平均每天的价差收入、逆向选择和合计,以及 1,000 天里最差的 5% 的日子。
  2. 把「知情交易者」从 0% 慢慢调到 60%。从哪个比例开始,不管半价差挂多宽,平均每天都赚不到钱?
  3. 知情交易者保持 20%,把库存上限从「不设」调到 1 个 BTC、再到 0.5 个。平均每天少赚了多少?最差的日子好了多少?你会选哪一档,为什么?
  4. 打开任意一家交易所 BTC 现货的公开盘口,记下买一、卖一和取数时间,把价差换算成基点。再找一个成交清淡的小币做同样的事。想一想:两者的差别里,有多少是在补偿逆向选择和库存风险?

改一个变量

如果知情交易者从两成变成五成

各离 0.01%,平均每天亏 2,430 美元;各离 0.05%,亏 750 美元;各离 0.09%,亏 30 美元。怎么挂都不赚钱。

唯一不亏的办法,是把报价挂到 0.1% 以外,让谁都不来成交。于是这个市场就没有人挂单了。知道得更多的人太多,流动性会消失。

如果手里最多只欠或只多 1 个 BTC

价差收入平均每天从 1,799 美元降到 1,722 美元。1,000 天里最差的 5% 的日子,从亏 3,863 美元以上收窄到亏 1,254 美元左右,亏钱的日子从 34.4% 降到 27.8%。

少赚一点,换来最差的日子不再那么差。做市商真正的风控,管的是库存。

如果市场里没有知情交易者

各离 0.05% 最好,平均每天赚 1,500 美元。

即便如此,1,000 天里仍有 22.6% 的日子亏钱,亏在手里的币上。再加上 1 个 BTC 的库存上限,亏钱的日子降到 8.6%,最差的 5% 的日子只亏 203 美元左右。

三种深度

同一个知识节点TRD-MICRO-003,三种深度各问一个问题
  1. 基础同时挂买单和卖单、赚中间的差价,为什么没有看上去那么简单?第 15 章
  2. 进阶做市商怎样根据库存和订单流调整报价,控制逆向选择?Advanced E · 执行与微观结构
  3. 机构风险限额、库存对冲和交易所返佣,怎样共同决定做市业务赚不赚钱?Institutional
  4. 3D扮演做市商同时挂买单和卖单,系统不断有人来成交,你要管住价差、库存和逆向选择。交易大厅

做市的三块钱:差价是稳定的小钱,被挑中是系统性的亏损,库存是随机的大钱。只看第一块,就会以为做市是稳赚的生意。

被成交未必是好事:你挂着的单子被人吃掉,先问一句,对方为什么这时候来?

带走的问题

2
背后的机制是什么?谁在另一边?
和你成交的人为什么这时候来?如果答案是「他知道得比我多」,你挂着的单子就是在给他送钱。
5
最坏的情况亏多少?
最坏的情况不是某一笔亏了,而是一整天都站在同一边、手里的币越积越多,价格又一路走反。先定好库存上限。
10
结果出来以后,怎样区分运气和决策?
小周第一天赚了 1,602 美元,第十二天亏了 12,616 美元。只看一天,你分不出这是运气还是设置的问题。

本章自测

一句话带走

做市商赚的是价差,承担的是库存风险和逆向选择:愿意和你成交的人,可能比你知道得更多。

记录这次学习

“已读”只表示你确认读过本章;自测由你对照参考结论自评,两者都不等于掌握认证或职业等级。每次点击保留一条带时间的本地记录。

自答核心问题并记录自评

同时挂买单和卖单、赚中间的差价,为什么没有看上去那么简单?

概念掌握自报(不是认证)

仅由你主动声明。已读、正确自评或实验结果都不会推断掌握;未报告为未知。撤销后成为未知,并取消已选附件。

  • 报价:未读取

  • 价差收益:未读取

  • 库存:未读取

  • 逆向选择:未读取

尚未读取本章自报;没有报告不表示已经掌握。

带着本章上下文准备提问

Tutor 提问工作台

模型服务尚未配置。点击发送只会把下方预览提交给本站接口并收到未配置提示,不会调用外部模型或生成回答。提供方、运行位置及数据保留方式仍待确定。

角色目标:用故事、例子和计算解释一个概念。 以下为提问准备,不是该角色的生成结果。

Foundation 第 15 章 · TRD-MICRO-003 v1.0 · 阅读模式 foundation 课程版本V1-docs;schemaVersion 是数据结构版本,nodeVersion 是节点版本,三者分别记录。阅读模式不等于自报 Level。

选择本地记录、管理自报 Level

读取只在点击后发生;读取不等于同意上传。已读、自评、实验、研究快照均是学习者资料,不是模型指令或已验证事实。不要放入密钥、身份信息或真实账户资料。

逐条选附(最多 10 条,默认不选)

没有已加载的记录。先在章节确认已读、自答自测,或在实验控件中保存当前快照。

检查将使用的提问与附件

请填写 1–4000 字的问题

服务未配置;没有 AI 回答。

本地存储、导出与清除

记录保存在当前浏览器、当前站点的 localStorage,最多 100 条,不自动过期。没有账号隔离或云备份;共用设备上的其他使用者可能读到。请单标签页编辑;多标签页同时写入可能覆盖,请及时导出。修改或删除记录会取消当前已选附件,需重新加载。

Journal 由第 35 章日志工具单独管理和清除。删除本地数据不代表删除未来服务端数据;当前没有服务端副本。浏览器拒绝存储时不会假报成功,请复制本页预览。

管理本地记录与 Tutor 提问

本页目录