行业资讯

加入亿拓客·流量大师 撬动财富之门!!!

申万欧奈尔选股 :一篇 8 年前的研报,在它没见过的行情里还剩多少 alpha

wang 2026-10-12 行业资讯
申万欧奈尔选股 :一篇 8 年前的研报,在它没见过的行情里还剩多少 alpha

声明:本内容为个人业余研究,所有标的代码仅做为示例,回测收益不代表未来,不做为投资建议。

先说这套模型的定义。CANSLIM 是美国投资家威廉·欧奈尔在《笑傲股市(How to Make Money in Stocks)》里总结的选股法则,七个字母各代表一类尚未发动大涨势的潜在优质股特征。申万研报开篇引了一个有意思的背书:美国个人投资者协会用五年时间(1998 到 2002)比较过包括巴菲特系统在内的各类选股方法,结论是无论牛市熊市,CANSLIM 都是最稳定、表现最好的系统之一——它的底层的逻辑是基本面与技术面的融合,C、A、N 三个字母刻画公司基本面,S、L、I、M 四个字母刻画技术面强弱。逐个字母看:

C = Current quarterly earnings per share,季度盈利同比增长。欧奈尔的建议是不要碰最近一季每股收益同比增长不到 20% 的股票,许多成功投资人以 25% 到 30% 作为最低标准。

A = Annual earnings increases,年度盈利同比增长。大牛股不止一个季度强,欧奈尔要求过去三年每股收益逐年增长。

N = New products, New management, New highs,新产品、新管理层、股价新高。公司呈现新气象往往是股价大涨的前兆,伴随巨量成交创出股价新高的股票尤其值得关注。

S = Supply and demand,市场供需。单日成交量是最佳观察指标:突破底部形态时成交量应较正常水平至少放大 50%,量能剧增说明还有上涨空间。

L = Leader or laggard,是否领涨股。用相对价格强度识别领头羊,不买 RPS 低于 70% 的股票,只找 80% 以前的。

I = Institutional sponsorship,机构认同度。一只好票不需要大量机构眷顾,但至少应有十家机构持有,或最近几季机构数量明显增多。

M = Market direction,市场走向。顺大盘趋势而为,熊市里再好的形态也要打折。

研报把这套法则本土化:基底形态(带柄茶杯、双重底)刻画 N 与 S,RPS 对应 L,营收高增长对应 C 与 A,机构认同对应 I,年线择时对应 M,另加排除市值最小 20% 的股票。这篇记录把它复现到 2020 到 2026 的全过程。复现窗口与研报窗口零重叠,所以这是一次真样本外检验——研报的因子在它从没见过的行情里,还剩多少 alpha。答案分两段:忠实口径年化只剩 3.64%,因子方向成立但成绩大幅缩水;三层有机制解释的改造把它抬回 29.21%,差 0.79 个点没够到 30% 的目标线,停手。

忠实基线:先跑通,再说话

复现的第一原则是忠实:研报五要素里,机构持股增长率本地无数据(研报自身测算其共振单调性也最弱),剔除后其余落地为基底形态 + RPS + 营收增长 + 市值排除,择时用 300 日年线。RPS 是相对强度百分比:个股区间涨幅在全市场的分位排名,RPS 90 意味着涨幅跑赢 90% 的股票。数据盘点了 5784 只股票 2019 年起的日线与月线、total_mv 市值、带公告日的财报营收增速(PIT,即每个时点只用当时已公告的数据,杜绝未来信息)。

跑通之前先填了两个数据坑。其一是伪月末截面:停牌股的月末可能停在上旬,直接取月末截面会错位,全池扫出 247 个伪月末——改成以沪深 300 交易日历对齐全局月末、剔除当月停牌标的才干净。其二是方向写反:研报要求营收增长位于前 1/3,首版误留了后 2/3,选中数量虚高整整 3 倍。修正后 91 期调仓、每期选中约 85 只,与研报 25 只经剔除机构条件放宽后的量级吻合。

