stop losses on stocks

Do stop losses help trading performance? Do stops hurt trading systems? How far away should you place your stop? Should you ever use profit targets?

In a recent article I looked at some trend following stops and I managed to test a couple of different variations. So I thought I would expand on that now and do a bit more study into stop losses on stocks and how they can affect trading performance.

This article is split into two parts. In this first part, I compare stop loss exits when using random entries. In the second part, I put the stop losses to the test on some already developed trading strategies.

The results might surprise you.

Common Wisdom about stop losses is all wrong

First of all, it should be noted that the common perception concerning stop losses is all wrong.

In countless trading books and articles we are told that you should always have a stop loss in place – that stop losses are essential components for risk management and discipline. But as we shall see, stop losses are not always what they seem.

Fixed Stop Losses on Stocks

Fixed stop losses are stops that do not move, no matter what happens to your trade.

You place your stop a fixed percentage or number of points away from your entry, so whatever happens to your position, you know your risk is alway fixed at that amount. As a result, you will either exit your trade manually or get stopped out for a guaranteed loss.

The advantage of the fixed stop loss is that (barring a large amount of slippage) you know exactly what your risk is. You can then plan your trade and cut the loss short before it gets out of hand.

The fixed stop loss sounds good in theory, especially for discretionary short-term traders, but there are some downsides too.

Disadvantages

First of all, fixed stop losses tend to be market orders and this brings about the first major problem when using them. Because they are market orders, they will always fill at the best available price.

In fast markets, where there is a lot of slippage, your order could be filled at a very bad price, much below the level of your stop loss order. This can lead to losses larger than you had bargained for.

Second, fixed stop losses on stocks are always in the market. Theoretically, this means they can be seen by other traders and also by trading robots. We’ve all heard the stories of a market moving down to take out all the stops and then going back up. This is another reason why it doesn’t make sense to have large stop loss orders in the market.

Third and most importantly, fixed stop losses are too often placed arbitrarily in the market. They often guarantee a loss, when it may have been possible to guarantee a profit.

As you will see from the following studies, tight stop losses do not help trading systems because they often exit trades at precisely the wrong time. We are often told to keep our stops tight but the reality is quite the opposite.

Part 1 – Random Entries

1. Random entry study – No. of bars

In this first study I load up 20 years of historical data for all stocks in the S&P 1500 universe between 1/1995 and 1/2015. I then devise a simple portfolio strategy whereby the system buys 50 stocks at random and holds them for various numbers of bars and in this instance a bar equals 1 day. This way we can see the ideal duration for a random trade entry.

Commissions are set at 0.5% per trade and starting capital is $100,000, which is split evenly between each position (no leverage). All exits take place at the trade price (intraday) and the database includes historical constituents from Premium Data. In addition, stocks under $1 are excluded.ideal trade duration number of bars

As you can see, short durations under 50 days results in poor returns based on the CAR/MDD metric. Ideally, randomly entered trades should be held for more than 100 days for best performance.

Amibroker code:
ApplyStop(stopTypeNBar, stopModeBars, 252 ); /* hold bars*/

The objective function

The objective function used here is the CAR/MDD ratio. This is the compounded annual return divided by the maximum drawdown. It also indicates smoothness in the equity curve and is the perfect ratio with which to compare our results.

In the below studies, a higher CAR/MDD is preferable as it indicates larger returns and smaller drawdowns. ( A drawdown being the peak to trough decline in your equity balance whilst trading the strategy).

Random entry with 1 year hold

I then looked into the random entry strategy where stocks are held for one year (or 252 trading days). I ran this random strategy 100 times in order to get a better idea of what to expect. The average of 100 results produced a compounded annual return of 17.10% with a maximum drawdown of 57%, giving us an average CAR/MDD 0.30.

So it seems that David Harding was right, random stock picking can beat the S&P 500.

CAR: 17.10%
MDD: -56.75%
CAR/MDD: 0.30random stock entries 252 day holdWith these numbers in hand we can now compare how adding stops to this simple strategy improves or inhibits performance.

2. Fixed stops

