你发出的每一笔订单,在做出任何其他决定之前,都要先做一个二元选择:跨越价差、支付吃单费,还是挂在订单簿中、支付做市费——甚至可能收取返佣。行业习惯把这个问题包装成一道费率优化题,费率表也让它看起来确实如此:吃单5个基点,做市2个基点,节省3个基点,勾选纯挂单标志,搞定。但这套框架只是一层外衣。剥开之后,做市与吃单之争其实是一笔关于逆向选择的交易:你究竟是为即时成交支付一个已知价格,还是向市场出售一份由对手方自行决定何时行权的期权——而知情的对手方恰恰会在成交对你不利的那一刻行权。费率表为"平均参与者"给这份期权定了价。但你不是平均参与者,打到你报价上的那笔流量也不是。
本文要做的,是费率表故意隐藏的那道数学题:经过修正的盈亏平衡点、为什么Glosten-Milgrom(1985)模型意味着被动成交在结构上就对你不利、真实的加密货币费率档位和代币折扣会如何改变这道算式、返佣挖矿为何在股票市场消亡以及它在加密货币领域以何种变异形式存活下来、队列位置如何决定返佣的真实价值,以及如何在回测中把这一切都建模进去,同时避开这个行业里最常见的那个费率错误。
朴素盈亏平衡点——以及所有人都会忘记的那一项
符号说明:报价价差为 ,吃单费为 ,做市费为 (若为返佣则为负值),均以名义本金的基点计,中间价作为基准价格。跨越价差要付出半个价差加吃单费;挂单则赚取半个价差、支付做市费:
代入币安USDⓈ-M合约的基础费率——做市2个基点、吃单5个基点——假设永续合约报价宽度为2个基点:吃单成本为 个基点,做市"成本"为 个基点。表面上看每笔交易能省5个基点。对于一天做20个来回的策略,这被说成是仅靠勾选一个选项就能获得每天100个基点的收益。
先注意这些数字本身的一个特点:费用不是对价差的修正——在流动性好的加密货币交易对上,费用就是成本本身。BTCUSDT永续合约报价宽度经常不到1个基点,而散户吃单要付5个基点。半价差与费用相比几乎是舍入误差。这与股票市场的直觉正好相反,在股票市场价差和费用是同一数量级的——这也是为什么在加密货币领域,任何朴素的比较都在喊"永远做市"。这也是为什么每一个第一次做的做市回测都是盈利的,而大多数第一次实盘部署都不是。
朴素的做市成本缺失了三项:
- 未成交风险。 限价单不是一笔交易,而是一张交易的彩票。如果没有成交,你要么错过行情,要么之后以更差的价格跨越价差成交。
- 逆向选择。 在成交的条件下,价格朝不利于你的方向移动的可能性要比无条件分布所暗示的更高。这不是运气不好,而是一个定理。
- 重新报价成本。 用撤单/重挂追逐市场会把你的队列位置重置到最后,这会悄无声息地把你的成交分布变成主要由第2类成交构成。
第二项背后有五十年的理论支撑,我们来仔细做一遍。
Glosten-Milgrom:成交本身就是坏消息
Glosten和Milgrom(1985)的论文"Bid, Ask and Transaction Prices in a Specialist Market with Heterogeneously Informed Traders"(Journal of Financial Economics 第14卷)是解释价差为何存在的最简洁的模型。一个风险中性、零成本、处于竞争环境中的做市商同时报出买价和卖价。到来的交易者中有一部分比例 是知情交易者——他们知道资产的真实价值 ——其余的交易者出于外生原因交易,以相等概率买入或卖出。做市商无法区分二者。竞争迫使每个报价都必须是一个条件期望:
具体数值演示。设 以相等概率取101或99,。若 ,买单到达的概率为 (所有知情交易者都买入,一半的非知情交易者买入);若 ,概率为 。则
价差为 ——纯粹是对逆向选择的补偿。没有库存风险,没有费用,没有垄断租金,价差依然存在,其大小随知情交易者比例和其所知信息的价值而变化。
这一结论对做市与吃单的抉择而言至关重要:成交本身就是一种信息,而且这个信息对你不利。 你挂出的买单在真实价值较低时成交得更多,因为那正是知情卖方出现的时候。以自己是否成交为条件,会把你刚买入资产的期望价值向下修正——这是由结构决定的,不是运气不好。衡量这一效应的标准方法是成交后价格偏移(markout):对于以价格 成交的买单,horizon为 时的markout为 。几乎对所有人、在几乎所有场合,被动成交的累计markout都是负的;如何在不自欺欺人的前提下计算它,参见执行落差与交易成本分析(TCA)一文。
有一个更具普适性的等价框架:一张挂单是免费送给市场的一份期权。行权时机由对手方——而不是你——选择,他们会在对自己有利时行权。做市返佣就是交易所为你写出这份期权而支付的权利金。问题从来不是"权利金是不是正的",而是"权利金是否大于这份期权对行权方的价值"。
修正后的盈亏平衡点
设 为你的报价在决策horizon内成交的概率, 为以基点计的条件markout成本, 为未成交时你额外付出的成本(等待期间的行情漂移加上以新价格跨越价差的成本)。诚实的做市成本为:
当 时,做市优于吃单,整理后得到一个简洁的不等式:

