我用Python回测了一个动量策略,结果发现了一个反常识的真相
昨天晚上我抽空回测了一个最简单的动量策略:
买入过去30天涨幅最大的10只股票。本以为会是一个"稳赚不赔"的策略,结果却让我大跌眼镜。
什么是动量策略?
动量策略很简单:强者恒强,弱者恒弱。相信大家都听过这个说法。在股市里,就是买入那些涨得好的股票,卖出那些跌得多的股票。
我的策略参数:
回测周期:过去30天
选股数量:10只
调仓频率:每月一次
数据来源:A股全部股票
时间范围:2024年1月-2026年5月
听起来很简单对吧?我也以为这种傻瓜策略肯定能赚钱。
回测结果
让我先说结果,这个策略
年化收益率只有8.2%,跑赢了同期银行理财,但是跑输了沪深300指数(年化12.5%)。更让我意外的是,
最大回撤达到28%,这简直就是在坐过山车!
这跟我想象中的"稳赚"差远了。
为什么动量策略失效了?
我深入分析了一下,发现了几个问题:
1. A股的"情绪波动"太大了
国外成熟市场的动量策略有效,因为投资者相对理性。但A股完全不一样,散户占比太高,情绪化交易太严重。
举个例子:2026年3月,某个AI概念股因为一个"AI+医疗"的消息,30天暴涨了150%。按照我的策略,我应该买它。结果呢?买入后跌了40%。
这种"情绪驱动"的暴涨暴跌,让动量策略完全失效。
2. 跟风盘太多
当你按照动量策略买入某只股票时,通常已经有很多人在买了。等你想买的时候,价格已经被炒高了。
我统计了一下,在买入的10只股票中,有8只是在涨势的"中后期"才进入我的视野。也就是说,我大概率是在接盘。
3. 交易成本太高
动量策略需要频繁调仓,每次交易都要交手续费、印花税等成本。虽然看起来不高,但积少成多也很可观。
我的策略平均每个月要调仓3-4次,一年下来交易成本占总收益的15%!这还怎么赚钱?
改进后的策略
既然简单的动量策略不行,我就开始思考怎么改进。最终我找到了一个"改良版动量策略":
参数调整
回看周期:延长到60天
选股数量:减少到5只
排除ST股、*ST股
要求市值大于100亿
要求PE在0-50倍之间
风险控制
设置单只股票仓位上限:15%
设置最大回撤:10%,触发就全部卖出
设置止损线:-8%
信号过滤
要求成交量较前30日平均放大50%以上
要求机构持股比例大于20%
排除当月涨幅超过30%的股票
改进后的结果
用这个改良策略,我重新做了回测:
年化收益率:15.6%
最大回撤:18%
夏普比率:0.85
虽然还是很一般,但比之前好多了。
策略的核心问题
经过这次实验,我发现了一个反常识的真相:
在A股,趋势不是你的朋友,而是你的敌人
因为A股的"趋势"往往是情绪驱动的,而不是基本面驱动的。当所有人都看好某个股票时,通常就是顶部的信号。
我观察了一下那些表现好的股票,发现它们有一个共同点:
基本面好+估值合理+机构重仓+有业绩支撑。
这让我想到了巴菲特的名言:
别人贪婪时我恐惧,别人恐惧时我贪婪
真正有效的策略,不是追涨杀跌,而是找到那些被低估的优质公司,然后长期持有。
我的实战经验
基于这个教训,我现在采用的投资策略是:
1.
基本面筛选:ROE>15%,营收增长>20%,负债率<50%
2.
估值判断:PE在历史估值的20%-80%分位数之间
3.
技术确认:股价在200日均线上方,成交量放大
4.
分批建仓:分3-4次买入,降低风险
5.
长期持有:预期持有1年以上,不受短期波动影响
这个策略虽然赚不到"快钱",但胜在稳定。今年以来收益率25%,最大回撤只有8%,对我来说已经很不错了。
策略没有绝对的好坏,只有适合不适合。真正的好策略,应该让你晚上睡得安稳。
我是小Q,一个用代码武装自己的量化交易员 💤