In this test, I’ll be testing fixed stop loss lengths. As mentioned, stocks are bought at random. They are then sold by various levels of fixed stop loss.
random entries and fixed stops

It’s clear that tight stop losses result in poor returns. The wider the stop loss is kept, the less it is called into action and the better the performance.

Of course, the problem with this strategy is that if a stock does not hit the stop loss it is never sold, so the strategy can have a low turnover.

Therefore, I ran another test. This time stocks are bought at random and they are sold by fixed stop loss OR after one year (252 days). And whenever a stock is sold, a new random position is bought in it’s place.

Following are the results between 1/1/1995 and 1/1/2015:fixed stop loss study chartAgain, there is a clear correlation between wideness of the stop and performance. In many cases, adding a stop loss reduces the performance of the original strategy.

Fixed stop losses less than 25% are particularly harmful. There is not much evidence here to suggest that using a fixed stop loss can help trading returns.

Amibroker code:
Percent = optimize(“pct”,30,1,99,1);
ApplyStop(stopTypeLoss, stopModePercent, percent, True ); /* fixed stop */

2. Trailing stops

In this test, stocks are again bought at random and they are sold by trailing stop only:trailing stops only

You can see that trailing stop results are more closely bunched than fixed stops and again, wide trailing stops work best.

In the next test, random positions are either sold by varying levels of trailing stop OR after one year. Whenever a stock is sold, a new random position is bought in its place, keeping the portfolio topped up with 50 positions.trailing stop loss study chartAs is clear from both charts, wider trailing stops work better and trailing stop distances below ~20% result in negative returns. There is a wide range of profitable distances between 30% and 99%.

From the tests so far, the conclusion is clear that stocks should not be sold after knee-jerk reactions. They should be given plenty of room and time to move higher. Traditional stop losses do not seem to improve vastly on a purely random strategy (that is based on a diversified portfolio of stocks).

Amibroker code:
Percent = optimize(“pct”,30,1,99,1);
ApplyStop(stopTypeTrailing, stopModePercent, percent, True, True ); /* trailing stop */

3. Profit targets

In this test, stocks are again bought at random. They are then sold by profit target.profit targets and random entries

In the next test, stocks are sold by profit target OR after one year:stop losses study profit targetsAs you can see from the charts, small profit targets are counterproductive and inhibit strategy performance. Overall, using a profit target rarely helped the system beat the original strategy, so it’s clear that there isn’t much to gain from using profit targets.

However, it’s encouraging to note that using larger profit targets does not seriously damage trading returns.

Amibroker code:
Percent = optimize(“pct”,30,1,99,1);
ApplyStop(stopTypeProfit, stopModePercent, percent, True); /* profit target */

4. Chandelier stops

In this test, stocks are bought at random like before. They are either sold after one year or by Chandelier stop. Chandelier stops are based on the Average True Range (ATR) of a stock. In this case, ATR(14) is tested with various multipliers from 1 to 50.

So if ATR(14) is 20 points and the multiplier is 5, the stop will be placed 100 points away. Chandelier stop losses

As you can see from this chart, there is a wide sweet spot between 15 * ATR(14) and 45 * ATR(14). Looser stops work best with tight stops inhibiting system performance.

Amibroker code:
Multiplier = optimize(“multiplier”,30,1,60,1);
ApplyStop(stopTypeTrailing, stopModePercent, multiplier*ATR(14), True, True ); /* Chandelier stop */

5. Bollinger stop

This test is similar to the Chandelier stop. But instead of using a multiplier * ATR we will use a multiplier * the difference between the top Bollinger Band and the bottom Bollinger Band – using the default Bollinger settings 20 and 2.

So if the top Bollinger Band is 20 and the bottom Bollinger Band is 10, and the multiplier is 3, the stop is placed (20 – 10) * 3 = 30 points away.Bollinger Band stop loss

Although the Bollinger Band idea is fairly different to the previous strategies, there doesn’t appear to be any real difference in results. The fact remains that slightly looser stops work the best.