沿用上面的例子,这次加入现实中的摩擦成本:,,,表面节省为5个基点。取 , 个基点, 个基点。不等式右边为 个基点。做市仍然占优——但margin只有0.67个基点,而不是5。用期望值来算: 个基点,对比吃单成本6.0个基点。那个勾选框只值0.4个基点,而不是5个基点,或的一点小误差就足以把符号翻转过来。
更糟的是,、、 并不是相互独立的参数——它们共同由你为什么交易这一点驱动。如果你的信号与短期流量相关(每一次动量入场都是如此),那么恰恰在你想入场的那些爆发时刻, 而 会剧增:你会被瞬间成交,被你所预测的那波行情击中,成交在旧价格上,站在了不利的一侧。费率表里做市折扣看起来最大的那些交易,恰恰是现实中它最为负值的那些交易。这正是"做市与吃单的抉择本质是一笔披着费率外衣的逆向选择交易"这句话的含义所在。
真实费率表:档位、代币折扣与边际费率陷阱
截至2026年年中,主要交易所的代表性费率表如下(基础档位 → 公开顶级档位;这些数字会变动,请以交易所页面为准):
| 交易所 | 基础做市/吃单费率 | 顶级档位做市/吃单费率 | 折扣机制 |
|---|---|---|---|
| 币安现货 | 10 / 10 个基点 | 随VIP 1-9下降 | 用BNB付费:−25% |
| 币安USDⓈ-M合约 | 2 / 5 个基点 | 0 / 1.7 个基点(VIP 9) | BNB:−10%;VIP需要交易量+BNB余额 |
| Bybit合约 | 2 / 5.5 个基点 | 做市商计划最低至−1.5个基点 | 附带做市义务的做市商计划 |
| OKX合约 | 2 / 5 个基点 | 约−0.5 / 1.5-2个基点 | OKB持仓决定散户档位 |
| Hyperliquid合约 | 1.5 / 4.5 个基点 | 做市返佣最低至−0.3个基点 | 返佣与做市量份额挂钩;质押可获折扣 |
| Coinbase Advanced | 40 / 60 个基点 | 0 / 5 个基点 | 仅按交易量分档 |
| Kraken Pro | 25 / 40 个基点 | 0 / 10 个基点 | 仅按交易量分档 |
三个结构性观察。
散户档位的做市费几乎处处为正。 股票市场那种"做市商能拿到钱"的默认设定,对你来说根本不成立,除非你进入深度VIP领域或签订正式的做市商协议。在基础档位,做市与吃单的抉择其实是"付2还是付5",而不是"赚钱还是付钱"。
代币折扣是一个仓位,不是一张优惠券。 用BNB付费能把币安现货费率削减25%——基础档位下每边2.5个基点,交易量大时是真金白银。但这个折扣要求你持有交易所代币的库存,也就是说你的费率优化其实是靠承担该交易所类股权资产的beta敞口来融资的。一个每月支付3万美元费用、通过BNB节省7500美元的团队,如果持有20万美元的BNB浮动仓位,BNB一次10%的回撤就能把整季度的费率节省全部抹平。要把这个浮动仓位当作一笔真正的持仓来对待:量化它、对冲它,或者干脆承认自己是卖出波动率来买折扣。(有些VIP阶梯还把代币余额设为档位的硬性要求,这就把这个仓位从可选项变成了结构性负担。)
边际费率≠平均费率。 档位是按过去30天滚动交易量计算的,所以今天的费率是由上个月的交易量决定的——但一旦跨过某个门槛,就会重新定价你全部的交易量,且在你保持该档位期间持续生效。这就在交易量的边际成本上制造出一个拐点。假设下一档位在3000万美元/30天处把吃单费从5个基点降到4个基点。若已有1400万美元的自然交易量,再刷100万美元的量大约花费 美元,能换来 美元/月的节省——那最后100万美元的边际费率是负的。但若只有800万美元的自然交易量,同样的逻辑就需要刷700万美元、花费4200美元来节省800美元——这是一笔用真金白银的价差和费用去换取假的交易量、以博取虚幻折扣的杠杆式赌博,而且每月都要重来一次。追逐档位只有在接近门槛时才是理性的,而那些把费率建模成单一标量的团队根本看不到这个拐点。
返佣挖矿:兴起、消亡与在加密货币领域的余生
做市返佣是股票市场的发明。1997年,Island ECN为了在与老牌交易所的竞争中建立流动性而引入了返佣,这个模式取得了巨大成功,以至于它征服了整个美国股票市场结构;随后2005年的Reg NMS将吃单接入费上限定为每股0.003美元(Rule 610),标准的交易所商业模式变成了:向吃单方收取约30毫,向做市方返还约20-30毫,赚取差价。
这套算术曾短暂催生出一种纯策略:返佣套利。 在一支价差只有一美分的大盘股上双边挂单。一笔"scratch"式来回交易——以同一价格买入和卖出——即使价格盈亏为零,仍能收取两笔返佣,大约每股半美分。如果还能捕获一美分的价差,收益就变成三倍。在2000年代中期,这曾是一门真正的产业级生意。
它的消亡有三个原因,每一个都值得吸取教训:
- 返佣是公开的,所以会被竞争到队列里去。 公开的返佣会吸引报价,直到边际报价者扣除逆向选择成本后的期望返佣归零为止。在受最小报价单位(tick)约束的股票上,价格无法进一步改善,所以竞争就转向了时间优先权——而租金流向了最先到达队列前端的人。返佣为速度军备竞赛提供了资金;托管服务和微波塔吞掉了利润。最终能持续赚到返佣的,是那些本来就会去报价的公司。
- 在最小报价单位不构成约束的地方,返佣甚至不是真实的。 Colliard和Foucault(2012)的论文"Trading Fees and Efficiency in Limit Order Markets"(Review of Financial Studies 第25卷)证明了一个中性结论:在价格网格足够精细的情况下,只有总交易所费用才重要;做市方与吃单方之间的任何分配方式,都会被报价调整所抵消。给做市方一份返佣,他们就会相应地报出更紧的价差,通过含费价差把这份返佣原封不动地转交给吃单方。只有当最小报价单位阻止这种调整时,费率分配方式才真正有意义——而这又会把你带回原因#1。返佣要么通过价格消散,要么通过队列消散——选一个吧。(Foucault、Kadan和Kandel在2013年提出了互补的观点:费率分配是交易所用来平衡做市方与吃单方参与度的工具,而不是送给任何一方的礼物。)
- 这些扭曲吸引了监管者的注意。 Angel、Harris和Spatt的论文"Equity Trading in the 21st Century"(2011年,及2015年在Quarterly Journal of Finance上的更新版)详细记录了其危害:报价价差不再能衡量真实成本,因为费用和返佣不体现在报价中;最优执行统计数据变成了虚构;经纪商在客户成交质量与自身返佣收益之间面临利益冲突。Battalio、Corwin和Jennings(2016年,Journal of Finance)证明这种冲突并非假设——将订单路由至高返佣交易场所,会实质性地恶化限价单的执行质量。SEC对此纠结了十年之久——2018年的Transaction Fee Pilot计划在法庭上夭折——最终于2024年9月通过了修正案,将接入费上限从30毫削减到10毫(合规期限已推迟至2026年11月)。股票市场高返佣的时代正在被行政命令终结。
在加密货币领域存活下来的形式很有启发性,因为它不是一次复兴。有三种形式:
- 公开VIP返佣(如OKX的顶级做市档位−0.5个基点,以及类似机制):只有达到特定交易量水平才能享受,而这种水平本身就筛选出了那些已经在队列竞赛中获胜的公司。这种循环正是股票市场终局的重演:返佣的设立是为了吸引做市方,而真正捕获它的却是那些本来就会去报价的做市方。
- 协议式做市商计划(如Bybit宣传的最低至−1.5个基点):这些通常附带价差上限、最小挂单量和在线率义务。这不是免费的钱,而是一份服务合同——你被支付报酬,是为了持续承担逆向选择期权的空头,包括在新闻冲击、连环爆仓以及每一个自由裁量做市商都已撤单的时刻。这份返佣是持有那本没人想要的期权账簿的工资。
- 公式驱动型激励(Hyperliquid支付最高至−0.3个基点,与你在总做市量中的份额挂钩):这是一场明确的锦标赛,至少诚实地为队列竞赛定了价。
纯粹的"scratch换返佣"策略在加密货币领域基本无法存在,因为散户档位的做市费是正的:在2个基点的做市费率下,一笔scratch来回交易反而亏损4个基点。这种策略只能存在于做市费为负的档位内,而这些档位本身就是护城河。
队列价值:一份返佣到底值多少钱
以上所有内容都可以压缩成一个定价方程。一份挂单的期望价值为:
其中 是返佣(或负的做市费)——而承载核心信息的细节是:成交概率 和条件逆向选择成本 都是你队列位置 的函数。它们以最不利的方式联动。排在队列前端的订单会与温和的流量成交:小额吃单方、噪音交易、触及即弹的成交。排在队列末端的订单只有在整个价格档位被扫单时才会成交——也就是说,只会在价格正在穿透你的那些市场状态下成交。队列位置越靠后,不仅成交越少,成交质量也越差。队列本身就是一个逆向选择过滤器,你在其中的位置决定了你处在过滤器的哪一侧。

