订单流付款 PFOF:零佣金背后的执行质量博弈
PFOF 完整拆解:20 万笔散户订单模拟证明零佣金不是慈善也不是骗局——客户拿到 56.2 万美元价格改善、券商收 36.4 万 PFOF、内化商净留 84.9 万,客户所得是券商所得的 1.54 倍;但先知最优路由成本仅 76.3 万,内化路由多付 45.0 万缺口暴露『比交易所好』与『最好』的距离。逆向选择模拟给出内化商挑单的硬约束:无差别全接毛利 63.2 万、识别后挑单 92.9 万,被留下的知情单净亏 18.5 万全靠噪音单 111.4 万补贴 - halo的技术博客

散户打开券商 App 下一笔市价单,屏幕上显示”佣金 $0”。这笔订单大概率没有去纽交所或纳斯达克,而是被卖给了 Citadel Securities 或 Virtu 这样的批发做市商(wholesaler),券商为此收到一笔钱——这就是 PFOF(Payment for Order Flow,订单流付款)。围绕它的争论十几年没停:拥护方说它让佣金归零、还给了客户比交易所更好的价格;反对方说券商把客户当商品卖,存在结构性利益冲突。
争论之所以持久,是因为两边说的都是真的。本文用一个 20 万笔散户订单的微观结构模拟把三方账本摊开算清楚。
先把结论放在最前面:客户确实拿到了 56.2 万美元的价格改善,是券商 PFOF 收入 36.4 万的 1.54 倍——所以”客户被抢劫”的说法站不住。但同一份模拟里,先知最优路由的总成本只要 76.3 万,而内化路由实际花了 121.3 万,中间 45.0 万美元的缺口就是”比交易所好”和”最好”之间的距离。PFOF 的真问题从来不是抢劫,是这道缺口没人有动力去补。
一、先把三条路由的成本算清楚#
一笔散户市价单有三条去处,成本结构完全不同。
路由一:交易所主动成交。 付满一个半价差,外加交易所的 taker fee(约 0.30 美分/股)。这是最贵但最确定的。
路由二:批发做市商内化。 做市商在 NBBO 内部给一个价格改善,客户少付一部分价差,且没有交易所费用。做市商赚剩下的部分,并把其中一块返给券商。
路由三:暗池中点。 成交就是零价差,但不保证成交。没成交的订单还得回交易所,等待期间中间价漂移产生延迟成本。
模拟设定 20 万笔订单,半价差服从右偏 gamma 分布(均值 6.0 bp,140 bp),股数在 1001000 股间离散取值:
N = 200_000
S0 = 50.0
spread_bp = np.clip(rng.gamma(2.0, 2.5, N) + 1.0, 1.0, 40.0)
half_spread = S0 * spread_bp / 1e4
qty = rng.choice([100, 200, 300, 500, 1000], N, p=[.42, .23, .15, .13, .07])
# 路由1 交易所 taker
EX_TAKER_FEE = 0.0030
cost_lit = half_spread * qty + EX_TAKER_FEE * qty
# 路由2 内化:价格改善率随价差宽度上升(宽价差里油水多)
pi_rate = np.clip(0.12 + 0.016 * spread_bp, 0.10, 0.42)
price_improve = half_spread * pi_rate
cost_wholesale = (half_spread - price_improve) * qty
# 路由3 暗池中点:成交则零价差,未成交需后回交易所并承担延迟成本
fill_p = np.clip(0.45 - 0.010 * spread_bp, 0.12, 0.45)
filled_mid = rng.random(N) < fill_p
delay_cost = np.abs(rng.normal(0, S0 * 3.5 / 1e4, N)) * qty
cost_midpoint = np.where(filled_mid, 0.0, cost_lit + delay_cost)python关键建模选择是 pi_rate 随价差递增。这不是拍脑袋:价差越宽,做市商在 NBBO 内部的腾挪空间越大,竞争压力会把一部分让渡给客户。窄价差股票(比如 1 美分价差的大盘股)几乎没有改善空间——这个结构性差异后面会带来一个重要结论。
模拟结果:
| 路由 | 客户总成本 | 事后最优占比 |
|---|---|---|
| 交易所 taker | $1,774k | 0.0% |
| 内化商 | $1,213k | 60.9% |
| 暗池中点 | $1,578k | 39.1% |
| 先知最优 | $763k | — |
平均每笔订单的价格改善是 0.745 美分/股,平均改善率占半价差的 21.6%。内化路由相比交易所路由为客户省下 56.2 万美元,平均每笔 2.81 美元。
这是 PFOF 拥护方最有力的证据,而且它是真的。SEC 的 Rule 605 报告里,批发做市商的价格改善率长期高于交易所,这不是营销话术。
二、但”比交易所好”不等于”最好”#
上表最后一行才是关键。如果每笔订单都能事后选到最优路由,总成本只要 76.3 万美元;内化路由的 121.3 万比它高出 45.0 万——多付了 59%。
差距来自哪里?看”事后最优占比”这一列:内化在 60.9% 的订单上是最优选择,但剩下 39.1% 的订单里,暗池中点成交本可以做到零价差。内化商给的 21.6% 改善,跟中点成交的 100% 改善比,差着一个数量级。
这就是执行质量讨论里最容易被混淆的一点:券商说”我们给客户的价格优于 NBBO”,这句话完全属实,但它的对照组是最差的那条路由。真正该问的是:为什么不试试中点?
答案很现实——中点不保证成交,试单失败要承担延迟成本,而且券商没有动力去试。把订单直接卖给内化商,PFOF 立刻到账、执行确定、Rule 605 报表还很好看。为客户多争取那 45 万,券商一分钱都拿不到,反而要承担未成交的运营风险和客诉。
PFOF 的问题不是券商把客户的钱抢走了,是券商失去了替客户多走一步的动力。
需要说明的是,这里的 39.1% 中点成交率和”先知最优”都是模拟设定下的上界——现实中不可能事后选路由,智能路由器要在下单瞬间决策。所以 45 万是缺口的理论上限,不是券商实际”欠”客户的钱。但它标出了改进空间的量级。
三、内化商为什么必须挑单:逆向选择#

