One of the systems I trade relies on catching short-term momentum bursts, usually lasting three to five days. It’s similar to Pradeep’s momentum-burst strategy (here), but since I don’t have his exact system, I’ve reverse-engineered it and come up with my own variations.
Without boring you on the specifics, I’m looking for stocks with long-term momentum, a medium-term history of previous bursts, and a pullback and low-volatility pullback from a recent major high. Ideally I catch the burst when it happens, and stay in the trade for just a few days.
The lead image gives an idea of what these look like.
Recently I started wondering where all the momentum bursts have gone. And then wondered if they had actually gone anywhere at all. Time to crunch the numbers!
For this, I needed delisted stocks as well as current stocks. So I’m using the entire US stock universe from 2000-2015, NYSE and NASDAQ, listed and delisted stocks.* Anything was a candidate that had a historical (i.e. not adjusted for splits etc) closing price > $2 and a 10-day median volume greater than 50,000 shares. All bursts that were > 5% from open to close were included in the data.
I first looked at the monthly momentum-burst totals dating back to 2000, to see if there were any anomalies:
Near the end of 2014, you’ll see there were a few months with no bursts, as well as January of this year, and July (so far). The previous periods that had zero bursts per month seem to coincide with major bear markets or corrections in the past. But February through June of 2015 look pretty normal. Not high, but close to the EBA (“eye ball average”). So that doesn’t really help.
Well how about the quarterly averages? Were Q1 and Q2 of 2015 abnormal in any way?
Q1-2015 had 12 bursts, and Q2-2015 had 14 bursts. A little below average but not crazy-low in my opinion. Hmm, what about averages per calendar month? Do some months show bursts more than others? Ok let’s dig in…
Ah hah! Perhaps there’s a seasonal component. July is, on average, the second-worst month for momentum bursts. That might explain why we haven’t seen any real breakouts this month (at least based on the specific parameters used in my scanning code). And March of this year was unusually high, with a total of 10 bursts. The rest of the months so far in 2015 were below average.
So what does this tell me? That yes, momentum bursts are on the low side, although there have been much worse periods in history. And also I shouldn’t expect too much of July in general. Perhaps I should not bother trading the system until August rolls around? We shall see!
*yes I did finally break down and pay for delisted stock data as well. No more survivorship bias for me!
I have trading accounts with three different brokers, for reasons I won’t bore you with. One – the most expensive – I’ve been with for years. I won’t mention any names but you can probably figure it out.
In corresponding with them over a technical issue, I mentioned at the end of my message that I would trade with them a lot more if the commission fees were more in line with the other two brokerages I use.
That prompted an immediate reduction from $9.95 per trade to $7.95 per trade, with possibly lower commissions based on trade volume over a 30 day period. Yay!
Sure, it’s still a ways off from $4.95 commission (or less) that you can find at some of the smaller brokerages, but it’s a Good Thing none the less. And a $4 round-trip reduction will definitely increase my trading frequency with them.
IMPORTANT NOTE: I have revised this system since I originally published it, and have incorporated the changes below. I continued to backtest using the in-sample period of Jan 1, 2010 to December 31, 2012, with my out-of-sample period being 1/1/2013 to 7/8/15. as a further stress test of the OOS period, I incorporated delisted stocks (the original testing and comparison was done using currently trading members of the Russell 3000). Since I did examine the OOS period before the revision, this system is technically not pristine in that aspect. However switching to the survivor-bias-free data compensates to some degree. The results were still good, with a caveat. Read on for the changes…
Don’t say I never gave you anything. Here’s a swing-trade system I worked up. And it’s yours, for free.
• I have made exactly one trade with this system, which had a small loss. I’ve been forward testing it since then, but there hasn’t been enough time to show any results. You should do your own research before investing.
• I did however use an in-sample and out-of-sample period for testing. My in-sample period was 1/1/2010 through 12/31/2012. This is my usual in-sample period for creating systems, because a) it’s recent, and b) includes some serious market corrections. Out of sample period was 1/1/2013 through 07/08/15. This was tested on the current Russell 3000 group of stocks. This was developed using the current list of Russell 3000 group of stocks, and then out-of-sample testing was done using survivor-bias-free data.
• Disclaimer: stocks are bad for you, and you should never trade them.
Ok, with that out of the way, here’s the premise: if you’ve got a stock that is on a roll, and it has a big jump but falls back considerably from the high, there is an implied enthusiasm for the stock that is unrequited, and will be realized in the near future. It will likely attempt to scale those heights again in the near future, and we can take advantage of that. A short-term momentum play that buys on a pullback, in other words.
The system’s details:
1. Average 10-day volume must be greater than 100,000, and closing price must be greater than $5. This weeds out the weird little stocks. Performance is further improved if you set a maximum price of $35. Stocks that are priced higher than that rarely if ever hit their sell-limit in the time required.
2. You want to make sure your stock is in the high end of its range. To do this, I calculate the most recent closing price’s “position in range” compared to the last 100 days. You use this formula:
(close – lowest close in last 100 days) ÷ (highest close in last 100 days – lowest close in last 100 days)
You want this to be greater than .85.
3. The most recent close must be at least 5% higher than the previous day’s close. ALSO, this must be the only 5%-or-greater gain in the last four days.
4. Close must be greater than open.
5. Now let’s describe the ‘high tail’ on your bar, again using the position-in-range calculation. You want a a substantial distance between the high and the close. So calculate this:
(High – Close) ÷ (High – Low)
This value should be greater than .4, thus ensuring a “high tail”.
6. Finally, you want to avoid stocks that had a big gap on the signal day. The reason is that many big gaps are due to overnight news, such as earnings, where the new consensus value of the stock is well-defined. A stock that announces earnings to the upside will have a small price range it will gravitate towards based on the news, and so the upside is limited. News that is less quantifiable, like a product announcement or a drug trial success, generates bigger swings and longer moves upward. Sometimes a stock doesn’t need news at all to get moving, and that’s fine too.
To avoid gaps, we eliminate any stocks where the low of the signal day is more than 10% higher than the high of the previous day.
7. Set a buy limit-order for the next day, equal to the close of this signal day. Good for one day only.
1. Set a sell limit-order for for 3.5% greater than your purchase price (which is not necessarily the same thing as your buy limit-order price, depending on how the stock opened).*
2. Sell at the close of the third day (the entry day being day 0) if your sell limit-order wasn’t triggered.
3. Stop loss…we don’t need no stinkin’ stop losses! For short term swing trades like this, stops usually degrade performance (and it does in this case too, because I tested it). The maximum duration is your ‘stop’.
3. I found a ‘hard’ stop of 17% did increase performance a little bit. A hard stop is when you enter a stop loss with your broker, to exit intraday if hit. A soft stop is when you only refer to close or open prices, and exit accordingly.
Perhaps you’re thinking, hey, I’m only getting 3.5% on each trade before commission…aren’t I potentially leaving a lot on the table? Well yes and no. My goal with swing trades is a high hit rate. I want frequent trading and a high rate of success.
* So the astute reader will be asking “do I set the sell limit right away, so that it might claim a 3.5% gain on the same day as I bought the stock? Or do I wait until after close until setting this?” Good question. Because we can’t know from end-of-day data how the price progressed throughout the day, we can’t exit the same day in a backtest and know that our results are accurate. However there’s no reason you can’t set your sell-limit order right away. If the stock is really moving though, you might get a bigger gain by having the sell-limit order triggered the next day at open, if it opens higher than 3.5%. On the other hand, you might never see a 3.5% gain again during the trade…you just don’t know. But just know that this is tested with the sell-limit order being placed after the close of the entry day.
Ok now for the results of the out-of-sample period, 1/1/13 through 07/08/15. Tested with a maximum of 5 positions open at any one time, $30,000 starting balance, $1500 maximum position size, and $4.95 commission each way. In other words, using realistic numbers that even po’ folks like me can trade.
That caveat I mentioned in the introduction: yes the system looks pretty decent, but you’ll also notice we are currently in the largest drawdown period of the OOS data. Do you really want to start investing when a system is showing the worst results of the last couple of years? Probably not. But keep an eye on this system, and if it recovers then there ya go.
Any “market health” filter I could come up with just degraded performance. This is probably because if you’re getting bumps of >5% and the stock is in the upper portion of its trading range, then the market as a whole is pretty healthy. So the system has a health-o-meter built in.
One final example of a trade. This one gained more than the 3.5%, because the open on the exit day was higher than the sell limit-order.
Some stats for the out-of-sample period 1/1/2013 through 07/08/2015 (using the revised system and survivor-bias-free data):
Initial capital 30000.00
Ending capital 32842.08
Net Profit 2842.08
Net Profit % 9.47
Total transaction costs 4158.00
Trades 420 (on average, a new trade every trading day or two)
Avg. Profit/Loss 6.77
Avg. Profit/Loss % 0.45
Avg. Bars Held 3.23
Today I when I saw the news of the Greek “no” vote, I made a loud groan. My twelve year old son, who often talks to me about the market, asked me what was wrong.
I explained the Greek situation, and how much chaos it was creating. He said “so dad, you better get ready to buy some stocks tomorrow!” At first I thought he misunderstood, so I pointed out that the market would likely go down as a result of the vote.
He replied “well yeah, but that’s when you buy, because it’ll go up again!”
What an unusual candlestick pattern we have in the S&P500 over the past few days! Now, I don’t much go for candlestick patterns as a predictor of anything, but I thought it might be fun to take a look at this.
Three ‘red’ days in a row (close below open), yet the close and opens of the most recent two days are enclosed within the big bar before them. Some might define “multiple inside days” as bars that are confined within the high and low of a larger bar, but whatever. It’s still pretty unusual, don’t ya think?
In fact, since the SPY ETF has been trading since 1993, this has only happened 13 other times. And it seems to be happening less and less.
What happens after this odd bar combination? What crazy predictive value does this bar pattern have? Well the results are good, for what it’s worth. From the close of this the third bar, most of the 1-day and 2-day moves (from close to close) have been positive. Here’s a table:
1day G/L %
2day G/L %
What does this all mean? Well, probably nothing much. Other than that I might have too much time on my hands.