具体数值。报价档位距中间价 个基点,返佣 个基点,错失成本 个基点:
| 队列位置 | (基点) | (基点) | |
|---|---|---|---|
| 前十分位 | 0.85 | 0.8 | |
| 后十分位 | 0.35 | 3.5 |
同一个交易所,同一个价格档位,费率表上同一行返佣数字——期望价值却出现了两个基点的摆动,正负号都变了,而这完全由队列位置驱动。Moallemi和Yuan(2016)的论文"A Model for Queue Position Valuation in a Limit Order Book"量化了这一普遍结论:在大最小报价单位的品种上,队列优先权的价值与半价差相当,也就是说,与整个报价策略的理论edge同一数量级。估算你在队列中的实际位置——以及撤单/重挂对它的影响——正是Queue inside the wall一文中所讲的机制;而根据成交时的队列十分位对自己的成交数据分桶、校准 ,则是TCA工具箱中的markout练习。
由此可以直接得出操作规则:只要 (相对于你的替代方案而言)就挂单,否则就跨越价差——当队列过长、流量带毒或者你的信号提示价格正在离场时。"究竟何时该停止耐心等待"是一个战术问题——挂单节奏、升级阶梯、跨越触发条件——这些内容将在子订单执行战术一文中专门探讨。这里的重点是:驱动该决策的输入变量是以队列为条件的价值,而不是费率表。
回测分级费率:VIP-9漏洞
回测中最常见的费率错误简单到令人尴尬:配置里写着maker_fee=0.0, taker_fee=0.00017,因为有人复制了交易所VIP表格的第一行——或者是该团队曾经所处的档位,又或者是策略"做到一定规模后"预计会达到的档位——而策略实盘交易时实际执行的费率却是2/5。姑且称之为VIP-9漏洞。
这不是一个小误差。以一个做市策略为例,其毛捕获(价差减去逆向选择成本)为每次来回交易2.6个基点,两条做市腿:
| 费率档位 | 做市费率 | 每次来回净收益 |
|---|---|---|
| VIP 9 | 0.0 个基点 | +2.6 个基点 |
| 中间档位 | 1.0 个基点 | +0.6 个基点 |
| 基础档位(VIP 0) | 2.0 个基点 | −1.4 个基点 |
同一个策略,在回测所用的档位上是印钞机,在实盘所处的档位上却是碎钞机。这里没有alpha方面的漏洞可查,也没有成交模型上的微妙之处——只是配置文件里的一个标量,就让权益曲线和它的镜像分道扬镳。而且由于做市策略的edge通常只有每次来回1-3个基点,费率档位方面的误差总是与edge本身同一数量级。
要做对这件事,就要认识到你的费率是一个路径依赖的状态变量,而不是一个常数:
from bisect import bisect_right
class FeeEngine:
"""Tiered fees driven by simulated rolling 30d volume. All rates in bps."""
TIERS = [(0e6, 2.0, 5.0), (15e6, 1.6, 4.5), (50e6, 1.2, 4.0),
(100e6, 0.8, 3.5), (600e6, 0.4, 2.5), (4e9, 0.0, 1.7)]
token_discount = 0.90 # e.g. BNB payment: multiply fees by 0.9
def __init__(self):
self.fills = [] # (timestamp, notional)
def _rolling_volume(self, ts):
cutoff = ts - 30 * 86_400
self.fills = [(t, n) for t, n in self.fills if t >= cutoff]
return sum(n for _, n in self.fills)
def fee(self, ts, notional, is_maker):
vol = self._rolling_volume(ts) # tier from PAST volume
i = bisect_right([v for v, _, _ in self.TIERS], vol) - 1
rate = self.TIERS[i][1] if is_maker else self.TIERS[i][2]
self.fills.append((ts, notional)) # this fill counts toward FUTURE tiers
return notional * rate * 1e-4 * self.token_discount
五条规则能让核算保持诚实:
- 费用按每次成交事件、每一边、按已成交名义本金计提——不是按订单计提,也不是按来回交易计提。部分成交的订单只对已成交的那部分收费;部分成交、撤单与费用计提之间的相互作用,正是成交模拟一文中的状态机所描述的内容,该文也提供了修正后盈亏平衡点所需的未成交概率。
- 档位是内生的。 你模拟出的交易量决定了你模拟出的档位;把策略规模放大10倍会改变它自己的费率。把名义本金放大10倍的回测必须让档位阶梯双向做出响应。
- 从你实盘第一天真正会处在的那个档位开始模拟——通常是基础档位。如果论点是"在VIP 4档位能盈利",那就把整个阶梯当作情景分析来跑,并报告盈亏平衡档位。那个档位是一项附带交易量前提条件的上线要求,而不是一条脚注。
- 把代币计价的折扣当作仓位来建模。 如果费用是用BNB支付或通过质押获得折扣的,那么这份浮动仓位的按市值计价盈亏应该计入策略PnL,而不是放进另一张表格里。
- 用含费价差来做交易所间比较。 沿用Colliard-Foucault和Angel-Harris-Spatt的方法:跨交易所可比的量是吃单来回交易的 (做市腿则用 ),而绝不是原始报价价差。一个报价宽度为1个基点、吃单费5个基点的交易所,跨越价差的成本是另一个报价宽度4个基点、吃单费1个基点的交易所的四倍——而只看屏幕价差的排行榜会把顺序完全排反。
重申这项决策
剥掉外衣之后,做市与吃单的抉择其实是一份简短的清单。了解你真实所处的费率行——当前档位、当前折扣,是边际值而不是理想值。计算每个交易场所的含费价差,别再相信屏幕上显示的数字。根据自己成交数据、按成交时的队列位置分桶,测算条件markout,因为 不会写在任何人的文档里。用 为每一份挂单定价,一旦为负就毫不留情地跨越价差。把返佣当作为写出期权而支付的工资,并问清楚是谁在行权。而在回测中,要把费率做成一个状态机,而不是一个标量。
费率表告诉你的,是平均对手方为获得即时成交向交易所支付了多少。你自己的markout告诉你的,才是市场为你提供流动性真正付给你的价格。这两个数字里只有一个是关于你自己的——用那一个来做交易决策。
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.