I am starting a strategy optimization and need some input. The strategy will be optimized for candidates that are good turnaround candidates, so in contrast to momentum.
The rule will be implemented in the universe.
But does anyone have any input on a rule for finding companies that have fallen a lot in the recent period and that may be good turnaround candidates to look at? I think candidates with extreme falls in a very short time are not the best, and I'm a bit unsure about the time period. Should the fall have occurred over 6 months, a year, or several years?
Another issue I'm somewhat uncertain about how to address: I assume that if I have mechanical rules, such as looking at the 30% lowest performers in terms of return, I will get a high turnover in the underlying universe being tested. And since these tests are not run in a "force into universe" manner, I might get some strange results, right?
Are there any additional suggestions beyond this that also ensure that there are enough stocks remain in the universe, providing me with enough to conduct a thorough test?
FRank("Close(0)/Close(125)",#All,#ASC)<30
1 Like
Your question peaked my interest and I spend a few minutes playing around with a concept I tried several years ago in a different context. The starting rule was:
Between(FRank("HighPct(250)",#PREVIOUS,#DESC), 80, 100)
This picks up the largest current declines from the high over the last year. Then decent current Momentum, a Value Ranking System, about a 10% Rank Tolerance, and 4 week review period produced creditable results with limited downside.
Have Fun,
Rich
2 Likes
I think the 6-12 month lookback is your best bet here. Shorter than that and you're mostly catching blowups (fraud, delisting, that kind of thing). Longer than 2-3 years and you get deep into value trap territory where the stock is cheap because the business genuinely deteriorated.
One thing worth doing is filtering out stocks still in freefall. Your FRank rule picks up the losers, but some of those are mid-crash and you don't want to be stepping in front of that.
Something like:
// Bottom 30% over 6 or 12 months
FRank("Close(0)/Close(125)", #All, #DESC) < 30
OR
FRank("Close(0)/Close(251)", #All, #DESC) < 30
// But not bottom 10% over last month (still crashing)
AND FRank("Close(0)/Close(21)", #All, #DESC) > 10
The idea is simple: you want stocks that have already taken the hit, not ones where the hit is still happening.
1 Like
It should be #DESC : FRank("Close(0)/Close(125)",#All,#DESC)<30
What about this filter: Rating("Core: Value") > 90 // deep value
Change in price, especially in long period, is useless indicator/filter.
Short-term changes (1-3 days) related to market panic/fear may be a better filter.
1 Like
Yeah, #DESC… my mistake too. Fixed it in the post.
1 Like
Yes, I tend to agree. I've run various tests for the better part of a day, with several thousand simulations, and it's clear that buying stocks based on momentum is not an ideal solution. However, it was worth the attempt to see if I could find some sort of bottom-fishing strategy.