TL;DR
RankPos is better than Rank in sell rules because it keeps a consistent sell point as the underlying universe changes size over time. Do you agree or disagree?
I wanted to get some input on the use of Rank vs. RankPos in sell rules.
Until recently, I used the Rank function to decide when to sell a position. A typical sell rule was something like “Rank<95.5”. I would arrive at the 95.5 number by running historical tests and optimizing for the best sell point.
However, after some research I realized this approach may be fundamentally flawed because the size of underlying universe can change dramatically over time. When you use Rank in a sell rule, it is corresponding to a very different sell point sensitivity depending on the era.
For example, let’s say I use a simple custom mid/large cap universe with these rules:
MktCap > 2000
AvgDailyTot(200)>15000000
AvgDailyTot(20)>15000000
Universe(MasterLP)!=TRUE
Price>5
The size of that custom universe has changed dramatically over the historical testing period:
1/4/1999: 460 companies
1/1/2010: 911 companies
1/1/2018: 1365 companies
So by using my “Rank<95.5” rule for the historical testing period, I’m actually selling stocks much more quickly in the early days than I would now. For example, if I have 10 positions in my portfolio, in 1999 the 95.5 rank corresponded to the 20th position in the universe. In 2018, it corresponds to the 62nd position in the universe.
So by using Rank, in the early era I was buying the 10 best stocks and selling them anytime they fell out of the top 20 spots. Now I’m buying the 10 best stocks and selling them anytime they fall out of the top 62 spots. Clearly this is a different strategy that will produce different results, right?
This would also explain why in backtests the turnover is much higher in early years than in modern years. The 95.5 sell point was being hit much more quickly than it is today.
Again, this is because my custom universe has gradually gotten larger. And if you use a dynamic universe that changes sizes on a monthly or annual basis, this problem could be even worse.
So it seems like the best solution is to instead use RankPos so that you’re always employing the same sell point regardless of universe size. So for example, “RankPos>30” says I want to buy the 10 best stocks and sell them anytime they fall out of the top 30 spots. This would not be affected by changes in universe size.
Thoughts? Do you agree? Or is Rank better for reasons I’m missing?
Thanks for your feedback!