市价单会吃掉什么?
让一笔不指定价格的订单逐档扫过卖盘,区分立即成交、平均执行价和没有对手方的剩余数量。
- 解释市价单为什么会跨越多个价格档位
- 用平均执行价衡量深度造成的冲击
- 判断 IOC 剩余数量为什么不能自动变成挂单
- 上一章谁应该先成交?
- 本章市价单会吃掉什么?
让一笔不指定价格的订单逐档扫过卖盘,区分立即成交、平均执行价和没有对手方的剩余数量。
- 下一章价差是谁留下的?
先想一想这几个问题
展开答案前,可以先在心里做个判断。与预期不同的内容可以加入复习列表。
Q01市价单没有写价格,难道是在说‘多少钱都买’?+
从风险角度几乎是。真实系统常把它实现为带保护上限的 IOC:立即吃掉允许范围内的档位,剩余取消,避免空盘口或极端价格无限吞噬资金。
市价单把“现在就成交”放在第一位,把价格交给盘口。它看起来比限价单简单,却更依赖市场深度:同一笔订单可能在多个价格档位成交,平均执行价也可能和第一眼看到的卖一完全不同。
不指定价格,不等于没有价格
实验室里的市价单只承诺一件事:尽量立即成交。它会从卖一开始逐档吃掉可用数量,直到订单完成或盘口没有更多对手方。每一笔成交仍然有明确价格,只是这些价格来自等待中的卖单。
LAB / 积分
限价订单先进入队列;只有盘口交叉,撮合引擎才会把它们变成成交。
市价单会沿着卖盘逐档成交
它不把价格写进订单簿,而是立即消耗当下可见的深度;没有成交的剩余部分不会悄悄变成挂单。
先读盘口:卖一是当前最低卖价,买一是当前最高买价。只有买价不低于卖价时,撮合循环才会启动。
- 01
盘口创建:卖一 102 分(两个价位相同的订单),买一 98 分。价格和时间都需要被保留。
拖动滑块可以回到此前的步骤。从那里继续操作时,后续记录会替换为新的操作序列。
一笔订单可以跨过多个档位
初始卖盘在 102 分有 5 LAB,在 105 分还有 5 LAB。市价买入 8 LAB 会先拿走 102 分的 5 LAB,再从 105 分拿走 3 LAB。它不是“以 102 分买 8 份”,而是两条不同的成交记录。
平均执行价是所有成交金额除以成交数量。在这个例子里,平均价会高于 102 分;差异来自深度,不是手续费,也不是引擎随机改变了报价。
IOC 剩余数量不会悄悄排队
市价单的教学实现采用 IOC(Immediate-Or-Cancel):能立即成交的部分完成,找不到对手方的部分立即取消。这样“我愿意现在成交”和“我愿意挂在盘口等待”被明确区分。
展开:这一步如何实现
for ask in asks sorted by price, time:
fill = min(order.remaining, ask.remaining)
settle(at=ask.price, quantity=fill)
if order.remaining == 0: break
cancel(order.remaining)
真实交易系统还要检查余额、价格保护、风控限额和撮合批次。实验室把这些结果写进执行摘要:请求数量、已成交数量、未成交数量和平均成交价,方便你从状态而不是动画判断发生了什么。
市价买入 8 LAB 后,为什么平均执行价会高于卖一 102 分?
用三个问题读懂市价单
- 订单是在保护价格,还是保护立即成交?
- 当前卖一有多少数量,下一档价格在哪里?
- 未成交的数量是继续等待,还是按 IOC 规则被取消?
这三个问题同样适用于交易所、链上订单簿和清算系统。市价单不是“没有价格”,而是把价格选择权交给了当前可见的流动性。