Volume and Mean Reversion

Overall, I have had very little success integrating volume into any of my strategies. Either volume would have no predictive value or if it did, using it reduced the number of trades too much to be worthwhile. It has been a long while since I have looked into this and I had some new ideas.

The Rules

Test date range 1/1/2007 to 10/31/2022. I wanted to keep the rules simple.

Buy Rules

  • Stock is a member of the Russell 3000
  • 2-period RSI is less than 1
  • Close is greater than $3
  • 21-day moving average of Close*Volume is greater than $1 million
  • [Stock is above 200-day moving average, Stock is below 200-day moving average,]
  • Enter on next open

Sell

  • 2-period RSI is greater than 70
  • Exit on the next open

I am looking at all trades, this is not a portfolio. On the setup day, I calculate the Percent Rank of the volume from the last 20 days. From AmiBroker help, “Returns percent rank (0…100) of the current element of the array within all elements over the specified range.” Previously I had looked at the current volume divided by the average (or median) of the last 20 days with little success.

The AmiBroker code for this is “PercentRank(V, 20)”

Results Above the 200-Day Moving Average

The blue line is the avg % p/l for each PercentRank bucket. The dotted line is the trendline. The orange line is the average % p/l for all trades, .54%. The lower volume trades in general are above average. The average of trades in PercentRank from 0 to 39 is .64%, which is 18% above the average. But now we run into the issue of the number of trades.

We can see that 33% of the trades happen with the highest volume of the last 20 days. Looking at PercentRank 0-39, that is only 18% of trades. So, to get the bump in average % p/l, we lose 82% of the trades.

Results Below 200-Day Moving Average

Because I trade my mean reversion strategy both above and below the 200-day moving average, I was curious about these results.

I have added another line to the chart, the grey line which represents the average %p/l for trades above the 200-day moving average. Two things jump out at me, there is a definite trend of lower volume setups doing better. But the avg. %p/l of .15% for the trades below the 200-day MA is substantially below when above the MA. This is interesting because in my own mean reversion strategy, it is the reverse. Though trades with PercentRank between 0-20 still outperform the above 200-day average.

We see the same pattern in the number of trades.

 

Adding Finding to a Portfolio

I have a mean reversion strategy I trade that I want to add these results to. To my set-up rules, I will add PercentRank(Volume, 20) < 20 as another filter.

As expected, the exposure dropped dramatically from 25% to 5%. The avg. % p/l takes a large jump from 1.87% to 2.58% with % winners increasing slightly.

Instead of adding PercentRank as a filter, what happens if we rank signals with a PercentRank < 20, higher than those without? This should give us about the same number of trades.

We see a small improvement in CAR, UI, avg %p/l, % winners and Sharpe Ratio.

 

Final Thoughts

We did find volume providing an increase in the edge. Surprisingly it is a low volume that gives the edge. Though the problem is it is only a small fraction of the setups. Adding PercentRank < 20 as a preference for ranking the signals had a small improvement in most of the important statistics. But not a big one.

Is it worth adding this to my strategy? No. The reason is that we are adding more rules with only a small benefit. I like to see a larger improvement in the numbers when adding complexity.

But if you are a discretionary quant trader, like my good trading buddy, then this is useful information. One can prioritize trades and adjust position sizing when getting these low volume situations.

A post using a reader’s suggestion: Volume and Mean Reversion Part 2

Backtesting platform used: AmiBroker. Data provider: Norgate Data (referral link)

Good quant trading,

Visited 161 times, 1 visit(s) today

Click Here to Leave a Comment Below

Thomas Musselman - December 7, 2022 Reply

An increase in volume, e.g. 10 day/63 day, may help

    Cesar Alvarez - December 8, 2022 Reply

    I have tried something similar before with no success.

Thomas Musselman - December 8, 2022 Reply

S&P 500 stocks 03/01/1957 forward traded every 5 days is 12.7% CAGR
Same but top 10 by 10 day/63 day average daily dollar volume is 15.4% CAGR
S&P 500 stocks, rsi2<20 (1 day lag i.e next day not at close today), then same 10 stocks by such ratio is 27.7% CAGR
28.2 CAGR if use rsi2<10

    Cesar Alvarez - December 9, 2022 Reply

    Interesting. I will have to test that out myself. I am really curious to see how this does since 2007. The markets before 2000 were very different.

Thomas Musselmant - December 9, 2022 Reply

S&P stocks as they change over time
low price bottom 10
low ROE bottom 5
Trade weekly, hold 5 days, .2% friction:

CAGR 26.4% since 2007
17% since 19970902

Trade monthly (21 days)
CAGR 24.99% since 2007

Trade quarterly
CAGR 21.7% v. SPY 10%

Sometimes simple is good.

    Cesar Alvarez - December 12, 2022 Reply

    I am confused by your rules. For “low price bottom 10” does that mean from the S&P500 stocks you find the 10 lowest priced? Then from those 10, you pick the 5 lowest based on ROE (is that return on equity?). I take it this does not use volume. If ROE is return on equity, where are you getting that data for historical constituents?

Leave a Reply: