滑点本质:什么是滑点?
做量化交易的朋友,应该都吃过滑点的亏。
我刚开始实盘的时候,就栽过跟头。策略回测年化30%,实盘一跑,直接缩水到15%。当时我百思不得其解,后来一查日志——好家伙,滑点吃掉了一大半利润。
说白了,滑点就是「你下单的价格」和「实际成交的价格」之间的差值。你挂单100块买入,结果成交在100.05,那0.05就是滑点。别小看这几分钱,高频交易里,滑点就是利润的隐形杀手。
滑点的数学定义:
S = P_executed - P_intended
其中,S为滑点,P_executed为实际成交价,P_intended为预期成交价。
对于买单,滑点通常为正(买贵了);对于卖单,滑点通常为负(卖便宜了)。
滑点的三个构成要素
滑点不是单一因素造成的。我习惯把它拆成三块来看:买卖价差、市场冲击、延迟成本。这三块加在一起,才是你实际付出的滑点。
1. 买卖价差(Bid-Ask Spread)
这是最直观的滑点来源。你打开订单簿,看到买一价和卖一价之间的差距,就是价差。
举个例子:
| 类型 | 价格 | 数量 |
|---|---|---|
| 卖一 | 100.05 | 1000股 |
| 买一 | 100.00 | 1000股 |
如果你市价买入,成交价就是100.05,比买一价高了0.05。这0.05就是价差成本。
我在做美股交易时遇到过,流动性差的股票,价差能到1%以上。你想想看,还没赚钱就先亏1%,这生意怎么做?
我的经验:流动性越好的品种,价差越小。比如沪深300成分股,价差通常只有1-2个tick。而一些小盘股,价差可能大到离谱。选品种时,先看价差,这是基本功。
2. 市场冲击(Market Impact)
市场冲击,说白了就是「你的订单本身影响了价格」。你买得越多,价格被推得越高;你卖得越多,价格被压得越低。
为什么会这样?
因为订单簿的深度是有限的。你吃掉卖一,还有卖二、卖三...每吃掉一层,价格就往上跳一档。这就是冲击成本。
我曾经做过一个实验:用100万资金去扫一个中等流动性的股票。结果刚吃到一半,价格已经跳了3个tick。后面的单子,全成交在更高的价位上。那次之后,我就再也不敢大单直接怼了。
注意:市场冲击和订单规模呈非线性关系。你下1000股和10000股,冲击成本不是10倍,可能是20倍。因为大单会吃掉更多档位的挂单,甚至引发其他交易者的跟风行为。
3. 延迟成本(Latency Cost)
延迟成本,是很多人容易忽略的。你下单的那一刻,到订单真正到达交易所,中间有时间差。这期间,价格可能已经变了。
我举个例子:
你看到买一价100.00,决定市价买入。你的订单从电脑发出,经过网络、券商服务器、交易所撮合引擎...整个过程大概需要10毫秒。就在这10毫秒里,有人抢先买走了卖一的单子。你的订单到达时,只能吃卖二的100.06了。
这0.06的差价,就是延迟成本。
我记得有一次做期货,网络突然卡顿了一下,延迟从5毫秒飙到了50毫秒。那天的滑点直接翻了三倍。嗯,从那以后,我就在服务器旁边放了个网络监控,随时盯着延迟。
延迟成本的构成:
- 网络传输延迟:从你的机器到交易所服务器
- 系统处理延迟:订单在交易系统内部的排队和处理时间
- 撮合延迟:交易所撮合引擎的处理时间
滑点的综合公式
把三块加起来,滑点的完整公式就是:
S = Spread + Impact + Latency
其中:
- Spread = 买卖价差的一半(因为你只吃一边)
- Impact = 订单对价格的推动效应
- Latency = 延迟期间的价格变动
这个公式看着简单,但实际计算时,每个部分都需要精细建模。我一般会在回测中分别统计这三块,看看哪个是主要矛盾。
知识体系结构图
下面这张图,是我自己梳理滑点知识时画的。它把滑点的本质、构成、以及它们之间的关系,一次性讲清楚了。
避坑指南:我曾经犯过一个错误——只统计了价差,忽略了冲击和延迟。结果回测看起来很美,实盘一跑就露馅。后来我学乖了,回测时把三块都加上,至少留出0.1%的滑点余量。这样实盘才不会太难看。
好了,滑点的本质就讲到这里。记住三个关键词:价差、冲击、延迟。下次你看到滑点,就知道它从哪来的了。