理解 PFOF 必须理解一件事:批发做市商不是在赌方向,他们是在筛选客户。
散户订单流之所以值钱,是因为它”无毒”(uninformed)——大部分散户不知道下一分钟价格往哪走,做市商接下这些单,赚的是买卖价差的搬运费。但订单流里混着知情交易者:他们下单是因为真的知道点什么,成交后价格会继续朝他们的方向走,做市商接一笔亏一笔。
模拟里设定 8% 的订单是知情单,成交后 5 分钟中间价顺向漂移均值 26.9 bp(噪音单的漂移均值是 0.004 bp,干净的零均值):
informed = rng.random(N) < 0.08
# 知情单顺向漂移均值 ~27bp,必须显著超过半价差,否则内化商根本不在乎逆向选择
drift = np.where(informed,
side * rng.gamma(3.0, 9.0, N),
side * rng.normal(0, 2.0, N))
signed_drift = drift * side # 投影到订单自身方向
adverse = S0 * signed_drift / 1e4 * qtypython⚠️ 这里有个必须留神的实现细节:
drift里已经含了side,计算做市商亏损时必须再乘一次side投影回顺向幅度。我第一版漏了这步,买单卖单的符号在求和时互相抵消,逆向选择损失被算成了接近零,整个第三节的结论直接反了(挑单反而”亏钱”)。这类符号错误在微观结构模拟里极其常见,且不会报错。
内化商对知情单有 62.0% 的识别率(不完美),识别出的甩回交易所。结果:
| 策略 | 内化商毛利 |
|---|---|
| 无差别全接 | $632.3k |
| 识别后挑单 | $929.2k |
挑单带来 29.7 万美元差额,占无差别策略毛利的 47%。 更能说明问题的是拆解:被留下的知情单(识别失败的 38%)净亏 18.5 万美元,噪音单赚 111.4 万——做市商的利润全部来自噪音流,知情流是纯粹的失血点,平均每笔知情单亏 36.2 美元,而每笔订单的平均价差留存只有 6.06 美元。
这个数量级对比解释了整个 PFOF 生态的运转逻辑:一笔知情单的损失需要六笔噪音单来填。所以做市商愿意为”确定无毒”的散户流付钱,也必然会把疑似有毒的订单甩回公开市场。
由此推出一个常被忽略的外部性:被甩回交易所的正是毒性最高的那部分订单。公开市场的做市商面对的订单流平均毒性上升,理性反应是扩大报价价差——而 NBBO 又是内化商定价的基准。这条反馈链是学术界批评 PFOF 的核心论点(Battalio 等人关于订单流分割与价差的一系列研究),也是模拟无法完整刻画的部分:本文的 NBBO 是外生给定的,现实中它会被内化行为反向侵蚀。
四、券商的利益冲突:一块蛋糕,两只手抢#

