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
Winners 259 (61.67 %)
Max. Consecutive wins 12
Largest win 367.68
Losers 161 (38.33 %)
Max. Consecutive losers 6
Largest loss -264.90
Max. trade drawdown -264.90 (from a $1500 position)
Max. trade % drawdown -17.61
Max. system drawdown -1003.73
Max. system % drawdown -3.07 %
Sharpe Ratio of trades .68