忠实基线的成绩(run r_1791260966297):总收益 +25.79%,年化 3.64%,最大回撤 30.60%(2021-09-15 到 2024-09-13,整轮熊市),夏普 0.283。同期沪深 300 约 2%——方向成立,跑赢了基准,但离研报的 29.64% 差了 26 个点。还有一个容易忽略的细节:85 只的宽组合累计费用高达 89,820 元,佣金在悄悄稀释收益。

实验矩阵:七级阶梯爬回 30%门口

优化不是拍脑袋,24 项实验排成矩阵,主链七级每一级都有单独结论。起步先吃一记教训:E1 只留 RPS 最高前 20 只,年化 -2.45%、回撤 -50.5%,证伪——RPS 最高的票是最拥挤的动量票,崩盘年伤得最重,分散的宽度本身就是保护。往后逐级做加法:E3 年线下空仓 5.20%;E6b 只用日频门控不加止损只有 3.32%,是个有价值的反证——2020 与 2025 年 4 月这类 V 型行情里,门控反复在低点止损,说明门控必须与止损参数搭配设计;E6 加 8% 止损到 8.64%;E11 月频空仓加集中 Top20 到 11.65%;E14 加净利增速过滤到 13.82%;E16 集齐年线空仓、日频门控、净利过滤、15% 宽止损与 Top20,年化 26.19%(raw 价口径)。反向的证伪同样清楚:换中证 500 做择时锚,2024 年该关门时没关上;给池子本身加动量门,2021 年从 +26% 砍到 +5.3%;让利润奔跑(不设止盈)29.22% 对 29.21%,无效。

矩阵推进中还修了两个会污染结论的工程问题。一是 preflight 联网卡死:曾入选但后来退市的股票触发联网补数据,限流重试直接卡死流程——解法是 --check-only 带缺口继续回测,缺口只上报不阻断,同时保留全量 universe 防止幸存者偏差(只测活着的股票,收益自然虚高)。二是 E5 竞态:多个实验并行时共享的信号与择时文件被互相覆盖,变体之间串味——改成每个变体独立文件后才敢相信各 run 的数字。

E16 的三层机制与代码

E16 的三层改造每一层都有机制解释。先说集中用的尺子:复合评分在 E8 引入,取 RPS、营收增长、净利增速三个因子的分位排名求均值,三路信号都强的票才排得上去。第一层年线空仓管防守:300 日年线下方整体空仓,2022、2023 两个损伤年直接归零防守。第二层复合评分 Top20 管集中:按复合分截前 20 只——研报口径的 85 只佣金稀释严重,集中后费用反而从 89,820 元降到 65,964 元。第三层 15% 宽止损管灾难:欧奈尔原典讲稍有损失迅速止损,但 -8% 的窄止损实测是双刃剑,2024 年割肉式换手更惨,2025 牛市还把 +41.8% 砍成 +26.3%;放宽到 -15% 才是正解——灾难封顶,同时让利润呼吸。

代码核心是日频年线门与复合评分排序(摘自 xsec_canslim.py):

# ---- 优化层: 日频年线门(收盘判定, 当日生效清仓; 重开门当月信号仍新鲜则立即重入)---- if bool(g["daily_gate"]):     gate_ratio = ...近一日站上年线的持仓占比...     if gate_ratio <= 0:         if context.account.positions:             _flatten(context)             g["_month"] = None      # 重开门后允许当月立即重入         return ...     key_val = row.score if row.score == row.score else row.rps_pct   # 复合评分优先, 缺失退化 RPS cands.sort(reverse=True)   # 降序; 同分按 code 稳定排序保证确定性 targets = {c for _, c in cands[:top_n]}

月频择时鞭长莫及是 E3 的教训:月末判定挡不住年线上方的月内崩盘。日频门改为收盘跌破当日清仓,重开门当月信号仍新鲜就立即重入,不踏空反弹;排序键复合分缺失时退化到 RPS,NaN 判断用 row.score == row.score(NaN 不等于自身的特性)保证确定性。

复权口径与平台非孤峰

