策略实战#

也许整个动量策略在目前看来有些理论化。看一下实际操作的一面,了解如何真正实施它,可能会有所帮助。我们还会回顾一些图表,看看股票会在什么位置被买入和卖出。

初始投资组合#

启动策略的那一天,你直接跳入深水区,没有逐步买入的过程。假设市场状态是正面的,即指数高于其200日移动平均线,我们就买入股票直到现金用尽。

显然,首要任务是确保标普500指数高于移动平均线。这部分很容易。任何图表软件都可以为你完成,如果你想,甚至可以在Excel中通过比较过去200个指数价格的平均值与当前价格来完成。如果指数低于移动平均线,我们什么都不买。只需耐心等待,直到它重新回到正面区域。

现在你需要计算前几章提到的相关分析指标,并制作一个漂亮的排名表。手动为一只股票做这些很容易,但我们需要对数百只股票做同样的事。有些读者可能觉得这轻而易举,而另一些读者则不知从何下手。

你想要得到的结果类似于表11-9。当然,当你阅读时,这张表中的实际数据已经不是最新的了。这张表是整个策略的核心。这是一张非常重要的表格,所以让我们来回顾一下关键列。

斜率(slope)列可能是最重要的。整个表格就是按此排序的,它决定了我们买入的优先级。斜率列显示的是波动率调整后的斜率(volatility adjusted slope),如前文所述。简而言之,这个数字只是衡量股票所展现动量的一项指标,经过波动率调整。数字越高,风险调整后的表现就越好。我们希望买入尽可能高数字的投资组合。

即使一只股票排名很高,它仍然可能不合格。在确定是否可以买入之前,还有两列需要检查。趋势(Trend)列告诉你股票是否高于其100日移动平均线。如果不是,我们就不买入。一只排名很高的股票仍然低于这个均线是不常见的,但有可能发生。这有点像后备机制,用于避免一些奇怪的情况。

然后是最大跳空缺口(maximum gap)。我们寻找的不是那些因收购传闻而突然跳涨40%的股票。我们寻找的是有序的牛市,以可控方式上涨的股票。某些跳空缺口是可以接受的,但我们不想跳入那些因为单一巨大跳空缺口而使股票跃升至排名表顶部的不寻常情况。过去90天允许的最大跳空缺口为15%。这意味着该表中排名最高的条目——Hospira——不合格。它近期存在26%的跳空缺口,所以我们不考虑那只股票。

接下来是ATR,即平均真实波幅(Average True Range)。这个数字告诉我们一只股票平均每天倾向于上涨或下跌多少(以美元计)。我们将用它来进行头寸规模计算。记住,我们的目标是风险平价投资组合(risk parity portfolio),其中每只股票对整体投资组合的影响具有同等的理论概率。

目标百分比(Target%)列是新的。这里的所有其他数据之前都解释过了,但这一列还没有——至少没有直接解释过。这是在排名表中很有用的一个数据,它告诉你应该将某只股票的目标权重设定为多大。它可以通过ATR列轻松计算得出。

由于Hospira的跳空缺口太大,我们跳过它。我们先买入Mallinckrodt,计算需要购买多少股。

这里我们使用的风险因子为10个基点。这意味着我们希望每只股票每天对投资组合的平均盈亏影响为0.1%。假设我们起始账户价值为$100,000。在这种情况下,我们希望每只股票每天平均波动约$100。

根据表格,Mallinckrodt的ATR为3.69,这意味着该股价在近期历史中平均每日波动幅度为这个金额。由于每只股票每天波动约$3.69,而我们希望影响为$100,我们需要买入27股。27乘以3.69接近100。

制作该表格时的股价约为$126。126乘以27股,我们得到$3,414的敞口。除以你的账户价值$100,000,你会发现这个头寸的权重为3.4%。

现在继续下一只股票,不断买入直到现金用尽。

表11-9 排名表

图11-23中的交易图表展示了一次交易是如何完成的。你在该图中看到的各类线条不是传统的技术指标,而是这个动量模型的具体项目,我发现它们有助于可视化。

在该图的顶部,你会看到股票Urban Outfitters的实际价格图。其上绘制了一条100日移动平均线,显示该股票目前处于正向趋势。正下方的第二个图表窗格显示标普500指数及其200日移动平均线。这清楚地表明此时指数也处于正面状态,交易价格高于移动平均线。

接下来是风险调整后的动量斜率(risk adjusted momentum slope)。该分析指标如前文所述。然后是ATR,显示股票的波动率如何不断变化,迫使我们持续调整头寸规模以保持风险一致。

