引言:滑点,这个被低估的隐形杀手
做了这么多年基金管理,说实话,最让我睡不着觉的往往不是方向判断错了,而是明明方向对了,钱却没赚到该赚的那么多。尤其做趋势跟踪策略,讲究的是“截断亏损,让利润奔跑”,但如果你连奔跑的起跑线都被滑点吃掉了,那后面的故事基本就变味了。今天想跟大家聊聊滑点控制,这个话题在圈内讨论不少,但真正掰开揉碎讲透的并不多。你要知道,在10-20亿这个规模段,滑点从“小问题”变成“大成本”的转折点,往往就在某一次净值回撤的细节里。
先讲个我自己的经历。几年前管理一只CTA趋势策略产品,规模刚破12亿。有一次在螺纹钢上做空头趋势跟踪,信号触发得很漂亮,我们按计划在日内均价线附近布空。结果因为当时移动止损单设置太密集,加上盘口流动性不足,实际成交价跟理想价差了整整0.8%。那天收盘一看,单笔亏损里滑点占了六成。这对一个以“精细执行”为卖点的策略来说,打击是直接的。所以我后来经常跟团队说,**滑点不是噪音,它是策略逻辑里真实存在的成本项,必须要像管理仓位一样去管理它**。
从行业大背景看,趋势跟踪策略本质上就是追涨杀跌,当趋势确认时入场,这就决定了我们必须在市场情绪最激烈的时候出手。你想想,趋势启动那一刻,往往是成交量放大、价差拉宽、短线资金拥挤的时刻,这种环境下滑点天然就大。据我们内部统计,在不同波动率环境下,同类策略的滑点成本差异可以达到2-3倍。控制滑点不是“省小钱”,它直接决定了策略在扣除成本后的夏普比率。这篇文章,我想从一个管过钱、也踩过坑的从业者角度,把滑点控制的几个关键维度掰扯清楚。
执行算法是滑点控制的第一道闸门
要说滑点控制,最基础也最核心的就是执行算法了。2019年之前我们还在用最简单的TWAP(时间加权平均价格)和VWAP(成交量加权平均价格),但后来我发现,在趋势行情启动瞬间,这类静态算法简直是灾难。为什么?因为趋势跟踪信号触发时,市场已经单方向走了一段了,你再按时间或者历史成交量均匀下单,等于是在一个已经失衡的市场上加剧自己的不利冲击,滑点自然控制不住。
后来我们引入了动态执行算法,核心逻辑是**根据实时的市场微观结构预测模型,动态调整下单节奏**。比如检测到盘口买卖深度失衡、主动成交占比飙升时,算法会快速提高下单积极性,抢在流动性恶化前完成建仓;而如果监测到跟风盘减少、买卖价差收窄,那就适当放慢节奏,等待更好的价格。这套东西听起来简单,但实盘调参真的都是靠真金白银喂出来的。
我要分享一个具体数字。去年我们在原油期货上做一次趋势加仓,信号是隔夜跳空高开,我们的执行算法在开盘前15分钟通过分析集合竞价阶段的委托簿,判断开盘流动性可能集中释放,于是采用了激进的前端加载策略,把总执行时间的60%压缩到开盘后的前5分钟。那次总成交量约3000手,对比同期如果把单量等分到全天,滑点每手节省了约1.5跳。这一笔下来,直接影响当日策略盈亏超过2%。有时候,这种执行层面的“抠”出来的利润,比选对方向还重要。
算法不是万能的,它有适用边界。比如涨跌停板附近,或者极端单边行情中,几乎所有算法都会失效。这时候,我们更倾向于采用人工干预和算法降速结合的方式,宁可错过一小段行情,也不在流动性枯竭时硬冲。**这个“认怂”的智慧,是控制极端滑点的底线思维**。
流动性评估不止看成交额那么简单
做了这些年基金,我越来越发现一个容易犯的错:看流动性只看品种的日成交额或持仓量,这两个数字大就敢大胆进。其实这是很大的误区。趋势跟踪策略往往在市场活跃期进出,但活跃并不等于深度好。比如某些品种在特定时段内成交非常集中,但如果你恰好在两个活跃时段之间下单,盘口深度可能薄得跟纸一样,稍微大点的单子就会把价格推得老远。
所以我们在内部建立了一套流动性质量评分体系,不看表面总量,而是看**“可容纳冲击量”**。具体做法是:抓取连续三个月的分笔数据,分析在不同冲击成本容差下(比如2个tick以内的成交量),盘口能承接单量是多少。然后把这个评分跟我们的持仓周期、目标仓位做匹配。比如某个品种日成交额200亿,但冲击成本容差在2跳以内的深度只有5000手,那我们就认定其流动性评级为B,单笔下单量就不会超过1000手,同时会主动要求拆分为多批次执行。
别忘了,还要考虑跨品种的流动性协同情况。有些趋势策略是横跨多品种组合的,当同一个信号在盘面上同时触发时,往往多个品种一起波动。这时候如果只看单一品种流动性,就很容易忽略市场整体的拥挤效应。我碰到过一次,2021年动力煤大涨那波,我们的策略同时捕捉到焦煤、焦炭、动力煤三个品种的做多信号。如果分别下单,按各自盘口深度看都合理,但三个信号叠加执行,就好比同时向三个相同的池子里面倒入大石头,水位(价格)瞬间就变了。那次我们协调了三个下单团队,将总量按品种流动性比例重新分配权重,并且错开执行时间窗口,最终整体滑点比单独执行降低了约30%。这个经验告诉我们,**组合维度的流动性评估,跟单个品种的深度评估同等重要**。
冲击成本模型动态更新才能应对市场变化
冲击成本模型,听起来很学术,其实本质上就是估算“你这张单子砸下去,市场要涨或跌多少”。很多资管机构用的是静态线性模型,把冲击成本跟单量规模挂钩,比如下多少手就对应多少bp。可实际市场根本不是线性的。当市场情绪高涨时,同样的单量冲击成本可能是正常情况下的两倍;而当市场冷清时,又可能是0.5倍。我们坚持每周更新一次冲击成本模型的参数,依据就是过去两周的市场微观行为特征。
具体怎么做?我们利用自建的数据平台,拉取每一笔逐笔成交数据,计算最优买卖价差、订单簿斜率、以及大单成交后的均值回归时间等指标。然后把这些指标嵌入到我们的执行优化器里,动态调整下单路径。这不算什么高精尖的东西,关键在坚持更新。很多小私募在这块就松懈了,拿着去年建的模型一直用,这种偷懒在震荡市里或许问题不大,但一旦行情节奏切换,往往会被打个措手不及。
说到这,不得不提一次“学费”经历。2022年5月份,美联储加息超预期,整个商品市场出现连续两日的恐慌性暴跌。我们当时一个趋势策略在部分品种上触发了止损信号,按照模型计算,当时冲击成本是正常水平的1.2倍,我们按此算法设定了分批赎回节奏。但实际情况是市场流动性比模型预测的低得离谱,因为很多机构都在同时砍仓。那两天的实际滑点达到了模型预测的2.8倍。这次教训让我们反思,**极端行情下,所有历史数据推导的模型都可能失效**,所以在模型里我们增加了一个“流动性黑洞”的倒数阈值,一旦运行时的市场波动率突破该阈值,算法会自动切换为保守模式,也就是主动放弃部分成交,等待流动性回归后再完成剩余仓位,哪怕多花一个小时,也比在恐慌里贱卖强。
交易时段选择能有效避开滑点雷区
做趋势跟踪这些年,说句实话,跟盘口斗智斗勇是常态,但很多人忽略了一个最省力气的滑点控制手段:选对交易时段。你以为全天24小时都能交易,就能随便选时间下手吗?大错特错。在我们管理的品种池里,不同时段的流动性分布差异极大,直接影响执行成本。
以国内商品期货为例,日盘9:00-10:30和夜盘21:00-23:00是主流交易时段,流动性相对充沛。但到了午盘休市前最后15分钟,或者夜盘后半段(凌晨12点以后),盘口深度会骤降,买卖价差拉大一倍也不稀奇。所以我们在策略执行层面做了一项硬性约束:**除非是止损单或突发逻辑触发,否则趋势信号开仓优先选在日内流动性最佳的两个窗口执行,即开盘后的半小时,以及下午收盘前的45分钟**。
这个约束对做交易的人来讲可能有点“反人性”,因为信号可能随时触发。但我们的解决办法是设置一个信号缓冲池:如果信号在流动性差的时段触发,那就挂一个限价单在距离市价较远的位置,同时设定一个时间失效期限(比如30分钟)。如果在这段时间内行情继续往有利方向走,那就顺利成交;如果行情反转了,我们反而因为没成交而规避了一次糟糕的入场。说到底,这有点“主动撤单”的智慧,虽然不是每次都能占到便宜,但长期统计下来,**用时间换空间,减少被迫在不利流动性环境下的成交,是控制滑点最朴素也最有效的一招**。
不同交易所、不同品种的流动性时段不一样。比如外盘的贵金属,亚盘时段流动性差,但伦敦盘和纽约盘时段相对友好。我们做跨市场配置时,会专门为每个品种设定一个“可执行时段矩阵”,把这个矩阵直接嵌入到交易系统的逻辑里去。这样一来,既保证了策略的独立判断,又避免了执行时段对信号质量的干扰。这套方法运行将近两年,从净值表现看,确实比过去全天候执行时期的滑点平均下降了15%左右。
订单拆分策略在不同行情下的微调逻辑
订单拆分,说白了就是把一个大单“切碎”了再吃。这话题不新鲜,但拆得好不好,差别还是挺大的。我们内部有一套动态拆单规则,不是简单地固定切成N份,而是根据一段时间的冲击成本预估,来决定切多少刀、每刀多大、以及切刀之间的间隔多久。
正常趋势行情下,我们偏向使用“加速收敛”的拆分方式:初始下单量占比较高(比如20%),如果成交价格没有显著偏离,就持续加大后续单子的占比;如果出现连续滑点超预期,马上减少单笔量,并拉长间隔。这种“先快后慢、逐步确认”的模式,好处是如果行情配合,能在很小滑点内快速建仓;一旦发现情况不对,也能及时刹车,避免进一步扩大亏损。
但在震荡盘整阶段,这套逻辑就得改改。因为此时趋势强度不够,价格往往在区间来回,如果你用“加速收敛”方式去追一个假突破信号,很容易买在阶段高点。所以我们会在震荡逻辑下改用“随机微步”策略:把总订单分成50-60个小单,交易时间也拉长到30-60分钟,单子之间的间隔随机化,避免被市场其他参与者识别出我们的下单意图。这种“分布式渗透”方式能在隐蔽性和流动性消耗之间找到不错的平衡。
这里我有一个实操细节想分享。我们内部对拆单策略设了一个“滑点容忍动态上限”,当订单执行到一半时,如果累计滑点已经超过总容忍度上限的80%,系统会自动停止后续拆分,并将剩余仓位转化为被动挂单(挂在买卖盘上吃被动单)。这种及时止损机制的引入,曾帮我们避免过一次较大回撤。我记得很清楚,那是2023年3月,苹果期货上因为突发基本面消息,盘口瞬间薄了一层,我们一笔1000手的卖单执行到一半,滑点就冲到了3个跳。系统自动触发上限保护,转为被动挂单,随后价格反弹了5个跳,我们反而在挂单位置全部成交了。那次执行下来,比硬着头皮全拆完成节省了将近2%的成本。**好的拆单策略,不是说要“拆得多好”,而是要知道什么时候该拆、什么时候不拆**。
滑点的事后归因与小团队反馈机制
前面聊了那么多控制方法,最后一步其实是复盘。如果连滑点是怎么产生的都没搞清楚,那再多的优化方法也只是盲人摸象。我们内部有一套标准的滑点归因模板,每次交易结束后,执行团队必须填写一份记录表,包含预期滑点、实际滑点、冲击成本占比、时间滑点占比、以及具体发生在哪个交易时段和哪个盘口价位。
这套东西听上去很繁琐,但坚持了四年之后,它变成了一笔巨大的财富。因为数据是会说话的。通过归因,我们发现了一个有意思的现象:我们的趋势策略在下午两点半到三点之间执行的滑点,整体比上午十点半高出一倍多。究其原因,不只是流动性问题,更多的可能这时候很多波段资金在调整仓位,市场方向感差,导致我们作为动量因子容易接盘。基于这个归因,我们就调整了策略的信号触发时间窗口,把强信号保持到下午三点后再执行,能避开就避开。虽然有时候会错过一点行情,但从整体盈亏比看是划算的。
这个归因机制还承担着一个重要职能:反馈到前台的策略研发团队。他们根据执行团队的滑点情况,反向评估策略的容量是不是已经到了边际。如果你发现滑点归因里“市场冲击”项占比越来越高,哪怕你用了最完美的执行路径,也说明策略本身在这个资金规模上的容纳度已接近极限。这时候就要进行降频或者模型调整,否则继续增大规模只会让净值曲线变得越来“粘稠”。
这让我想起一次与同行交流时听到的一个案例。上海一家做股指CTA的私募,规模将近30亿,他们早期忽视了滑点归因,导致策略在扩容后三个月内,同一套信号的平均收益下降了两成,最后他们通过强制降低规模、精调执行参数才救回来。**滑点归因这件事,做的不是事后诸葛,而是让你在规模发展即将越界时提前感受到“”的威胁,这比任何风控指标都来得灵敏**。
黑子私募基金管理公司观点
趋势跟踪策略的滑点控制,在我看来,是整个交易环节中“见效最快但最考验内功”的一环。黑子私募基金管理一直强调,策略的盈利能力不完全取决于信号胜率,而决定在每笔交易的成本边际。我们内部有个理念,**“把滑点当成策略生态中的共生变量,而非必须承受的代价”**。控制滑点不是简单做一个最优执行算法那么简单,它需要你对市场微观结构有持续且敏锐的观察,甚至需要像猎人一样思考你的猎物(对手方)会怎么跑。这几年我们积累了足够多的微观数据,持续优化执行模块,本质上是为了让我们的趋势策略在任何市场阶段都具备更长的“寿命”。同时我们也要提醒同行,滑点控制没有一劳永逸的圣杯,它需要你带点“洁癖”去管理每一个bp,去尊重每一笔交易对手的智慧。**黑子私募基金管理公司愿意跟同业多交流,在合规框架下分享关于执行层面的经验,共同推动整个行业的滑点管理水平。** 毕竟,把成本做低,把资金效率做高,是我们作为资管人的本分。