Saturday, November 17, 2018

Stock Market Momentum - Part 2

Rules & Implementation

My system is based on Andreas Clenow's "Stocks on the Move", a readable and entertaining book that adapts trend following strategies to stocks.  Its a long-only rotational trading system, where stocks are ranked by momentum and the highest ranking ones are bought.  It only buys or holds stocks that are above their 100 day MA.  And only takes new positions when the market index is above its 200 day MA.

I made some small changes:

  • I don't size and re-balance positions by volatility.  It makes no sense when a position is $2-4K.  Its hard to code.  And I don't see the benefits since a stock's volatility can change in a heartbeat, and the whole market usually changes with it.  I just buy 25 stocks 1.
  • I use the lower 100-day Bollinger band (1 std-dev) instead of the 100 MA to filter if a stock is in an uptrend.  This takes volatility into account, unlike a moving average.  I want to hold winners as long as possible.
  • His algorithm buys all positions when the market index is above its 200 MA.  I gradually 'ease in' to the market.

The 'easing in' part works like this. We usually hold 25 stocks.  The first day the index closes below its 200 MA, we will set the 'target number of stocks to hold' (N) to be 24.  We don't explicitly sell stocks to meet that target - the system just goes into 'bear mode' and stops buying (Stocks may be sold based on the other criteria).  For each day the index is below the 200 MA, N decreases by 1.  So N will be zero if the index is below the MA for 25 or more consecutive days.  The first day the index goes above the MA, N is incremented by 1.  And if we are holding less than N stocks, we buy up to N.  Therefore, the index needs to be above the ma for some time in order for us to be holding the full allocation of 25 stocks.

This subtracts from my returns a little, but I need it to be comfortable trading the system. Otherwise I won't be able to follow it.

I am running on Amibroker, and selecting stocks from the Russel 3000 with Norgate Data taking care of tracking index constituents.  I exclude stocks trading under $5, or with a median 90-day turnover less than $250K.   For slippage, buying and selling is at the day's average price.  Brokerage is $1 per trade from Interactive Brokers.  Starting amount USD 73K.  I run the system over the weekend and trade on Mondays.

Backtest Results

I get a 14.2% CAGR from 1999 to Aug 2018, and 17.4% from 1991 to Mar 2003.  Decent numbers.

Looking at monthly returns:



Returns are unpredictable.   We often get a few years of boring single digit positive or negative returns, followed by a year of stunningly good 30-60% returns.

The volatility is sickening.  There is a 61% drawdown in the 2000 tech wreck, and a 33% one in 2006.  20-30% drawdowns occur every few years.

Trading It

Can I stick with this?  Trend following strategies are notoriously frustrating.  You have to just follow the system mechanically, week in, week out, and not think about how much you're making.  Or losing.  From Nick Radge (What makes a Successful Trader? 37:00):

  • We have created a system with positive expectancy.  Like a casino.
  • Remove yourself from the trading environment. Place your trades, turn off the computer.  In the long term, positive expectancy will look after you.  All you have to do is be there for it.
  • Think 'Next 1000 trades'.

When will I start?  The Russel 3000 index is currently below its 200 MA, so I'll let the market decide.

1 The tests I saw measuring different momentum with holding different numbers of stocks started with 50 as the smallest number.  I am using 25 due to low capital.  May increase it to 50 later if account size grows.

No comments: