导语:假设”股票的收益率有延续原来的运动方向的趋势“。通俗来讲:今天涨了,明天大概率会接着涨,强者恒强。根据这种假设,我们可以用收益率、成交量、换手率等等作为动量因子,来构建动量策略。
Motivation
其实同一级别拆开来看,市场的状态无非就是两种,趋势和震荡。我们怎么在股票中赚钱呢?答:上涨趋势的时候死死拿着,震荡行情中高抛低吸,下跌趋势趁早收手。听上去好像不难?那为啥大家都不赚钱?
难点在于,你分不清当前是震荡还是趋势。没骗你,没说笑。真不好分,无数前人已经试过了。100%的分开是不可能的,能的话全市场的钱都是你的。比如今天突破了,你怎么知道明天是接着上涨呢?还是一棍子跌回去了?
所以,我们就换一种思路,从概率的视角下看待问题。只要发出趋势成立的信号,我就按照未来是趋势的假设来操作,跌破了,我就止损,到了合适的点位,我就止盈。那么只要上述信号带来的收益期望值大于0,我认为这些操作是会赚钱的。
动量效应(Momentum effect)呢,是捕捉趋势的一种方法论,一般又称“惯性效应”,由Jegadeesh和Titman(1993)提出。他们认为,股票的收益率有延续原来的运动方向的趋势,即过去一段时间收益率较高的股票,在未来依旧会取得高于平均的收益率。通俗说,今天涨了,明天大概率会接着涨,强者恒强嘛。
根据这种假设,我们构建的策略就叫动量策略。
动量类因子的定义
上面说了,动量效应就是认为股票强者恒强。但是具体怎么操作,怎么算“强”呢?我们认为具有某些特征的股票就是“强者”,这些特征,可以被理解成信号,或者因子,换个名字而已。
一般而言,除了最广泛应用的收益率以外,成交量、换手率等等都可以作为动量因子,随手贴一个表格,光大证券研报里抠出来的:
(参考《光大证券——多因子研究系列(五):动量类因子测试》)
在不同的市场阶段、不同风格、不同行业和不同成分股的测试中,策略表现最好的动量因子均有所变化。下面,我们以最简单的收益率动量作为因子,简单实现一下纯动量策略。
具体策略
1.设置参数,包括股票池,调仓周期holdingPeriod,收益率计算周期returnPeriod,每次持仓股票占股票池的比例ratio,并计算每次持股数量N等。
2.计算股票池中所有股票的上一周期的收益率 (这里采取简单收益率 =
(昨天的收盘价- returnPeriod 1天前的收盘价)/ returnPeriod 1天前的收盘价)
3.将股票池内(除了已持仓的)所有股票按照收益率排序,始终持有上一收益率计算周期(returnPeriod)收益率前N的股票。
4.每holdingPeriod天进行Rebalance。
测试时间范围:2006-04-01 – 2016-04-01
(有关创业板指数的回测范围:2012-01-01 – 2016-04-01)
接下来我们来看看策略结果~
1. 调整收益率回测区间和调仓周期
调仓周期和收益率回测区间较长时,动量策略表现一般,低于大盘。直觉上解释,股票一般兼具动能效应和均值回复的特性,而长周期更加偏向均值回复。
同样,调仓周期和收益率回测区间较短时,动量因子表现很差,收益率为负。一方面,是因为调仓过于频繁,交易费用很高。另一方面,短期的收益率更偏向于随机波动,其动量很难被捕捉到。
从上述回测结果看来,最佳的收益率计算周期为30天,调仓周期为30天。但不论是收益率还是最大回撤,策略都没有跑赢沪深300指数。
让我们换种思路看看策略还有没有改进的地方。如果调整周期效果不明显,我们试试不同的股票池。比如,用创业板指成分股?
2. 调整股票池
N=10 returnPeriod=30 holdingPeriod=30股票池:创业板指数
果然好很多!不过这里使用系统默认基准——沪深300。由于股票池不同,策略与基准不具有可比性。把基准换成创业板试试。
N=10 returnPeriod=30 holdingPeriod=30股票池:创业板 基准:创业板
唔,我们发现,虽然策略跑赢了沪深300,但当将其与创业板指数对比时,还是不尽如人意。策略几乎与股票池完全贴合。会不会是我们持仓的股票数量太多了呢
3.调整持仓数量
N=15 returnPeriod=30 holdingPeriod=30 股票池:创业板 基准:创业板
N=5 returnPeriod=30 holdingPeriod=30 股票池:创业板 基准:创业板
N=3 returnPeriod=30 holdingPeriod=30股票池:创业板 基准:创业板
从收益率、最大回撤上看,N=5为最理想的参数。
从图形上看,在牛市期间,策略有明显的超额收益(即蓝线高于红线的部分),其中N=3表现最佳。
小结:
就本文的测试结果来说,沪深300股票池的30日收益率动量因子比较有效、创业板作股票池比沪深300表现更好。动量策略在牛市能跑赢基准,在别的市场阶段表现不佳。
如何判断策略的适用性、如何调整参数,是很多策略所面临的问题。动量有效性与很多因素有关。如果深入研究下去,主要的方向还是尽可能的区分动量策略适用于怎么样的市场、适合什么类型的股票、以及收益率何时表现为均值回复、动能持续,亦或随机波动。本文提供了一个最简单的调参范例。除了人工手动代入,我们还可以通过编程迭代、统计机器学习等方法去调试参数。不过在这过程中不要一味地追求结果最好,这样很容易先入过分拟合的陷阱。量化课堂以后的内容也会深入迭代这一步分内容。
动量类策略也有一些明显缺陷,比如波动率、回撤比较大。作为研究的另外一个方向,就是看看怎么把上面这些问题解决了。比如可以设置一些止盈止损条件啦,多策略混合啦,或者用股指期货进行对冲啦。等等。
谁说跑不赢大盘的策略不是好策略,既然他稳定跑不赢大盘,我们反过来操作不就能稳定跑赢大盘了嘛!->请戳《均值反转策略》
好了,就到这里!
备注:该回测的结果并非最优,设置不同的参数,会产生不同的结果。如有需求,用户可以查看源码调整参数。