Does anyone use any short-term mean-reversion factors in their ranking systems (i.e. buy the dip)? If so, would you mind sharing them? I experimented with quite a few a while ago, but couldn’t find one that really worked well. It could be as simple as an RSI with lower numbers better, or an up-down ratio, or close(0)/close(10) . . . or maybe there’s something more sophisticated that works well . . .
It’s probably due to my lack of imagination, but I got nothing. If stars aligned with the other factors, I couldn’t find systematic benefit of a dip. Especially in recent years.
You may have tried this, but here’s something that might add a little bit at the margin, but I’ve never tried it in combination with a factor model.
something like: close(0) < close (2) and close(1) < close (3) and close(2) < close (4)
it’s 0 slippage shown, but if you’re doing the trade anyway there might be a tad bit of edge if it’s uncorrelated enough. My guess is that rarely would the highest ranking stocks be declining successive days like that, but maybe it would help in a rare case?
I use technical mean reversion, but only as a buy/sell signal. I don’t use it in dynamic asset weighting because the high turnover tends to diminish gains through fees and slippage.
Are you familiar with Fama-French’s short term reversal factor?
If not, I’d recommend starting there and refining. Next, I would reccomend carefully rereading Jim Simmons’ commentary about non-randomness.
I just found out that for the last six months my transaction costs have gone down to less than zero due to several improvements I’ve made to my trading strategy but most of all because I’ve learned how to avoid some of the terribly illiquid stocks I used to trade in while still buying and selling low-volume microcaps. I’m measuring transaction costs by the difference in the actual cost of the trade and the cost if it had been made at opening price without commission or fees. In other words, I’m improving on opening price both buying and selling stocks, so my slippage costs have gone below zero. This suggests that maybe I should trade more often and perhaps take advantage of short-term mean reversion to some degree. So I’m going to do some experimenting this weekend . . . I’m always looking for a new angle–keeps things interesting . . .
The factors that I’m going to try might include averaging RSI(2) and RSI(5), Close (0) / Close (5), Close (0) / Close (13), Loopmedian (“Close (Ctr) / Close (Ctr + 1)”, 5, 0), and variations on those with a one-day offset. But I’d welcome other suggestions!
One on hand, I love to talk about this stuff. It’s my passion.
On the other, I believe that openly discussing it potentially devalues any edge I might possess.
So with that said, I will attempt to walk the fine line:
I do not assess technical mean reversion in a vacuum or an absolute basis. I look for how much a security price has changed relative to its expectation, and how significant that move is in relation to the cross-section of expectations. Information ratio is a good place to start.
Yuval,
I have a strategy that has done well with this out-of-sample (lower is better). I am hesitant to expand on this as I have not looked at it recently—could be that if I backtested it again I would find that it is doing well for other reasons: it runs on auto rebalance.
If your trading costs remain that low then low-turnover has little (or much less) advantage: as you have already said.
Yuval, I might add, back when I was looking at short term mean reversion in amibroker, as a trading signal I found there was maybe something to sequential trending of the type shown in my post above (successive down trends or successive uptrends). It was a long time ago, and not really a factor, but if certain patterns of successive extended down trends existed then the next day had better than even chance of going up. (accounting for trend in lower highs and lower lows also seemed to have signal). Same for uptrends - except in opposite direction. I haven’t put in ranking model because it’s so short term in nature and slippage eats up so much, but for very high turnover might would consider in system for highly liquid stocks where I wouldn’t impact price and can catch open price at almost 0 slippage.
I guess beware the big daggers from these type signals. One gutkick I remember was SUNE acting this way on it’s rapid decent towards bankruptcy. From memory I think often that kind of trend started just before bad news became public also. P123 probably provides ways to avoid some of those though.
Well, I do like to share, and thanks for the other people who do too.
After doing some experimenting, the things that seem to have the most potential for me are:
average(rsi(2),rsi(5))
loopmedian(“close(ctr)/close(ctr+1)”,5,0)
(close(0)/close(5))/pctdev(5,1)
and the best of all: loopmedian(“close(ctr)/close(ctr+1)”,5,0)/pctdev(5,1)
All with lower values better, of course. Offsetting by a day didn’t help, nor did going to 13 days. Going down to 2 days did help for some time frames but not for others.
Caveat: that’s with my universe, my ranking system, no slippage. I’m sure these won’t work that well for others.
Thanks everyone for sharing generously. I have not had success with mean reversion with my models on the buy side. However, I have found exiting on a spike after the original condition is met has improved my performance in most cases - for e.g. my original sell rule was rankpos > 100 for a 20 stock portfolio and changing it to Eval(rankpos > 50, close(0) > sma(5), rankpos > 100) improved the results vs. using rankpos > 50 or rankpos > 100.
I am not sure if this is curve fitting on my style of models but would like to hear if the same pattern holds for others.
Yuval, I’m impressed that you can get such low slippage on small stocks and still get your trades through. Low slippage would seem to open the door to so many opportunities. I’ve been getting annoyed with several picks that run away from me if I try to be careful w slippage, but still learning the ropes on that front.
I am more likely to share if I know and trust the counter-parties. Hiding behind a paywall is one way to do this, but a paywall is not my ultimate criteria for trust.
I place a limit order below the previous close for a buy and above it for a sell the night before I want to trade, guessing based on the previous few day’s price movements what I might get for a fill in the morning. If it doesn’t get a partial fill, I’ll move it a little closer to the price at around noon EST. If it still doesn’t get filled, I’ll go with the more favorable of bid/ask at around 2, then midpoint between bid/ask at 3, then if still no fill I get a guaranteed fill by placing the limit at bid or ask at around 3:30. If it’s a partial fill I’ll just leave it alone and try again the next day. If the price has moved significantly against me, compared to the other stocks I own, I abandon the order and only place it the next day if my system still tells me to.
Yes. I’ve made a couple of minor improvements involving breaking up orders into smaller quantities, taking advantage of Fidelity’s price improvement practices, and not always abandoning partial fills.