多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

公开量化策略为什么不能直接实盘?从回测到执行的真相与避坑指南

公开量化策略为什么不能直接实盘?从回测到执行的真相与避坑指南 1. 先说说我自己的经历拿公开策略上实盘亏掉的不只是钱几年前我刚接触量化的时候和大多数人一样最爱干的事情就是在各种开源社区、技术论坛、公众号文章里翻别人晒出来的量化策略。那会儿看到某个代码托管平台上一个标的策略的仓库README里贴着一张特别漂亮的净值曲线年化收益标着40%多夏普比率看着也不错评论区一群人说复现成功跟着跑了一个月曲线很接近。我当时激动坏了觉得这就是财富密码马上把代码clone下来装了依赖在本地跑了一遍回测果然曲线跟帖子里贴的差不多。于是兴冲冲开了一个小账户投入了几万块开始按这个策略下单。结果呢第一个月亏了将近8%。我第一反应是是不是我哪儿跑偏了然后去翻代码、翻参数反复核对之后觉得每一步都没做错。我又开始怀疑是行情变了可问题是我回测的时候明明是用的最近几年的数据行情也没有发生什么特别大的变化。后来我把订单逐笔打印出来才发现一个让我特别无语的现象我拿到的信号和回测里显示的信号根本对不上——不是延迟了一两天就是价格差了好几个档位。最后我搞明白了这个策略在回测里用的是收盘价撮合但我的实盘账户根本不可能在收盘那一刻拿到那么好的价格再加上手续费、滑点利润早就被吃光了。那次实盘之后我本来想把这个策略扔进垃圾桶但转念一想我亏的这几万块总得买点教训回来。我开始花大量时间逐个拆解公开策略试图搞明白它们到底为什么看起来能赚钱、跑起来就亏钱。今天这篇东西就是这些年拆解下来的一些观察可能会打破很多人对公开量化策略的滤镜但我保证每一条都是真金白银换来的经验。先说个结论公开的量化策略赚不了钱不是巧合而是某种结构性的必然。这里面有几层原因每一层都很难绕过去。下面我从头到尾捋一遍。2. 幸存者和沉默的大多数你看到的策略集天然就偏向好看很多人没有意识到公开策略这个生态本身就是一个典型的幸存者偏差样本池。这话怎么说呢你想想一个人在什么情况下才会把自己的策略代码、回测曲线、实盘记录整理得漂漂亮亮发到网上基本上只有一种情况他觉得自己做出来的东西足够拿得出手能获得别人的认可甚至付费。那些亏钱亏到怀疑人生的策略通常早就被作者偷偷删了或者干脆就从来没有被发出来过。我认识一位朋友他自己在某开源社区维护着几个回测项目也做过一段时间的量化社区运营。他跟我说过一个很实在的观察社区里发策略的人本质上是在做内容而不是做交易。既然是在做内容那评价一个内容好坏的标准就不是这个策略能不能长期赚钱而是这个策略的故事性够不够吸引人。你很少看到有人发我这个策略跑了三年年化只有8%最大回撤还特别深这种帖子因为这种东西没人看没人点赞而小资金翻10倍捕捉到某次大行情的完美拐点这种标题天然就有传播力。这就是第一层真相你看到的公开策略池子是被筛选过无数遍的。每一个活下来、被反复转发的策略背后可能对应着几十个甚至上百个悄无声息死掉的策略。你如果在某一个时间点去逛开源社区看到一堆年化30%、40%的策略会产生一个错觉量化赚钱好容易啊这么多策略都能赚钱。但实际上你看到的只是被人精心挑选过的极少数那些同步发生的亏损策略早就被删帖了。这个生态的逻辑和自媒体很像——你永远只看到晒出来的高光时刻看不到背后的至暗时刻。这还没完。公开策略还有一个特别容易被忽略的问题即便某个策略在某段时间、某个人手里确实赚钱它被贴出来的时候也已经是过去式了。我拆过不少策略很多作者贴出来的回测区间都是精心选择过的有些甚至刻意避开了市场风格转换剧烈的年份。比如某个策略在2022年之前表现很好但2022年之后整个市场结构变了策略直接失效作者却不会把这个失效的部分更新到帖子里。为什么因为这个策略现在已经不能赚钱了这个信息对他的传播没有任何好处。所以你看到的曲线往往是一段被精心截取的美好切片而不是策略完整的生命周期。3. 公开本身就是最大的敌人从alpha存款到拥挤交易如果说幸存者偏差还只是信息层面的误导那么第二层原因就属于物理层面的必然了也就是我一直强调的那句话公开本身就是策略最大的敌人。一个策略能够赚钱本质上是因为它捕捉到了市场上某个尚未被充分定价的规律这个规律可以想象成一张藏在市场里的钞票我们把它叫做alpha。任何一只alpha都是有储量的它的规模取决于市场上有多少资金还在无视这个规律、没有采取同样的交易动作。当一个策略还是你私人的秘密时你是在独自捡这张钞票但当它被公开发布、被几百上千人同时下载和使用捡钞票的人一下子多了几十倍这张钞票当然会被更快地捡完。更扎心的是策略使用者变多之后大家在同一时间做同样的操作这本身就会改变市场价格。比如某个策略的核心逻辑是突破某一均线就买入当大批资金在同一时刻集中买入时入场价格会被瞬间推高原本属于策略逻辑的利润空间会被自己人之间的竞争摩擦掉一部分。这种情况在量化领域有个专门的说法叫拥挤交易——当一个信号被过度使用它的有效性和边际收益就会快速衰减。这里我举个特别典型的例子。有一类特别简单的策略叫动量策略逻辑就是过去涨得好的资产未来短期内大概率继续涨。如果你在十几年前自己默默用这个策略确实可能赚到不少钱。但现在呢动量因子早就被无数论文研究透了也被无数机构和个人写进了自己的系统里它已经变成了一个拥挤因子。你我现在再把动量效应当成一个秘密武器去交易基本就是在跟整个市场赛跑机构有更快的执行通道、更低的交易成本、更精细的因子择时普通人拿一个公开策略去跑不仅吃不到alpha搞不好还要承担交易拥挤带来的回撤。还有一个更隐蔽的机制叫策略自反性。意思就是当市场上有足够多的资金在跟踪同一个策略时这个策略本身就会变成市场波动的来源而策略的失效反过来又会加剧波动。比如那些做趋势跟踪的公开策略一旦市场出现趋势信号大家同时做多行情会先被快速推高然后因为没有后续接力资金行情又快速崩塌。这种踩踏效应在期货市场、加密市场里尤其常见。我之前拆过一个公开的期货趋势策略它在回测里表现得非常平稳但一查实盘数据发现最近几年这个策略在几次关键突破点上都出现了假突破——说白了就是市场被跟风资金提前透支了策略逻辑本身没有任何问题问题出在知道这个策略的人太多了。所以你看公开策略赚不了钱不是一个技术问题而是一个生态问题。技术问题可以靠调参、改代码解决生态问题是无解的一旦一个策略被大规模知晓不管它的原始逻辑多么精妙它都在不可逆转地失效。这个失效速度现在还在变快因为信息传播的速度太快了一个策略从被发现到被完全套利殆尽可能只需要几个月甚至几周。4. 回测曲线的美颜程度决定了你上实盘后的失望程度如果说前面两层原因还属于市场环境和信息博弈的范畴那接下来这层原因就特别扎心了因为它直接跟策略本身的真实性有关。我拆过几十个公开策略绝大部分回测报告都经不起细看不是说它们一定造了假而是它们普遍用了某种回测美颜术让曲线看起来比真实情况漂亮得多。我归纳了一下公开策略回测里最常见的坑有这么几种第一种坑未来函数。这是最严重也最不可饶恕的错误。当年的策略可能在信号判断里用了未来数据——比如用当天的收盘价决定当天是否买入或者用未来几天的数据计算某个指标后再回填到昨天。在回测引擎里这类逻辑会产出一条完美得离谱的曲线因为它相当于提前知道结果再下单。但拿到实盘里你根本不可能未卜先知你只能等数据走完才能下单信号自然就对不上了。我检查过一些公开策略发现不少作者其实不是故意用未来函数而是回测框架的某些函数写法天然容易引入这种bug比如用shift(-1)这种前移操作时一不小心就造成数据泄露。第二种坑过拟合。这更普遍但也更难一眼识破。一个策略可能本身没有任何逻辑问题但作者在开发过程中不断调参数今天改成均线10日明天改成21日后天发现30日更好最后把回测曲线调到近乎完美。这种策略本质上是在背答案它记住的是历史走势的噪声而不是市场规律。你拿同样的参数去跑未来的行情表现往往一塌糊涂。怎么判断一个策略是不是过拟合我一般看两个信号第一个是参数附近的表现是否平滑——如果参数从20日改成21日业绩就暴跌那说明这个策略对参数极其敏感基本就是过拟合第二个是策略的逻辑是否足够简单——如果一个策略用了七八个指标、十几个过滤条件那它大概率是在拟合历史而不是交易未来。第三种坑成本失真。这个坑几乎存在于所有公开策略里也是最让新手误判的地方。很多回测框架默认手续费、滑点设置得非常理想化有的甚至完全忽略交易成本。但真实的交易成本其实非常惊人手续费、印花税、滑点、冲击成本、资金占用成本全部加起来一个高频换手的策略一年光成本就能吃好几个百分点的收益。我之前专门算过一笔账一个换手率特别高的日频策略回测里显示年化30%但如果把单次交易成本按万分之几来算真实年化可能只剩10%出头甚至更低。这一点在期货和高频策略里更夸张有些策略的亏损完全就是被交易成本拖垮的。我在这里可以给大家一个特别实用的避坑清单是我这几年拆解策略一直用的先看回测报告里有没有写清楚交易成本假设如果完全没提默认按最悲观的情况估算一遍把策略参数上下浮动10%看看业绩是不是剧烈波动如果波动很大请立刻警惕看最大回撤出现的时刻和持续时间很多时候年化收益是虚的能不能扛过回撤才是真的最后用样本外数据验证一下也就是把回测区间之外的一段行情跑一遍不要只盯着作者贴出来的区间看。5. 策略之外的四件事执行、仓位、风控和心态即使一个公开策略逻辑完全真实、参数完全合理、也还没有被市场拥挤掉想靠它实盘赚钱也还差得远。这是我看过太多人忽略的一点策略只是整个交易系统里的一环从策略正确到账户赚钱中间还隔着执行、仓位、风控和心态这四道坎。我当年拿公开策略上实盘亏钱就是因为只盯着策略本身完全没考虑这四件事。先说执行。这是最容易被新手低估的环节。我前面说过我的信号和回测对不上说白了就是执行层面的偏差。在回测里你的每一笔单子都是按理想价格成交的在真实市场里你要面对跳空、滑点、流动性不足、买一卖一价差、撮合延迟这些问题。一个策略在回测里换手越高它对执行的敏感度就越高实盘和回测的差距也就越大。哪怕是同样的策略机构用低延迟通道做和执行和普通散户用手机App手动下单执行结果都可能完全不同。再说仓位。很多公开策略的回测曲线默认是全仓、单笔梭哈的但真金白银的账户操作不可能这样搞。你把全部资金押在一个策略上一旦遇到回撤账户可能直接打到你无法承受的极限。我见过一个很讽刺的案例某个人拿了一个公开策略跑实盘前两个月确实赚了钱第三个月回撤突然来了账户一下回吐了之前所有的利润还倒亏他心态崩溃之后直接删掉了策略。问题在于那个策略的年化收益确实不低波动性也高得吓人本来应该配一个极低的仓位比例去运行他却用了满仓干的方式结果策略本身没死人先被震出去了。这就是仓位管理和资金管理的重要性——可惜公开策略的发布者几乎不会告诉你这些。风控就更有意思了。回测里你永远可以把亏损扛着等反弹因为历史数据是固定的但实盘里你面对的是未知的未来。一个暴跌信号出来之后你不止损它可能继续跌30%那时候你连翻本的机会都没有。公开策略通常没有任何风控框架——没有最大回撤熔断、没有单日亏损限制、没有信号失效时的应急方案。你如果直接拿它上实盘等于开着没安全气囊的车上了高速。最后是心态这个说出来有点虚但它是最杀人的。实盘交易中人的恐惧和贪婪会直接影响执行力。策略发出买入信号你敢不敢下那笔单账户连续回撤几周你还敢不敢继续按信号执行大多数人在实盘中的第一反应是手动干预——要么该买的时候不敢买要么亏了之后想再等一下回本一套原本设计好的逻辑很快就被自己的情绪扭曲得面目全非。我后来学会了一个特别土但特别有效的办法用程序化执行代替手动操作信号一触发就自动下单不给自己临场决策的机会。这算是从实战里踩坑踩出来的教训。6. 公开策略不是废纸关键是你怎么拆它看到这里可能有人会觉得那是不是所有公开策略都完全没用直接放弃就好了我的答案是不能直接用来跑实盘但完全可以拿来当素材、当教材、当灵感来源。关键在于你怎么拆它、怎么消化它。我现在看到任何一个公开策略第一反应不再是这个策略能不能帮我赚钱而是先问三个问题它的盈利逻辑到底是什么它赚的是市场哪部分钱这部分钱在当前的市场上还在不在这三个问题问完之后我基本就能判断这个策略有没有继续看下去的价值。比如有些策略赚的是投资者反应过度的钱那我要想想现在这个市场情绪化程度是不是还跟以前一样有些策略赚的是市场流动性的钱那我要想想现在的交易机制是不是变了。经过这个拆解过程哪怕最终我没有直接使用这个策略对市场的理解也会深一层。如果要进一步利用公开策略我一般会做这么几步改造换标的池。原策略可能是在某个品种上有效但我会拿同样的逻辑去跑其他相关性低的品种看逻辑是否通用。一个逻辑在不同标的上都站得住脚往往才是真逻辑。换周期。日线有效试试小时线小时线有效试试分钟线。周期切换能帮我判断策略依赖的是趋势还是噪声。加过滤条件。比如在原策略基础上加一个波动率过滤或者加一个成交量确认这些改动通常能大幅减少无效交易频率。小资金先跑一个月。不管回测多漂亮我坚持先用极小比例的资金跑真实行情记录实际成交质量、滑点、信号延迟。这一个月的数据比任何回测报告都有用。另外我还想分享一个反向用法公开策略可以当反向指标用。如果一个策略在某段时间突然被大量转发、被大家热烈讨论我反而会警惕它正在变得拥挤甚至考虑在它最热门的时候去规避它的交易逻辑。市场上有一句话我一直很认可如果一个信号已经人尽皆知那它大概率已经不好用了。最后说说我对量化交易这个事儿的整体看法。很多人死在第一步是因为把找到一个赚钱的策略当成了终点但实际上策略开发只是一个起点。真正决定账户长期表现的因素其实是策略背后的逻辑是否真实、执行系统是否稳定、仓位管理是否科学、风控框架是否完善以及你是不是能接受长期面对回撤的折磨。公开策略提供了一个很好的学习素材但你要把它当成一块原材料而不是一个成品。我花了很长时间、亏了不少钱才想明白这个道理——量化交易这行最核心的能力从来不是抄作业而是看懂作业背后的逻辑然后做出自己的题。
返回列表