前面两节说明了内化对客户有净收益,也说明了做市商必须挑单。现在看最敏感的一环:券商站在中间,它的目标函数是什么?
内化商从价差里赚到的钱是一个固定的池子,它要分成两份:一份让利给客户(价格改善),一份付给券商(PFOF)。券商索取的分成越高,留给客户改善的就越少。模拟把券商索取比例从 5% 扫到 55%:
for g in grid: # g = 券商索取的 PFOF 分成
pfof_g = base_capture * g
left = base_capture * (1 - g)
improve_g = left * 0.35 # 竞争压力下从剩余部分让利给客户python结果非常干脆:券商分成从 5% 提到 55%,自身收入增长 11.0 倍(6.1 万 → 66.7 万),客户价格改善下降 52.6%(40.3 万 → 19.1 万)。
这就是利益冲突的全部内容——不需要任何人作恶,只需要券商按自己的目标函数做优化。券商选择内化商时如果按”谁出价高”排序,客户的执行质量就是被牺牲的那一方;如果按”谁给客户改善多”排序,PFOF 收入就下降。而客户观察不到这个选择过程,Rule 605 报表也只显示”优于 NBBO”这个低门槛结论。
值得注意的是,图中”两者之和”这条灰线是向上倾斜的——因为模型里只有 35% 的剩余会传导给客户,券商多拿一块,社会总福利反而看着增加了。这不是模型在为 PFOF 辩护,恰恰暴露了一个测量陷阱:任何只看”总福利”的分析都会遗漏分配问题。客户少拿的 21 万是实实在在的,被券商多拿的 61 万淹没在总量里看不见了。监管关心的从来不是总量,是那笔钱到底归谁。
现实中约束这个冲突的力量有两个:一是内化商之间的竞争(改善给少了拿不到单),二是监管的最佳执行义务(Best Execution)。但后者的执法标准长期停留在”优于 NBBO”,而第二节已经说明这个标准有多宽松。
五、谁真正受益:价格改善的分布极不均匀#

