量化交易入门必学之——动量策略,追涨杀跌也能赚钱?

张开发
2026/4/5 5:23:56 15 分钟阅读

分享文章

量化交易入门必学之——动量策略,追涨杀跌也能赚钱?
本文目录一、什么是动量策略说白了就是科学的追涨杀跌二、动量vs均值回归一个追涨一个抄底到底区别在哪三、动量策略适合什么样的行情它真的长期有效吗四、动量策略选股两个原则帮你避开大部分坑原则一只选长期向上的标的排除爆雷风险原则二选相关性尽可能低的资产避免行情轮动打脸五、20日动量因子Python代码实战写在最后动量策略适合普通投资者吗本文观点仅供参考不构成任何投资建议。投资有风险入市需谨慎。很多人听到量化交易四个字就觉得头大什么阿尔法、贝塔、因子模型一堆专业术语给你整懵了。其实量化没那么玄乎很多经典策略逻辑简单得很今天咱们就来讲讲最广为人知也最有争议的——动量策略。一、什么是动量策略说白了就是科学的追涨杀跌你肯定听过追涨杀跌这个词在散户圈子里这基本就是骂人的话形容那些乱操作的韭菜。但有意思的是动量策略本质上就是追涨杀跌可它却在全球市场被验证了200多年至今还是很多大型量化基金的核心策略。动量策略的逻辑太好懂了过去一段时间涨得好的资产未来一段时间大概率还会继续涨过去跌得惨的未来大概率还会继续跌。就这么简单对就这么简单。举个生活中的例子你马上就懂假设你去商圈吃饭两家店挨在一起一家排起长队一家空无一人。你大概率会选择排队那家对不对你的逻辑就是这么多人排队说明东西好吃好吃的店接下来还会好吃继续排队。这就是生活中的动量效应。放到股市里也一样一只股票从10块涨到15块说明肯定有什么利好推动着它——公司业绩变好或者行业风口来了。这个利好不会第二天就消失价格涨势也不会一天就结束。所以你买入已经涨起来的股票期待它继续涨这就是动量策略做多。反过来一只股票从10块跌到7块说明公司肯定出问题了你卖出它甚至做空它这就是动量策略做空。这个现象不是谁拍脑袋编出来的是被无数学术研究实打实验证过的。1993年两位学者Jegadeesh和Titman发了篇开创性论文他们发现买入过去3-12个月表现最好的股票卖空表现最差的扣除交易成本后每年还能赚12%的超额收益。后来这个发现在美国、欧洲、亚洲甚至商品、外汇、加密货币市场都被反复验证过时间跨度能追溯到1800年代——200多年了动量效应从来没消失过。那为什么动量效应一直存在主要因为人性。做投资的人都有几个根深蒂固的毛病赚钱了就早早落袋为安把涨得好的股票卖了这反而减缓了上涨速度让利好不会一步到位亏钱了就死扛舍不得割肉跌了也不卖拖慢了下跌的速度看到别人赚钱就忍不住跟进越涨越买进一步把价格推上去好消息出来的时候大家总是反应慢半拍不会一步涨到合理价位而是慢慢往上爬这些人性弱点写在我们基因里不会因为大家知道动量效应就消失。这就是为什么动量策略能长期有效。当然动量策略也不是稳赚不赔。它最大的风险叫动量崩溃最典型的例子就是2009年金融危机之后之前跌得最惨的垃圾股突然暴力反弹之前抗跌的好股票反而涨不动这时候做多赢股做空输股的动量策略就两面挨打一个月能亏掉40%。这种事一般发生在市场从极端暴跌突然V型反转的时候这也是我们后面要说的——动量策略有它适合的行情。二、动量vs均值回归一个追涨一个抄底到底区别在哪讲动量策略就不得不提它的对手盘——均值回归策略很多人搞不清楚这俩到底啥区别既然都说到这了我们就一起来搞清楚。均值回归的逻辑刚好反过来价格涨多了会跌回来跌多了会涨回去终究会回到它该有的正常水平。比如你去买奶茶一家店今天做活动排队特别长活动结束人就少了这就是均值回归一只股票因为一个无关紧要的利空暴跌20%但公司本身没毛病之后价格会涨回来这就是均值回归的应用。维度动量策略均值回归策略核心逻辑强者恒强弱者恒弱物极必反盛极而衰对应操作追涨杀跌高抛低吸适合时间短期-中期1-12个月超短期、长期3-5年以上赚钱场景趋势明确的单边市区间震荡的盘整市最大风险趋势突然反转V型底基本面恶化再也回不去看到没它俩其实不是完全对立的而是在不同时间尺度上同时存在。有个总结特别到位超短期日内到几天微观结构影响一般是均值反转短期到中期1-12个月动量效应最明显长期3-5年以上又变成均值回归还是举个栗子茅台从2015年开始走牛每个阶段都不一样。2016-2018年业绩持续超预期股价一路涨这时候用动量策略买入持有能赚很多钱到了2019-2020年估值被炒得太高远高于合理水平之后两年持续下跌这就是长期均值回归如果在短期震荡的时候比如2023年茅台在1600-1800区间来回晃这时候高抛低吸做均值回归就比动量赚钱。所以说没有绝对的谁对谁错不要想着就靠一个策略全场通吃看你在什么时间尺度什么行情下用它。三、动量策略适合什么样的行情它真的长期有效吗很多人说动量策略是长期有效这句话没错但它不是在所有行情都好用它有自己舒服的周期。还是那句话没有圣杯没有能够全场通吃的策略。先给结论动量策略最喜欢趋势明确、波动率低的单边行情最讨厌来回震荡、V型反转的猴市。前面我们说过动量策略赚的是趋势的钱它天生不喜欢波动。价格来回晃的时候你追进去涨两天就跌杀跌完又反弹反复打脸几次止损下来钱就亏没了。只有当趋势走出来不管上涨还是下跌它才能赚到钱。动量策略不管在哪个市场都是有效的我们就拿大家熟悉的美股和不太熟悉的B圈举个栗子给大家看看。股市例子美股十年慢牛美股从2009年到2020年走了十几年慢牛整体趋势向上波动率不高这简直是动量策略的天堂。为什么因为慢牛里龙头公司就是不断创新高苹果、微软、英伟达你拿着动量策略哪个创新高买哪个一路持有就能吃到大部分涨幅。反观那些天天想着抄顶摸底做均值回归的早早就卖飞了赚不到大钱。但像最近这段行情自从特不靠谱老头子在中东挑事地缘冲突加剧行情随着局势剧烈变化市场来回震荡一会儿涨一会儿跌这时候动量策略就很难受追涨就被套杀跌就反弹效果远不如均值回归。B圈例子2021年BTC牛市币圈的趋势性比股市强多了2021年BTC从一万美元涨到六万多一路上涨不回头这时候动量策略赚得盆满钵满。你在涨到两万、三万的时候追进去它还能继续涨每次创新高都加仓最后能赚好几倍。但到了年底BTC从六万多跌到三万然后又从三万涨到四万来回震荡这时候动量策略就惨了跌的时候追空刚空完就反弹涨的时候追多刚多完就跌几个来回下来本金都亏没了。那动量策略真的长期有效吗我给你看数据从1800年代到现在不管哪个市场动量策略长期下来都是正收益它确实是金融市场上最稳健的异象之一。但它不是每年都赚钱它往往是亏很多次小钱然后抓住一次大趋势赚一波大的把之前亏的都赚回来还能盈利。就像开赌场大部分赌客都是小输偶尔几个大赢整体长期下来还是赚的。动量策略也是这个道理你得严格执行信号不能因为几次连续亏损就放弃否则你就错过那个大趋势了所以关键还是得拿的住你必须相信你的策略。你看每个策略都有它的高潮也有它的低谷。我非常喜欢一句话不在巅峰慕名而来不在低谷转身而去。你没有勇气承担30%的回撤就没有资格享受300%的盈利。四、动量策略选股两个原则帮你避开大部分坑很多人用动量策略效果不好不是因为动量失效了是选股选错了。做动量选股记住两个原则就够了原则一只选长期向上的标的排除爆雷风险动量策略是顺趋势你选的标的本身得有长期向上的动力不然就是踩雷。什么意思如果一家公司基本面越来越差行业都没了比如当年的胶片巨头柯达它一路下跌不是动量是真的要死了你这时候去做空当然能赚钱但你如果以为跌多了会反弹去抄底反过来做动量那肯定血本无归。所以选股第一步先把那些明显有爆雷风险的去掉连续亏损的ST股不要行业被技术迭代淘汰的不要财务造假嫌疑的不要基本面已经明显恶化的不要我们做动量是赚趋势延续的钱不是赌垃圾股反转也不是赌问题公司起死回生。把时间留给那些本身就在不断成长的公司成功率高得多。原则二选相关性尽可能低的资产避免行情轮动打脸动量策略一般都有一个选股池要么是动态的要么是静态的。关于这个选股池怎么选其实是很有讲究的并非随便乱选。比如我现在在模拟交易系统中正在跑的两个ETF动量策略就是一个小池一个大池。很多人一看池里有黄金、纳指就说这个策略肯定是过拟合了故意选这两个近几年表现好的大类资产当然赚钱了但以后你还能保证这俩还能这么赚钱吗确实谁都不敢保证以后的行情会怎么样。但是我想说的是为啥经常ETF类的动量策略会选它们俩其实并不是因为它们最近几年涨得多最主要的原因是因为它们的价格相关性很低。下面这张图是我拉了几个常见指数类动量标的的十年价格数据做了一个相关性矩阵大家可以看看它们的相关性是不是很低。除了黄金和白银的相关性达到65%左右其他基本都在30%以下相关性是比较低的。为啥动量组合里面的标的相关性要很低这个点很多人不知道但非常重要。所以这里就涉及到一个做动量组合的原则就是尽量选相关性低的不同资产别都窝在一个赛道里。为什么还是举个简单栗子你的持仓全是AI股哪怕都是动量排名靠前的它们同涨同跌一旦AI板块回调所有股票一起跌你的组合回撤会非常大。但如果你 AI、消费、医药、能源各配一点它们之间相关性低这个跌那个可能涨整体回撤就能小很多心态也好很多。举个极端例子假设你选了两个完全负相关的资产一个涨一个必然跌。动量策略会做多涨的那个做空跌的那个看起来是对冲但实际上它俩的趋势其实是同一个因素驱动的相当于你只压了一个方向根本没分散风险。所以记住相关性越低分散效果越好组合净值曲线越平稳你拿得住才能赚到长期的钱。五、20日动量因子Python代码实战讲了这么多理论咱们来点真家伙——动量因子到底怎么算我给你写一个最简单的20日动量选股例子代码你可以直接拿去用。20日动量的逻辑特别简单计算一只股票过去20天的涨跌幅这个涨跌幅就是它的动量因子。然后把所有股票按动量因子排序选涨得最多的前N只买入就是最简单的动量选股策略。我们用pandas来实现假设你已经有了所有股票的收盘价数据代码如下importpandasaspdimportnumpyasnpdefcalculate_20d_momentum(price_df:pd.DataFrame)-pd.DataFrame: 计算20日动量因子 参数: price_df: 收盘价DataFrame每行是一个日期每列是一只股票 返回: momentum_df: 每只股票的20日动量值动量 (当前收盘价 / 20日前收盘价) - 1 # 计算20日涨跌幅就是动量因子momentum_dfprice_df/price_df.shift(20)-1returnmomentum_dfdefselect_top_momentum_stocks(momentum_df:pd.DataFrame,top_n:int10)-list: 筛选动量最大的前N只股票 参数: momentum_df: 计算好的动量因子DataFrame top_n: 选多少只股票默认10只 返回: 选中的股票代码列表 # 取最新一天的动量值进行排序latest_momentummomentum_df.iloc[-1].dropna()# 从大到小排序取前top_n只top_stockslatest_momentum.sort_values(ascendingFalse).head(top_n).index.tolist()returntop_stocks# ------------------- 使用示例 -------------------if__name____main__:# 假设你已经通过Tushare、AkShare等接口获取了收盘价数据# 这里模拟一个价格数据实际使用时替换成你自己的数据datespd.date_range(start2025-01-01,end2025-03-31,freqB)stocks[StockA,StockB,StockC,StockD,StockE,StockF,StockG,StockH,StockI,StockJ]# 随机生成模拟价格实际使用替换成真实收盘价np.random.seed(42)price_datanp.cumprod(1np.random.normal(0,0.02,size(len(dates),len(stocks))),axis0)price_dfpd.DataFrame(price_data,indexdates,columnsstocks)# 计算20日动量momentumcalculate_20d_momentum(price_df)# 选动量最大的4只股票selectedselect_top_momentum_stocks(momentum,top_n4)print(最新交易日20日动量最大的4只股票:)print(selected)print(\n最新动量值:)print(momentum.iloc[-1][selected])代码非常简单核心逻辑就是一句话动量 最新价 / 20天前的价格 - 1就是过去20天的涨跌幅。涨得越多动量越大我们就买它。当然这只是最基础的版本实盘你还要加这些东西去掉停牌、成交量太低的股票保证能买进去设定再平衡周期比如每个月换一次仓重新计算选股加上止损止盈控制单次亏损如果要更平滑可以用5日、10日、20日动量结合或者用换手率加权但核心逻辑就是这么简单不信你可以找历史数据回测一下就会发现这个最简单的策略长期下来收益并不差。写在最后动量策略适合普通投资者吗看完这篇你可能会问我一个散户适合做动量策略吗我的答案是适合但你得能接受它的缺点。动量策略的优点是逻辑简单容易执行只要你严格按信号操作在有趋势的行情里赚得很爽缺点就是震荡行情会连续止损心态不好的人扛不住很容易在连续亏损之后放弃结果错过后面的大趋势。说白了动量策略赚的就是亏小钱赚大钱的钱你得接受很多次小亏才能等到那一次大赚。对散户来说最难的不是选股不是计算是严格执行信号管住手不瞎操作。

更多文章