今天拿到一个聚宽上的策略源码(原策略名不雅致,想知道的请看图),回测7年年化54%,最大回撤不到29%,夏普2.27,胜率66.6%。
乍一看,底子不错呀,这特么是印钞机啊!
但当我一行行读完代码,后背有点发凉——这策略的“骚操作”背后,藏着一个绝大多数人注意不到的“坑”。
今天咱们就把它扒干净,看看这到底是神策,还是包装精美的韭菜收割机。
🎯 核心结论
一句话毒舌评价:
这是一个典型的“动量+行业轮动+高ROE微盘股”复合策略,回测漂亮得像假的一样,但在实盘中,风险在震荡市,或在流动性危机里。
【关键指标卡片】
| 核心指标 | 数据表现 | 老司机点评 |
|---|---|---|
| 年化收益 | 54.29% | 🚨看着极爽,但实盘打个6折就不错了 |
| 最大回撤 | 28.96% | 📉对于这个收益率来说,回撤控制得其实相当好 |
| 夏普比率 | 2.271 | 🏆绝对的顶级水平,资金曲线极其平滑 |
| 胜率 | 66.6% | 🎲相当高,每交易3次能赚2次 |
| 策略类型 | 风格轮动+小微盘 | ⚔️吃尽了过去几年小盘股的红利 |
其他指标:
🧐 策略逻辑大白话
很多新手看这几百行代码会晕,我给你贴一段最核心的、也是这个策略最“骚”的灵魂代码:
JSG = {'银行I', '有色金属I', '钢铁I', '煤炭I'}
# ... (中间省略) ...
if ('银行I' in I_replaced or '煤炭I' in I_replaced ...) and judge_market_env(context) == '存量':
return[] # 直接空仓保平安!
看不懂代码没关系,如果不拽量化名词,这个策略在干嘛? 想象市场是一个大赌场,策略把所有股票分成了三拨人:
- 搅屎棍组(JSG):银行、煤炭、钢铁这种大块头防守板块。
- 小猴子组(XSZ):市值极小、但巨能赚钱(高ROE)的微盘股。
- 科技宅组(CYB):创业板。
它的买卖逻辑粗暴得惊人:
- 如果大盘没钱了(成交量萎缩),且“搅屎棍”在暴涨:说明大资金在抱团避险,市场要跌!策略二话不说,直接清仓跑路,一分钱不玩!
- 如果“小猴子”长得最快:去全市场挑10只盈利能力最强、市值最小的股票满仓干。
- 赚了怎么卖? 每周一早上9点半调仓。但如果手里的股票昨天涨停了,就死拿!直到今天下午2点发现涨停板被砸开了,才果断落袋为安。
看懂了吗?
这其实是一个**“追强弃弱”的动量策略**,只不过动量不是用在个股上,而是用在行业板块上。然后用小市值来增强收益,因为小市值长期有超额收益。
策略有很多值得学习的地方,但也要警惕不易发觉的坑。
⚠️ 深度拆解与避坑
亮点:这策略最聪明的地方在哪?
- 行业轮动逻辑清晰:用“站上20日线的个股比例”来刻画行业强度,比单纯看行业指数更灵敏,也避免了被少数龙头股绑架。
- 分组比较+动态调整:把行业分成四组,而不是在所有行业中选最强,这样做可以防止策略永远集中在某几个行业(比如永远买消费医药),增加了适应性。
- 涨停板处理:能识别涨停后炸板的情况并及时卖出,这对A股这种喜欢玩涨停板的生态来说,是个非常实用的风控细节。
致命弱点:这策略在什么行情下会死?
1. 震荡市里反复打脸
动量策略的天敌就是震荡。如果一个行业今天强明天弱,策略就会频繁换股,来回吃耳光。虽然回测里最大回撤只有28%,但那是7年的整体表现,如果单独看某一年,很可能超过40%。不信你可以拉出2016-2017年的数据跑一下,那段震荡市小市值跌成狗,这个策略也不会好过。
2. 小市值因子失效时
这个策略本质上是把小市值当“基底”的。你看,除了特定情况,它绝大多数时候都在买小市值。但小市值因子在A股已经强了很多年,未来会不会失效?会不会像美股那样,小盘股长期跑输大盘?这谁也不敢打包票。
3. 存量市场里“搅屎棍”坑人
代码里有一段很骚的“搅屎棍”逻辑:如果银行、煤炭这些大家伙强势,它会去判断市场是“存量”还是“增量”。判断依据是两市成交额均线变化和银行股表现。如果判定为存量市场,且这些大家伙太猛(比例>90%),它会直接空仓!
这逻辑本身没问题,但问题是它的存量判断靠谱吗?如果判断错了,就会踏空行情,就比如现在的行情。而且,这段代码只在“搅屎棍”组被选中的时候才执行,其他组并不会被存量逻辑限制。也就是说,如果市场是存量,但小市值组很强,它还是会冲进去——这可能会在资金面不足时导致小市值补跌。
4. 过拟合的痕迹
策略里有很多硬编码的数字:比如选股只选10只,行业组划分,财务阈值(ROA>0.15)等。这些数字很可能是在回测中调出来的最优参数,换一个时间段可能就不灵了。尤其是那个“搅屎棍组比例>90%才启动特殊模式”,90%这个阈值太绝对,可能就是为了拟合某段行情。
实盘建议:你敢直接用吗?
我的结论:不敢直接实盘,但可以阉割后小仓位测试。
如果要实盘,我会做三处修改:
- 参数平滑:把90%这种硬阈值改为动态阈值,比如用过去N天的分位数来决定何时切换模式。
- 增加风控:加入全市场估值水位线,当全市场PE过高时,降低仓位或者转投债券,避免在小市值泡沫破裂时硬扛。
- 分散更多行业:不要只押注最强的一组,可以买前两组,降低集中度风险。
另外,这个策略的换手率肯定不低(每周调仓),加上滑点和冲击成本,回测里的0.03%佣金可能hold不住。建议用更真实的滑点(比如0.1%)重新跑一遍,看看收益还剩多少。 #量化交易 #量化策略 #程序化交易
🎁 源码获取
这个策略的完整代码我已经整理好了,包含详细的注释和参数说明,方便你在聚宽或其他平台回测。
关注公众号【量化学习实战笔记】,后台回复“轮动91”即可获取。
免责声明:本账号所有量化策略和量化技术仅作技术交流和量化思路分享,不构成任何投资建议,据此操作风险自负,本人不承担任何直接或间接责任。市场有风险,入市需谨慎。