为什么RPS选股回测年化40%,实盘三个月亏18%?
Hello,
我是葱头,
一个写了26年代码的程序员。
现在在用缠论和RPS做主观交易。
今天我们来聊聊RPS选股回测光鲜实盘惨淡的那个坑
---2023年下半年,我花了整整两个月,写了一套RPS选股系统。日线级别、周线级别、月线级别全覆盖,多周期共振、量能验证、换手率过滤、甚至接了基本面财务数据做二次筛选。回测跑完,2018年到2022年五年,年化收益率稳稳在40%以上,最大回撤控制在15%以内。那会儿我看着回测报告,心里那个美啊,觉得终于找到了圣杯。讲真,那时候我甚至开始幻想辞职全职交易了,还给老婆画大饼说明年换辆好车。
---实盘跑了三个月,账户从100万跌到82万。扣除手续费滑点,年化收益率是负的。我盯着盘后复盘记录发呆:明明每天选股名单里都有涨停板,明明RPS排名前十的票大多都涨了,为什么我手里的票就是不涨,甚至还跌?那天晚上我喝了半瓶红酒,坐在阳台上吹了很久冷风,脑子里全是那个回测曲线,光滑、优美、诱人,像个精心修图的网红脸,根本经不起实盘的高清镜头。
---后来我才明白,回测里的“买入价”是开盘价或收盘价,实盘里的“买入价”往往是追高后的价格。回测里没有滑点,实盘里流动性差的小盘股,一手买进去就得贴五个点才能成交。回测里持仓是机械执行,实盘里看着账户红绿跳动,早就改了止损、加了仓、甚至恐慌清仓。哎,这不就是典型的“知行分离”吗?代码里写得清清楚楚“止损不动”,手一抖就把止损单撤了,事后还能给自己找一堆理由:“当时觉得支撑位很强”“那个量能看着不像跌破”。
---这不就是程序员最容易犯的“过拟合”吗?参数调得再精致,历史数据拟合得再完美,只要实盘环境变了,市场风格切换、流动性枯竭、量化资金抢跑,模型就失效了。我以前写代码做压测,明明单元测试全通过,上线却炸了,原因永远是“生产环境比测试环境复杂”。交易一样,回测是测试环境,实盘才是生产环境。好家伙,这道理我在代码里懂得透透的,到交易这儿怎么就绕不进去了?
---讲真,我那时候最大的问题不是模型不好,是我不敢信模型。回测说买,我看一眼K线觉得“位置太高了”就不买;回测说卖,我看一眼研报觉得“业绩还可以”就不卖。人的主观干预,把一个有正期望的系统硬生生改成了负期望。这就像我写自动化部署脚本,跑通了非要手动去改几行配置,结果改挂了生产库。那天半夜三点被叫起来回滚数据库,我看着报警短信发抖,跟看着账户回撤18%一模一样,都是自己手贱惹的祸。
---更要命的是,RPS选股本身就是个“事后诸葛亮”的指标。它告诉你过去一段时间谁涨得最好,不告诉你接下来谁会涨。回测里之所以好看,是因为幸存者偏差,那些回测期间已经死掉、退市了、ST了的票,根本不在你的回测池子里。实盘里,你面对的是包含所有未来不确定性的全集合。这点我在写推荐系统的时候踩过坑:线下AUC 0。92,上线点击率反而下降了,原因就是训练集里没有“用户没点过”的负样本,模型学到的全是“已知会被点击的东西”,一遇到新用户、新物品就瞎了。
---我有个做量化的朋友,他们团队跑RPS策略,服务器托管在交易所机房,光纤直连,毫秒级下单。他们不用看K线,不用纠结买不买,信号一来自动执行。我呢?坐在家里,看着Level-2分时图犹豫要不要追那一笔。这不是同一个游戏,根本没法比。上次去他公司参观,看他们监控大屏上密密麻麻的订单流,我突然意识到:我的“主观交易”在人家眼里,连玩具都算不上,顶多是个延迟几秒的、带情绪的、会犯困的、会上厕所的、会因为老婆喊吃饭而错过信号的执行终端罢了。
---那怎么办?我也没放弃RPS,只是换了用法。现在我只用RPS做“漏斗入口”:周线RPS>80、日线RPS>70、换手率在5%-15%之间、流通市值大于50亿,筛出来大概二十几只票。然后完全不看RPS了,转而用缠论结构去找买点,日线级别中枢震荡完毕向上突破、或周线级别一类买点回踩确立。RPS只负责缩小观察池,缠论负责定入场。这个思路转变,花了我大半年时间,中间反复被打脸、反复怀疑人生,才慢慢磨合出来的。
---持仓管理上,我也不再搞什么“RPS排名下降就卖”。缠论结构破坏了就卖,止损位在买点下方的最近一笔低点,不跟RPS挂钩。仓位采用三层结构:底仓30%不动,波段仓40%按结构高抛低吸,机动仓30%留给极端行情的补仓或防守。这套SOP执行下来,虽然没有回测里那么好看,但至少能让我在震荡市里不被切碎,在单边市里能拿住主升浪。说白了,就是把“预测”换成了“应对”,把“优化”换成了“执行”。
---说到这儿,我想起一个细节。2021年那波碳中和行情,我的RPS系统在回测里完美捕捉了电力设备、新能源的主升浪。实盘呢?我因为“觉得估值太高了”,在电力设备板块RPS从60涨到85的过程中,硬是一只没买。后来板块翻倍,我眼睁睁看着。这就像我看着数据库连接池耗尽报警,明知道要扩容,却非要等“再观察一下”,结果数据库直接挂了。那段时间我天天失眠,躺在床上脑子里全是绿色的K线,哦不对,A股涨是红的,我老把代码里的红=报错、绿=通过的习惯带过来,搞得自己心里直犯嘀咕。
---还有一个更扎心的。去年那波AI行情,RPS选出了不少妖股,我按缠论买点进去了,结果买完就跌,止损出局,再涨,再买,再止损。来回切了三次,账户亏了5个点,那个票却从我第一次买入价涨了80%。我复盘发现,问题不在RPS,也不在缠论,在我的“节奏”,我总想抓完美的买点,结果在震荡区间里反复试错。这就像写代码时非要把变量名想得完美无缺,结果主逻辑还没跑通,重构把项目搞崩了。后来我改成:买点确立了,分三笔买,第一笔30%试错,第二笔40%确认,第三笔30%加仓。不求最低价,求执行到位。这一改,心态稳多了。
---现在的我,周末复盘时不再盯着RPS排名发呆。我打开图表,一个个看缠论结构:哪只在构建中枢?哪只中枢突破了?哪只回踩确立了买点?RPS只是个粗筛工具,像CI/CD里的单元测试,跑不过去肯定有问题,跑过去了也不代表上线就没bug。真正决定能不能上线的,是集成测试、压测、灰度发布、监控报警这一整套工程体系。交易里,缠论结构是集成测试,仓位管理是灰度发布,止损执行是监控报警,心态控制是熔断机制。缺哪一环,生产环境都得炸。
---对了,还有个细节我得说说。很多读者私信问我:“葱头老师,RPS多少算高?买点怎么画准?”我一般不直接回答,因为这问题本身就带着“想要标准答案”的心态。RPS 80算高吗?震荡市里80可能是顶,趋势里80才刚起步。买点怎么画准?缠师书里定义写得清清楚楚,但实盘里那笔是不是笔、那线段是不是破了,看着图吵得最凶的往往就是这帮“想要标准答案”的人。我自己画买点,从来不求“准”,只求“认”,认得清这笔、这线段、这中枢在当下是什么状态,后面怎么演化我有预案,这就够了。这跟写代码一样,别追求完美架构,追求能跑、能改、能查错。
---再多唠叨两句。前阵子有个做Java后端的读者加我微信,跟我说他也写了套选股系统,回测年化60%,问我为什么实盘亏钱。我看了他的代码,参数里硬编码了“买入价=开盘价”“卖出价=收盘价”,止损逻辑里没有滑点、没有手续费、没有流动性约束。我说兄弟,这不就是个计算器吗?他愣住了,半天说:“那我加上这些,回测就不好看了。”我说那就对了,不好看才是真的。回测好看、实盘惨淡,那是自欺欺人;回测难看、实盘能跑,那才是活下来的系统。他后来真的把滑点、手续费、流动性全加进去重跑,年化掉到18%,但实盘跑了半年稳定盈利。他发微信感谢我,说:“葱头老师,我终于明白你那句‘回测是测试环境,实盘才是生产环境’什么意思了。”
---评论区见。
声明:本文不构成任何投资建议。市场有风险,交易需谨慎。
感谢你读到最后,记得帮我点个”赞”+”推荐”,并”分享”给更多人吧!
@copyright by linjc
一个20+年的“懒人程序员”,学习缠论10多年,把复杂的交易逻辑自动化,看盘复盘省心又高效。
武夷山自有茶厂,需要高性价比的优质岩茶,欢迎联系我。