一个口径问题值三个点。E16 最初按 raw 不复权价算 RPS 与基底,送转除权会让价格轨迹出现假暴跌——10 送 10 股价直接腰斩,RPS 排名与基底形态全部失真;按仓库纪律指标研究一律用后复权价重算后,入选记录从 7741 增至 8062,年化从 26.19% 变成 29.21%。两个数字都真实,口径必须随数字标注——这条纪律现在写进了流程。参数的可靠性靠敏感性扫描背书:止损 12%/15%/20% 三档年化 23.6%/26.2%/17.4%,Top15/20/30 三档 25.1%/26.2%/18.9%,v3 口径下邻域整体落在 28.26% 到 29.22%——E16 站在平台上,不是挑出来的孤峰。

移植到 PTrade 实盘引擎再验一次,移植本身也有工程量:月内残缺 bar 剔除、query_date 防未来 ST、.SS/.SZ 后缀与 money 字段等平台纪律逐项对齐,成品 397 行。官方平台回测(2025-01-01 到 2026-10-06,100 万本金):策略收益 +131.74%,基准 10.74%,年化 64.14%,最大回撤 20.72%,夏普 2.10,Alpha 0.56,Beta 1.02,盈亏比 181.07%,信息比率 2.42,平均持仓 26.85 天。曲线 2025 年稳步爬升,2026 年 6 到 8 月冲高后回落企稳,末段持仓市值约 223 万。与本地 E16 同期分年(2025 年 +105.1%、2026 年前八个月 +35.9%,复合约 +143%)量级吻合——移植没有走样。

分年成绩,和差 0.79pp 时的克制

E16 的分年成绩(v3 口径):2020 年 +43.8%、2021 年 +45.7%、2022 年 0%、2023 年 -0.1%、2024 年 -11.4%、2025 年 +105.1%、2026 年 +35.9%。结构正是三层机制的直接投影:熊市年线空仓归零防守,牛市重仓进攻,2024 年靠宽止损把灾难封顶在 -11.4%。对照忠实基线在同一熊市段 -30.60% 淹了整整三年,防守层的价值一目了然。

最终年化 29.21%,距离 30% 的目标线差 0.79 个点。够不到就是够不到:截取子窗口是只报好看的起点,放宽费率是改口径,加密网格挑极值是让过拟合上线——任何一招都能把数字凑上 30%,但凑上去的数字在实盘只会变成失望。实盘预期建议直接按下沿 25% 设定——研报复现的终点不是那个整数,是知道这套因子在样本外值多少钱。这套从 PDF 到 PTrade 策略的全链路,2026 年 10 月 6 日一天之内跑完。

从 29.64% 到 3.64% 再到 29.21%,这篇复现最想说的其实是一句话:研报的 alpha 会在时间与口径里漏掉一大半,把漏掉的部分如实测出来、把能补的部分用有机制解释的改造补回去、补不到的如实承认——这才是研报的正确打开方式。

PS: 源码下载,请移步知识星球!

星球中整理了文章中涉及到的源码,加入后即可以看到之前发的源码,三天内不满意可以退款。也会将收集到的机构研报,优秀策略源码,群友常咨询的问题整理到不同标签下,做为知识库沉淀下来。

所有策略仅用于学习和研究,不保证交易收益,不作为投资建议,风险自负,所有收益仅表示历史回测收益,不表示未来收益。大QMT和ptrade请充分使用模拟盘测试,miniQMT使用模拟账号测试。

相关文章:

小白也能做量化:零门槛QMT/Ptrade免费送

量化python代码解析:QMT回测龙头打首板和连板的策略

听了群友的建议,年化收益达到了70%,增加了动态仓位权重调整后的全球核心资产轮动策略(含python代码解析)

欢迎扫描下方二维码,备注【开通】,开通QMT或Ptrade;备注【加群】,加入量化交易交流群;备注【电子书】,赠送QMT或Ptrade入门操作指南。

免责声明:

仅做知识整理,本公众号对这些信息的准确性和完整性不作任何保证,本材料不构成任何投资意见。投资有风险,入市需谨慎。

猜你喜欢

发表评论

发表评论: