为什么RPS筛选出的强势股,实盘买完总在短期顶部?
Hello,
我是葱头,
一个写了26年代码的程序员。
现在在用缠论和RPS做主观交易。
今天我们来聊聊RPS筛选的幸存者偏差
因调研工具暂时不可用,基于真实经验撰写
---
2023年下半年,我花了两个周末写了个RPS选股脚本。逻辑很简单:全市场5000只股票,按RPS120从高到低排,取前50,再过一遍流动性和换手率,输出一张“强势股候选名单”。
那时候Python环境刚配好,pandas、numpy、akshare全装上了。脚本跑一遍大概三分钟,输出一个CSV,里面躺着代码、名称、RPS值、换手率、流通市值。我还加了个微信推送,每天收盘后自动发到手机上。
回测很漂亮。近三年年化38%,最大回撤12%,夏普比1.6。那几天我盯着回测曲线,心里想:这不就是提款机吗?代码跑完,名单里躺着宁德时代、比亚迪、中际旭创、工业富联——全是当时妥妥的龙头。
我还记得当时特意截了图发给几个做量化的朋友,配文:“老哥们,这回测怎么样?”回复基本都是:“数据挖掘偏差太重,实盘别信。”我当时觉得他们酸,毕竟代码都开源了,逻辑清清楚楚,哪里有偏差?
实盘第一笔,买了名单里排名第3的某半导体龙头。买完第二天开盘就绿,第三天继续绿,第五天我割肉离场,亏了4.7%。
紧接着第二笔、第三笔、第四笔……一个月下来,名单前20我大概买了12只,赢3只,输9只,账户缩水8%。
回测曲线还是那个回测曲线,代码没动过一行。问题是出在哪?
---
后来复盘才明白,回测里的“前50”,和实盘里的“前50”,根本不是同一批票。
回测是用今天的眼光,看三年前每一天的“前50”。但三年前的那一天,谁能知道哪些票会活到今天?退市的、ST的、暴雷暴跌90%再也不涨的,早就从名单里消失了。它们死得太快,连进“前50”的资格都没留住,更别说留在数据库里给你回测了。
这就是幸存者偏差。数据库里存活下来的,全是“赢家”。输家早就被清洗出局,连尸体都不留一个。
程序员最容易犯这个错。我们习惯把数据当真理,把回测当承诺。可市场不跑回测,市场只跑当下。
我以前写后端服务,单元测试全绿、压测QPS跑满、上线前checklist全勾选,上线后基本不会挂。可交易这行,回测全绿、参数最优、逻辑自洽,实盘照样亏钱。因为市场不是确定性系统,它是个博弈场,对手在学习,规则在变,数据在撒谎。
---
RPS的本质是排序。排序只能告诉你“相对谁强”,不能告诉你“绝对值多少”,更不能告诉你“能不能活下来”。
一只股票RPS120排在第5名,说明它在过去120天里,涨幅打败了全市场95%的票。但这5%,里面混着两种截然不同的东西:一种是真龙头,趋势确立、资金护盘、回调有支撑;另一种是“妖股”、暴雷前夜的“最后一波”、或者纯粹被资金推上去等着出货的筹码。
回测看不出这区别。回测只看收盘价,不看盘口、不看分时、不看大单买卖、不看资金意图。
我那个月亏的9只票,事后翻分时图,全是典型的“高开低走、尾盘拉升、换手率异常放大、主力资金净流出”。回测里它们是“强势股”,盘口里它们是“出货盘”。
有个细节我印象特别深:其中一只票,早盘竞价涨5%,开盘半小时换手率就破10%,主力净流出超2亿。我当时还在想“哇换手充分,洗盘结束了”,结果尾盘砸单走人。第二天直接跌停。回测里这根K线是一根漂亮的阳线,实盘里是明晃晃的陷阱。
还有一只,盘中突然放量冲击涨停,封单只有几百万,我以为是主力拉升,跟着追了进去。结果封单一撤,股价像断了线的风筝,收盘跌了6%。事后查龙虎榜,游资买一卖一对倒,纯粹做T。回测里这也是一根大阳线,实盘里是割韭菜的镰刀。
---
幸存者偏差还有一层更隐蔽的:指数化时代,RPS排序本身在变质。
现在全市场ETF规模破3万亿,北向资金、量化私募、公募FOF,大资金都在买指数、买龙头、买“确定性”。买得越多,龙头涨得越猛,RPS排得越靠前,吸引更多资金来买。这就是个正反馈循环。
但正反馈总有尽头。当所有人都用同样的RPS筛选器,买同样的“前50”,谁来接盘?
2021年年初,新能源板块全线RPS飙升。我脚本跑出来的“前50”,里面有20只都是新能源。那时候买,觉得自己抓住了时代红利。结果那是相对强弱的顶,也是绝对价格的顶。
RPS不懂估值,不懂基本面,更不懂“拥挤度”。它只懂相对涨幅。当全市场都在相对强弱里裸奔,RPS最高的那批,往往就是拥挤度最高的那批。
这让我想起2015年股灾前,券商股RPS全线飙高,大家都觉得“牛市旗手不可能跌”。结果旗手倒下最快。历史不简单重复,但韵脚押得真准。
---
那怎么破?我也没标准答案,只能说说我后来怎么改的。
第一,不再信“全市场前50”。改成“板块内前3+板块RPS排名前10”。把大池子拆成小池子,在细分赛道里找相对强弱,而不是在全市场里找。新能源里找新能源龙头,半导体里找半导体龙头,跨板块比RPS毫无意义——赛道逻辑不同,涨幅天花板不同,硬比出来的全是假象。
第二,引入“拥挤度过滤”。北向持仓占流通盘比例、融资余额占比、量化持仓估算——这些指标能粗略判断一只票有多拥挤。RPS前5但北向占流通盘超30%、融资余额创历史新高的,直接踢出名单。我不想做最后一棒接盘侠。
第三,RPS只做“漏斗入口”,不做“决策出口”。名单出来后,必须配合缠论结构确认:日线级别中枢震荡完成、周线笔不破、买点在结构位附近。RPS选票,缠论定点,两套系统各司其职,别让RPS越俎代庖。
第四,也是最重要的——接受“漏掉”比“买错”便宜得多。回测里不买宁德时代是“漏掉”,实盘买在顶上是“买错”。前者少赚点,后者亏本金。现在名单里前3我都不一定全买,得等结构给信号。信号不来,现金躺着不香吗?
还有一点,我现在每周末都要人工复盘一遍名单。脚本跑出来只是初筛,人工要看:这只票基本面变没变?行业逻辑还在不在?筹码结构健不健康?代码帮我省了90%的筛选工作,但最后10%的判断,必须是人来做。
我也试过把这套流程再自动化——用大模型读财报、读研报、算估值分位点。结果发现,模型读财报比我快,但它不懂“变没变”这个判断。同样的营收增速30%,龙头是确定性兑现,跟风的是透支预期。这层区别,数据里没有,只有盯了盘、读了报、踩过坑的人才能体会。
说到底,工具是死的,市场是活的。RPS、缠论、凯利公式、蒙特卡洛模拟,全是地图。地图再精准,也替不了你走路。该踩的坑、该交的学费、该熬的夜,一样不少。
---
讲真,写代码筛选股票,比盯盘舒服多了。代码不累、不怕错、不需要克服人性。但市场偏偏不按代码跑。
幸存者偏差不只是数据库里的事,它在每一个“看起来很美”的回测曲线背后,在每一个“筛选器跑出来很漂亮”的名单里,在每一个“觉得自己找到了规律”的深夜里。
RPS是把好刀,但刀不懂解剖结构。拿着RPS满屏跑强势股,不配合结构、不防拥挤、不敬畏幸存者偏差,那是拿手术刀切西瓜。看着利索,切到手了才知道疼。
你有没有遇到过,回测完美、实盘惨烈的筛选器?评论区见。
声明:本文不构成任何投资建议。市场有风险,交易需谨慎。
感谢你读到最后,记得帮我点个"赞"+"推荐",并"分享"给更多人吧!
@copyright by linjc
一个20+年的“懒人程序员”,学习缠论10多年,把复杂的交易逻辑自动化,看盘复盘省心又高效。
武夷山自有茶厂,需要高性价比的优质岩茶,欢迎联系我。