下一个窗格中的动量排名(momentum rank)告诉我们,与指数中所有其他股票相比,这只股票排在什么位置。因此,如果你像在表11-9中那样,取指数中所有股票的风险调整后动量斜率并进行排序,这个指标就会告诉我们这只股票在该表中的位置。数字小意味着相对于其他股票,风险调整后动量更强。

指数成分股指标(index member indicator)要么为1(如果该股票当前是指数成分股),要么为0(如果不是)。考虑历史指数构成绝对至关重要。你需要对哪些股票属于你的投资范围、哪些不属于有一个正式的约束条件。创建一个看起来很棒但结果毫无用处的模拟,最简单的方法就是假设你在十年前的今天交易当前的指数成分股。

如果一只股票不是指数成分股,我们就不交易。如果它离开了指数,我们就卖出。

最后,最后一个图表窗格显示了该股票在过去90天内的最大跳空缺口有多大。只要低于15%,就一切正常。

图11-23 交易图表:买入Urban Outfitters

如图所示,我们在2015年3月买入了Urban Outfitters,在此之前它经历了一轮强劲上涨。注意风险调整后动量序列如何开始上行,推动该股票在排名列表中不断上升。在年初,这只股票的排名超过400,意味着它表现糟糕。然后它开始起飞,迅速攀升至排名表前列,最终被买入。

这就是构建初始投资组合的方法。只要股票通过过滤器,就从顶部开始买入。但工作还没有结束。现在你需要定期执行再平衡任务,以确保投资组合的构成始终符合我们的目标。

头寸再平衡#

每两周一次(每隔一周),我们进行头寸规模再平衡。如果你想更频繁或间隔更长一些,是个人偏好的问题。频率更高,风险控制更精确,但同时会产生更高的交易成本。每隔一周是一个不错的折中方案。

头寸再平衡的目的是保持风险一致。股票的波动率随时间变化,由于我们需要风险平价投资组合,需要不断调整交易规模以匹配每只股票的目标风险。

每个头寸一买一卖不再动的想法已经过时了。那不是管理投资组合的方式。所有这些再平衡交易可能让交易图表看起来很混乱,但确实非常合理。

首先要做的是制作一份更新的排名表,就像表11-9一样。这将告诉你每只股票的目标权重。现在你需要与实际权重进行比较,并进行必要的调整。

在图11-24中,你可以看到1999年和2000年Java动量策略进行的交易。最初的买入是在1999年9月,为这个投资组合买入了387股。随着波动率不断上升(如ATR窗格所示),每次头寸再平衡时都会卖出少量股票。这些卖出与市场观点无关。我们卖出不是因为认为股价可能会下跌,也不是为了锁定利润或类似原因。我们卖出是因为想要维持初始风险。如果不卖出一些股份,我们最终将承担比预期更高的风险。

理解这一点很重要。如果我们什么都不做,我们的头寸也会发生变化。我们需要采取行动来维持预期的头寸。这可能意味着买入或卖出股份,但与市场观点无关。

图11-24 交易图表:Oracle

投资组合再平衡#

投资组合再平衡每周进行一次。这个操作的目标是退出不再满足条件的头寸,并买入新的头寸。当然,如果指数低于其长期移动平均线,我们就不替换股票,从而逐步降低整体投资组合风险。

同样,我们首先需要制作一份更新的排名表。首先检查你当前持有的股票。如果有任何股票呈现负面趋势,即价格低于其100日移动平均线,就卖出。如果有任何股票存在超过15%的跳空缺口,就卖出。

如果某只股票不再是指数中排名前100的股票,就卖出它。如果我们关注的是标普500中的股票,那意味着排名需要优于100。制作排名表,按波动率调整后的动量斜率排序,查看股票的最终排名。如果排名高于100,就将其剔除。

卖出不再属于投资组合的股票后,就可以买入新的了。而且你已经知道怎么做了,不是吗?与选择初始股票的方式相同。从排名表的顶部开始。假设我们尚未持有该股票且它满足条件,我们就买入排名最高的股票,直到现金再次用尽。

当然,除非——这一点很重要——除非指数低于移动平均线。如果指数低于均线,我们只需保留现金,不买入任何新股票。结果将是在熊市阶段缓慢逐步地撤出股市。

一旦指数再次回升至移动平均线之上,我们立即重新买入一个满仓的投资组合。这与初始投资组合的构建方式完全相同:从列表顶部开始买入,直到现金用尽。

图11-25中的Gilead交易图表展示了我们如何在2005年5月首次买入该股票,在夏季由于波动率变化略微调整了头寸规模,最后在8月卖出。在夏末排名恶化,导致了整个头寸的卖出。

同年晚些时候,12月,该股票再次显示出非常高的动量排名。该股票被重新买入并又持有了几个月。

图11-25 交易图表:Gilead