最后一个容易被平均数掩盖的事实:价格改善不是平均分配的。
| 订单分组 | 样本数 | 交易所有效价差 | 内化后有效价差 | 改善幅度 |
|---|---|---|---|---|
| 100-499 股 | 159,973 | 12.00 bp | 9.02 bp | -24.8% |
| 500-1999 股 | 40,027 | 12.06 bp | 9.06 bp | -24.8% |
| 窄价差(<5bp) | 95,029 | 6.58 bp | 5.41 bp | -17.8% |
| 宽价差(>15bp) | 4,915 | 35.80 bp | 21.60 bp | -39.7% |
按订单规模分组几乎没有差异(都是 -24.8%),但按价差宽度分组差了一倍多:窄价差订单只改善 17.8%,宽价差订单改善 39.7%。
这个结构有两层含义。好的一面:交易冷门小盘股(宽价差)的投资者,从内化里获益最多,绝对金额上从 35.8 bp 降到 21.6 bp,省了 14.2 bp。不那么好的一面:宽价差订单只占样本的 2.5%,而 47.5% 的订单是窄价差的大盘股,它们的改善幅度最小——绝大多数交易者拿到的改善,远低于”平均改善率 21.6%“给人的印象。
券商营销材料引用的永远是加权平均改善金额,而美元加权会被少数宽价差大单主导。看执行质量报告时,正确的做法是分股票、分价差档位看,而不是看一个汇总数字。
六、这套模拟的三条边界#
模拟给出的数字很干净,但有三处现实会漏水,必须说清楚:
1. NBBO 是外生给定的。 模型里把 NBBO 当作固定基准,然后讨论在它内部如何改善。现实中因果是双向的:内化抽走无毒流 → 公开市场毒性上升 → 做市商扩大报价 → NBBO 变宽 → 内化商的”改善”基准也变宽。这意味着本文算出的 56.2 万美元客户收益是高估的,其中一部分是从”如果没有 PFOF,NBBO 本来会更窄”里借来的。这个反馈环的量级学术界至今没有定论,也是整个 PFOF 争论最难实证的部分。
2. 知情/噪音的二元划分过于干净。 模型里 8% 知情、92% 噪音,界限分明。现实中毒性是连续谱,且随时间漂移——同一个账户在财报日和平常日的毒性完全不同。真实的内化商用的是账户级历史表现打分,而非单笔订单的二元判定,识别率也远比 62% 这个静态数字复杂。
3. 零佣金的对照组不存在。 全文比较的是”同样一笔订单走不同路由”,但 PFOF 真正的辩护是**“没有 PFOF 就没有零佣金”**。这个反事实无法在模拟里检验:如果恢复每笔 4.95 美元佣金,客户的总成本一定更高——本文所有的路由成本差异都在个位数美元量级,一笔佣金就能全部抹平。对小额交易者来说,佣金归零的收益大概率压倒执行质量的损失;对大额、高频、专业交易者,结论可能相反。
七、实务清单#
如果你要评估自己券商的执行质量:
- 别看”优于 NBBO 的订单比例”——这个数字接近 100% 没有信息量(本文模拟里内化对交易所的胜率就是 100%),要看**有效价差 / 报价价差比率(E/Q ratio)**和实际价格改善的美分数;
- 分档位看,至少区分窄价差大盘股和宽价差小盘股,汇总数字会被少数大单主导;
- 限价单比市价单更受 PFOF 影响小——挂在中点的限价单绕开了整个内化博弈,代价是不保证成交;
- 交易金额上量后重算这笔账:路由差异是按股数线性放大的,佣金是固定的,存在一个盈亏平衡点,过了这个点付佣金换直连路由更划算;
- A 股投资者的相关性:中国市场是竞价撮合、无做市商内化、无 PFOF,这套机制不直接适用;但同样的逻辑出现在券商的交易单元席位分配和量化交易的对手方选择上——只要中间有人替你决定订单去哪,就有同构的冲突。
总结#
PFOF 是一个所有参与方都在说真话、但拼起来仍然有问题的机制。客户确实省了钱(56.2 万,是券商 PFOF 收入的 1.54 倍);内化商确实必须挑单才能活(挑单毛利 92.9 万 vs 全接 63.2 万,知情单净亏 18.5 万全靠噪音单补贴);券商确实面临真实的利益冲突(分成从 5% 到 55%,自身收入涨 11 倍,客户改善腰斩)。
它真正的成本藏在没人负责的那块缺口里——先知最优 76.3 万 vs 内化实际 121.3 万。这 45 万不是被谁拿走了,是没有任何一方有动力去争取。零佣金不是免费的,也不是骗局,它是一场把显性费用换成隐性执行成本的交易。对多数小额投资者这笔交易划算,但”划算”和”最优”之间那段距离,值得每个认真交易的人自己算一遍。