第二章 市场微观结构:交易所撮合机制、订单簿深度、滑点与冲击成本对套利的影响
做套利的人,最容易犯的一个错误是什么?
我告诉你——就是只看价差,不看微观结构。
价差再大,你进不去、出不来,全是白搭。我见过太多人,策略回测跑得漂亮,一上实盘就亏钱。为什么?因为回测里没有滑点,没有冲击成本,没有订单簿的深度变化。说白了,你看到的那个价差,根本就不是你能吃到的价差。
这一章,我们就来拆解这些「看不见的手」。
2.1 交易所的撮合机制:你的对手盘是谁?
先问个问题:你下的单子,到底是怎么成交的?
国内期货交易所,比如上期所、大商所、郑商所,用的都是连续竞价撮合。现货交易所,比如沪深交易所,也是连续竞价。但细节上,有差别。
2.1.1 价格优先、时间优先
这是最基础的规则。买单出价高的先成交,卖单出价低的先成交。价格一样,谁先挂单谁先成交。
听起来简单?嗯,但这里有个坑。
我曾经在实盘里吃过亏。当时做螺纹钢的期现套利,现货那边我挂了个买单,期货这边我挂了个卖单。结果现货成交了,期货没成交。为什么?因为期货那边有个比我早挂1毫秒的单子,价格一样,人家先走了。我这边价差瞬间就没了,现货砸手里了。
所以,时间优先这四个字,在套利里就是命根子。你比别人慢一毫秒,可能就吃不到这口肉。
2.1.2 集合竞价与开盘价的形成
每天开盘前,交易所会有一个集合竞价阶段。这个阶段,所有单子都先攒着,不成交。等到某一时刻,系统找出一个能让成交量最大的价格,然后统一成交。
做套利的人,要特别注意这个阶段。为什么?
- 现货和期货的开盘时间可能不同步。比如股指期货9:30开盘,现货ETF也是9:30开盘。但集合竞价的时间窗口不一样。你如果在集合竞价阶段下单,可能一边成交了,另一边没成交。
- 开盘价容易跳空。集合竞价出来的价格,可能跟昨天的收盘价差一大截。你如果没算好这个跳空,套利头寸可能直接穿仓。
2.2 订单簿深度:你能吃下多少量?
订单簿,就是交易所里所有挂单的集合。买一到买五,卖一到卖五,每个价位上挂着多少手。
做套利,你不仅要看价差,还要看订单簿的厚度。
2.2.1 深度决定了你的容量
举个例子。你发现螺纹钢期货和现货的价差有10个点。你想吃这10个点。但你看订单簿,期货那边卖一只有10手,卖二有15手,卖三有20手。你想吃100手?对不起,你得把卖一到卖五全吃掉。这样一来,你的成交均价就不是卖一的价格了,而是被拉高了好几个点。
价差10个点,你实际吃到嘴里的可能只有5个点。这就是深度不够带来的问题。
| 价位 | 卖单量(手) | 累计量(手) |
|---|---|---|
| 卖一 | 10 | 10 |
| 卖二 | 15 | 25 |
| 卖三 | 20 | 45 |
| 卖四 | 30 | 75 |
| 卖五 | 40 | 115 |
你看,你想吃100手,得吃到卖四。你的成交均价是多少?算一下:
成交均价 = (10*卖一价 + 15*卖二价 + 20*卖三价 + 30*卖四价) / 75
注意,这里只成交了75手,因为卖四只有30手,你吃不完。剩下的25手,你得继续吃卖五。价格又高了。
2.2.2 深度变化是信号
订单簿不是静止的。它每时每刻都在变。我个人经验是,订单簿的深度变化,往往比价格变化更有信息量。
比如,你发现期货的卖一突然被撤单了,然后卖二、卖三也陆续撤单。这说明什么?说明有大资金在往上拉。他不想在低位卖。这时候,你如果还傻傻地挂卖单,可能就被轧空了。
反过来,如果买单深度突然增加,说明有人在下面托底。这时候做空要小心。
2.3 滑点:你看到的价差不是你能吃到的价差
滑点,就是你的预期成交价和实际成交价之间的差。
做套利,滑点是最大的敌人。没有之一。
2.3.1 滑点的来源
- 流动性不足:订单簿太薄,你吃不到理想价位。
- 市场波动:在你下单到成交的这段时间里,价格变了。
- 网络延迟:你的信号传到交易所,需要时间。这期间,别人可能已经抢先了。
我记得有一次做黄金期现套利。当时价差有2块钱,我觉得稳了。结果我下单的时候,黄金现货那边突然跳水,等我成交,价差已经变成负的了。那一单,我亏了5万。从那以后,我再也不敢只看价差,不看滑点了。
2.3.2 如何估算滑点?
一个简单的办法:看买卖价差(spread)。
如果期货的买卖价差是1个点,现货的买卖价差是0.5个点,那你一进一出,光滑点就要吃掉1.5个点。如果你的套利空间只有2个点,那你就只剩0.5个点了。再扣掉手续费,基本白干。
总滑点 ≈ 期货买卖价差 + 现货买卖价差 + 冲击成本
这个公式,我建议你刻在脑子里。
2.4 冲击成本:大资金的天敌
冲击成本,就是你下单时,因为你的单子太大,把价格推高了(或压低了)造成的额外成本。
小资金做套利,基本不考虑冲击成本。但如果你资金量大了,比如一次做几百手,冲击成本就是大头。
2.4.1 冲击成本怎么算?
简单说,就是你的成交均价,跟下单前的市场价之间的差。
举个例子。你想买100手螺纹钢期货。下单前,卖一价是4000,有10手。你100手进去,把卖一到卖五全吃了。成交均价可能是4010。那冲击成本就是10个点。
2.4.2 如何降低冲击成本?
- 拆单:把大单拆成小单,慢慢吃。比如100手拆成10次,每次10手。
- 用算法交易:比如TWAP(时间加权平均价格)或VWAP(成交量加权平均价格)算法。
- 选流动性好的合约:主力合约流动性好,冲击成本低。非主力合约,别看价差大,你一进去就砸出个大坑。
2.5 知识体系总览
下面这张图,是我自己总结的。它把这一章的核心逻辑串起来了。你仔细看一遍,应该能有个整体印象。
2.6 实战中的避坑指南
最后,分享几个我踩过的坑。你记住了,能少走很多弯路。
- 不要在高频数据上省钱:做套利,至少要用Tick级数据。用分钟级数据回测,出来的结果全是假的。我曾经用分钟数据回测,年化30%,实盘一跑,亏成狗。后来换成Tick数据,才发现滑点比我预想的大得多。
- 注意交易所的熔断机制:有些交易所,价格波动太大时会触发熔断。熔断期间,你不能下单。如果你一边成交了,另一边熔断了,你就暴露了单边风险。
- 小心节假日效应:节假日前后,流动性会骤降。订单簿深度可能只有平时的十分之一。这时候做套利,滑点会大得吓人。我一般节前三天就清仓了,不赚最后一口铜板。
- 永远假设你的对手盘比你聪明:你看到的价差,别人也看到了。你能成交,是因为有人愿意在这个价位跟你成交。想想看,他为什么愿意?是不是他知道什么你不知道的信息?
好了,这一章就到这里。微观结构这东西,说复杂也复杂,说简单也简单。你只要记住一句话:你看到的价差,不是你能吃到的价差。剩下的,就是在实战中慢慢体会了。