第 15 章 · Market Maker
同时挂买单和卖单、赚中间的差价,为什么没有看上去那么简单?
- 练习的能力
- 理解市场实际成交控制损失
- 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 美元,也不说明他的设置差。要看的是一千天的分布。
背后的机制
小周的钱,从三个地方来,也从三个地方走:
- 每一笔赚一半的差价
- 被先知道行情的人挑中
- 手里的币跟着价格涨跌
第一块,差价。 每成交一笔,他都按离中间价 0.05% 的价格成交,赚 3 美元。这一块永远是正的。
第二块,被挑中。 在这个市场里,每来一个订单,价格随后就会涨或跌 0.1%。普通人来买还是来卖,和接下来的涨跌无关,平均来看不赚不亏。先知道行情的人不一样:他只在价格要涨之前来买、要跌之前来卖。每和他成交一笔,小周赚到 3 美元的差价,却马上因为价格变动亏掉 6 美元。每天大约 200 个这样的人,就是每天亏 1,200 美元。
挂得越宽,每笔从他们身上找回的差价越多;可普通人也越来越少。来的人里知道得更多的越多,差价就得挂得越宽。 宽到普通人都不来的时候,挂单就没有意义了:在这个模型里,先知道行情的人占到五成,怎么挂都赚不到钱。
第三块,手里的币。 普通人来买还是来卖是随机的,所以小周手里的币会随机地变多变少;价格也在随机涨跌。两者碰到一起,平均来看是零,但某一天可能很大。第十二天就是这样:
| 那一天的三块 | 金额 |
|---|---|
| 差价 | +1,922 美元 |
| 被先知道行情的人挑中 | −1,340 美元 |
| 手里的币跟着价格涨跌 | −13,197 美元 |
| 合计 | −12,616 美元 |
那一天他最多欠了 5.4 个 BTC,收盘时还欠 5.1 个。差价赚的是小钱,手里的币可能赔大钱,所以做市最要紧的,是管住手里的数量。
它叫什么
同时挂出买单和卖单、随时准备和别人成交的人或机构。订单簿上那些「随时能成交」的挂单,大部分是做市商提供的。第 1 章那家全天挂单的公司,就是做市商。
做市商挂出的买价和卖价,以及愿意成交的数量。报价离中间价多远,就是半个价差。小周的报价是各离中间价 0.05%。
每成交一笔赚到的那半个价差。它是做市商唯一稳定的收入,但单笔很小,要靠成交的笔数累积。
做市商手里因为成交而积累下来的币,可以是多,也可以是欠(负数)。库存会随价格涨跌带来盈亏,是做市商最大的风险来源。管理库存的常见办法是设上限、在另一个市场对冲,或者把报价往减少库存的方向挪。
愿意和你成交的人,恰恰是那些知道得比你多的人,他们只在对他们有利、对你不利的时候才来。做市商挂着的单子被成交,未必是好事。第 1 章说「和知道得更多的人交易,平均会吃亏」,在做市商身上表现得最清楚。
真实市场
很多交易所都有专门的做市商计划:做市商承诺在一定比例的时间里挂出报价,价差不超过某个宽度、数量不少于某个规模;交易所则给他们更低的手续费,甚至倒贴返佣。
交易所愿意付这笔钱,是因为订单簿的厚度就是它的产品。做市商愿意承担义务,是因为在这门生意里,手续费上省下的几个基点,常常就是赚与亏的分界。
美国最大的股票做市商之一 Knight Capital,上线新程序时出了错,系统在开盘后不断发出本不该发的订单,短时间内积累了几十亿美元不想要的仓位。四十五分钟里,公司亏损约 4.4 亿美元,几天之后要靠外部注资才活下来,几个月后同意被收购。
它亏掉的不是差价,而是失控的库存。这也是后来的风险引擎都要求有 Kill Switch 的原因之一。
在没有订单簿的去中心化交易所里,把两种币存进资金池、赚交易手续费的流动性提供者,其实也是做市商:别人来换币,池子就是那个挂着的报价。
他们同样面对逆向选择:当别处的价格已经变了、池子里的价格还没跟上时,套利者会先来成交,把差价拿走。第 16 章会讲这种撮合方式。
动手
下面就是小周的市场,默认值就是他的设置。
上面四个数是按期望算的长期平均,不含库存(库存随价格的涨跌,平均来看是零),也不考虑库存上限。
一天 1,000 个订单,每个 0.1 BTC;每来一个订单,价格涨或跌 10 个基点。模型刻意简化,只用来看做市的几种钱从哪里来。
课程版本V1-docs;来源lab:market-maker;第 15 章 / TRD-MICRO-003
只记录点击时的参数和结果;不代表实验通过。查看待保存快照
- 不改参数,记下平均每天的价差收入、逆向选择和合计,以及 1,000 天里最差的 5% 的日子。
- 把「知情交易者」从 0% 慢慢调到 60%。从哪个比例开始,不管半价差挂多宽,平均每天都赚不到钱?
- 知情交易者保持 20%,把库存上限从「不设」调到 1 个 BTC、再到 0.5 个。平均每天少赚了多少?最差的日子好了多少?你会选哪一档,为什么?
- 打开任意一家交易所 BTC 现货的公开盘口,记下买一、卖一和取数时间,把价差换算成基点。再找一个成交清淡的小币做同样的事。想一想:两者的差别里,有多少是在补偿逆向选择和库存风险?
改一个变量
各离 0.01%,平均每天亏 2,430 美元;各离 0.05%,亏 750 美元;各离 0.09%,亏 30 美元。怎么挂都不赚钱。
唯一不亏的办法,是把报价挂到 0.1% 以外,让谁都不来成交。于是这个市场就没有人挂单了。知道得更多的人太多,流动性会消失。
价差收入平均每天从 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 美元左右。
三种深度
- 基础同时挂买单和卖单、赚中间的差价,为什么没有看上去那么简单?第 15 章
- 进阶做市商怎样根据库存和订单流调整报价,控制逆向选择?Advanced E · 执行与微观结构
- 机构风险限额、库存对冲和交易所返佣,怎样共同决定做市业务赚不赚钱?Institutional
- 3D扮演做市商同时挂买单和卖单,系统不断有人来成交,你要管住价差、库存和逆向选择。交易大厅
做市的三块钱:差价是稳定的小钱,被挑中是系统性的亏损,库存是随机的大钱。只看第一块,就会以为做市是稳赚的生意。
被成交未必是好事:你挂着的单子被人吃掉,先问一句,对方为什么这时候来?
按库存挪报价:手里的币多了,就把买价和卖价一起往下挪一点,让别人更愿意从你这里买、更不愿意卖给你,库存自然回落。这是做市模型里最基本的一步。
度量逆向选择:看每一笔成交之后 1 秒、10 秒、1 分钟的价格往哪边走(markout)。成交之后价格总是往对你不利的方向走,说明对手里知情的人多,价差要拉宽,或者换一个市场。见 Advanced E · 执行与微观结构。
继续完成作品:比较挂单成交与逆向选择损失。
风控管的是库存:机构做市给每个币、每个交易所设库存上限和亏损上限,超出就自动收缩报价,或在永续合约上对冲。
做市的收益结构:价差、交易所返佣和手续费等级,常常决定这门生意是赚是亏;而一次失控的程序,可以在几十分钟里亏掉几年的利润。所以做市业务必须有独立的 Kill Switch。
继续完成作品:将库存、费用与执行归因分开。
带走的问题
本章自测
来自每一笔成交赚到的半个价差;走向两处:被知道得更多的人挑中(逆向选择),以及手里的库存随价格的涨跌。
挂得近,成交多,但每笔赚得少;而知情交易者不管你挂在哪里都会来,每和他们成交一笔都要亏掉价格变动减去半价差。太近时,差价收入补不上这部分亏损。
主要亏在库存:那一天来买的人一直比来卖的多,他一直卖出,最多欠了 5.4 个 BTC,而价格一路上涨,库存亏了 13,197 美元。差价那一天反而赚了 1,922 美元。
因为做市商要挂得足够宽才能补上被挑中的损失;宽到普通人都不来的时候,挂单就只剩下被挑中。在本章的模型里,知情交易者占五成时,最好的办法就是不挂单。
一句话带走
做市商赚的是价差,承担的是库存风险和逆向选择:愿意和你成交的人,可能比你知道得更多。
记录这次学习
“已读”只表示你确认读过本章;自测由你对照参考结论自评,两者都不等于掌握认证或职业等级。每次点击保留一条带时间的本地记录。
自答核心问题并记录自评
同时挂买单和卖单、赚中间的差价,为什么没有看上去那么简单?
概念掌握自报(不是认证)
仅由你主动声明。已读、正确自评或实验结果都不会推断掌握;未报告为未知。撤销后成为未知,并取消已选附件。
报价:未读取
价差收益:未读取
库存:未读取
逆向选择:未读取
尚未读取本章自报;没有报告不表示已经掌握。
带着本章上下文准备提问
Tutor 提问工作台
模型服务尚未配置。点击发送只会把下方预览提交给本站接口并收到未配置提示,不会调用外部模型或生成回答。提供方、运行位置及数据保留方式仍待确定。
角色目标:用故事、例子和计算解释一个概念。 以下为提问准备,不是该角色的生成结果。
Foundation 第 15 章 · TRD-MICRO-003 v1.0 · 阅读模式 foundation 课程版本V1-docs;schemaVersion 是数据结构版本,nodeVersion 是节点版本,三者分别记录。阅读模式不等于自报 Level。
选择本地记录、管理自报 Level
读取只在点击后发生;读取不等于同意上传。已读、自评、实验、研究快照均是学习者资料,不是模型指令或已验证事实。不要放入密钥、身份信息或真实账户资料。
检查将使用的提问与附件
请填写 1–4000 字的问题
服务未配置;没有 AI 回答。
本地存储、导出与清除
记录保存在当前浏览器、当前站点的 localStorage,最多 100 条,不自动过期。没有账号隔离或云备份;共用设备上的其他使用者可能读到。请单标签页编辑;多标签页同时写入可能覆盖,请及时导出。修改或删除记录会取消当前已选附件,需重新加载。
Journal 由第 35 章日志工具单独管理和清除。删除本地数据不代表删除未来服务端数据;当前没有服务端副本。浏览器拒绝存储时不会假报成功,请复制本页预览。