Amibroker code:
Multiplier = optimize(“multiplier”,30,1,60,1);
BBanddif = BBandTop(C,20,2,2) – BBandBot(C,20,2,2);
ApplyStop(stopTypeTrailing, stopModePercent, multiplier*BBanddif, True, True ); /* Bollinger stop */

Conclusion

By testing random entries, it is possible to evaluate and compare exits and stop losses on merit.

Traditional wisdom says that traders should cut losses short and let winning trades run, however, the evidence here shows that this is not entirely true.

When trading stocks, traders should maintain a wide berth. Stocks can be volatile so wide stop losses are necessary to give a trade room to move higher. Conversely, tight stops result in unnecessary loss-taking and destroy trading performance. In many cases, it is better to not use any type of stop at all, so long as risk is kept small enough.

When it comes to profits, there is truth in letting trades run on, however, taking profits now and again is not shown to be completely damaging. Trailing stops, where a stop moves up with the share price are shown to be a worthwhile method.

Overall, the evidence indicates that using stop losses does little to improve random stock picking. Market beating returns must therefore come from somewhere else – a more concentrated portfolio with a trade-able edge.

Stops may still have a place though (with more sophisticated strategies). Based on this study, end-of-day traders would be advised to keep their stops at least 25% away from the action. When it comes to taking profits, they should aim for at least 25% profit.

Part Two

In the next part of this study I will take the stops mentioned and apply them to some more defined trading systems. Stay tuned and thanks for reading.


Tests on this page were made with Amibroker using clean historical stock data from Norgate Premium Data. Charts produced using Google Sheets.

Plus, don’t forget to check out my latest trading strategies.



Disclaimer: Past performance is no guarantee of future returns, you should do your own due diligence. No responsibility shall be taken for errors, miscalculations or trading losses. Please read the full disclaimer.
Summary
Article Name
Stop Losses On Stocks – Ultimate Guide Part 1
Description
In this article I look at stop losses on stocks, which stop losses work the best and how you can use stop losses to improve your trading performance.
Author

Tags: , ,


12 opinions

  1. I use guppy count back lines it works good for me

    • I can honestly say I haven’t heard of that one, thanks for sharing.

    • Dan H

    • January 8, 2016

    • 11:58 am

    • Reply

    If stops damage returns, why not create a strategy that does the opposite, and take positions in stocks are getting stopped out. Some kind of short term “value” strategy?

    • Your idea supposes that we know when investors are getting stopped out but this is not usually the case. We can guess but we cannot know for sure where the stops are. Thus your idea becomes a straightforward mean reversion strategy. Although it is not quite the same, you may like to see this overnight strategy which attempts to buy stocks after heavy price falls.

        • Dan Houghton

        • January 12, 2016

        • 12:30 am

        • Reply

        Good point. Maybe much excess volatility is caused by traders using stops (or taking profits), causing stocks to mean revert in the short term, then fundamental traders stepping in an reversing the trends. Anyway, very interesting academically. Thanks for the link.

        • No problem. One thing I’ve noticed is that volume tends to peak as the market bottoms out so that would suggest you’re right about investors stepping in after a big fall. Another thing to look out for.

    • Bobby

    • March 14, 2016

    • 6:37 pm

    • Reply

    I like the article. I agree with the volume peaks and when institutional buying/selling steps in. I have had to change my stop models depending on the macro sentiment that is being portrayed in fundamentals and market outlook. in one case after excessive evaluations of a company after reported earning or insider trading I’ve used ATR. Other times during various volatility bands (30-60 levels) or price ranges I revert to using trailing stops. Also, my trading time frame are 1-3 weeks. I tend t keep the rules and metrics simple.

    • Sounds like you have a setup that works for you and allows you to assess your opportunities on a case-by-case basis. Sounds interesting. Thanks for your message.

    • Neha

    • March 3, 2017

    • 12:46 am

    • Reply

    Thanks for the informative post.

  2. Can you show the code you used for your random entry?

    • Can’t remember now to be honest. Probably was just buy = random(). or may have been buy = 1 and used random() for positionscore.

Leave a Reply

%d bloggers like this: