Stocks A to Z / Stocks B / Berkshire Hathaway (BRK.A)
No. of Recommendations: 18
Nasdaq 100 monthly Momentum Screen.
This is the GTR1 backtest statistics for a simple Momentum Screen. The object was to test a screen that has parameters which are easily and readily available.
Nasdaq 100 stocks, monthly, top 10 by 52 week price gain. 10 HTD 12
Using Total Return instead of Price-only Return did not make any noticible difference. Total return incorporates dividends, but these stocks seem to pay very small or no dividend, so the effect of the dividend is negligible.
These figures are for the lowest CAGR cycle of the 21 cycles. This was done by downloading the "Daily Closing Portfolio Values" into a spreadsheet, reducing it down to monthly, and computing the statistics from that data.
First section below is two long-term periods of interest.
Next are the statistics of 10 year periods, starting every 5 years, for the entire 40 year history of the Nasdaq 100.
No attempt at timing. Statistics with timing are in a following post.
Note that even though the long term returns are exceptional, there is one decade, 2000 to 2010, that had a loss. That the loss was not as bad as the loss of SPY and QQQ would be little consolation.
Another thing to notice is that this screen has huge drawdowns in every 10-year period. This screen is not for the faint of heart.
Twelve months (252 days) seemed to be the optimal lookback period. Lookbacks of 10 months and 13 months had lower returns.
2/1/1985 - 12/1/2025 9/1/2006 - 12/1/2025
CAGR 22.9% CAGR 19.5%
Stdev 30.2% Stdev 24.9%
MaxDD(12) -66% MaxDD(12) -50%
Sortino 1.35 Sortino 1.31
-------------------------------------------------
2/1/1985 - 2/1/1995
CAGR 31.0%
Stdev 28.6%
MaxDD(12) -37% 2/1/1990 - 2/1/2000
Sortino 1.91 CAGR 47.6%
Stdev 33.3%
MaxDD(12) -25%
2/1/1995 - 2/1/2005 Sortino 2.97
CAGR 24.0%
Stdev 40.4%
MaxDD(12) -66% 2/1/2000 - 2/1/2010 SPY: -0.81%
Sortino 1.11 CAGR -1.3% QQQ: -7.01%
Stdev 33.7%
MaxDD(12) -66%
2/1/2005 - 2/2/2015 Sortino -0.07
CAGR 15.9%
Stdev 22.8%
MaxDD(12) -50% 2/1/2010 - 2/3/2020
Sortino 1.09 CAGR 24.6%
Stdev 20.5%
MaxDD(12) -22%
2/2/2015 - 12/1/2025 Sortino 2.05
CAGR 21.4%
Stdev 26.3%
MaxDD(12) -40% 2/3/2020 - 12/1/2025
Sortino 1.45 CAGR 20.2%
Stdev 30.8%
MaxDD(12) -40%
Sortino 1.17
No. of Recommendations: 14
A few timing methods were applied to the backtest data in the spreadsheet.
As is typical, timing lowered the overall CAGR while moderating the huge drawdowns.
It seemed sensible to use QQQ as the underlying base. Particularly the "no new 99 day high in the last 99 days" rule. This wasn't all that great.
The best method turned out to be GTT timing, which is the 10 month SMA of the S&P500, gated by two FRED economic indexes.
The CAGR in most of these 10 year periods is slightly lower than the untimed version, but the decade 2000-2010 is now a positive return instead of a loss.
Nontheless there are still very large drawdowns in all the periods. The primary benefit of using timing at all with this screen is to avoid what happened in that period.
2/1/1985 - 12/1/2025 9/1/2006 - 12/1/2025
CAGR 22.4% CAGR 20.4%
Stdev 27.5% Stdev 22.2%
MaxDD(12) -52% MaxDD(12) -36%
Sortino 1.47 Sortino 1.59
-------------------------------------------------
2/1/1985 - 2/1/1995
CAGR 21.5%
Stdev 25.2%
MaxDD(12) -36% 2/1/1990 - 2/1/2000
Sortino 1.42 CAGR 39.0%
Stdev 32.1%
MaxDD(12) -25%
2/1/1995 - 2/1/2005 Sortino 2.50
CAGR 29.2%
Stdev 37.8%
MaxDD(12) -52% 2/1/2000 - 2/1/2010
Sortino 1.51 CAGR 7.3%
Stdev 28.5%
MaxDD(12) -52%
2/1/2005 - 2/2/2015 Sortino 0.44
CAGR 20.9%
Stdev 19.6%
MaxDD(12) -22% 2/1/2010 - 2/3/2020
Sortino 1.73 CAGR 23.2%
Stdev 20.4%
MaxDD(12) -22%
2/2/2015 - 12/1/2025 Sortino 1.95
CAGR 18.5%
Stdev 24.4%
MaxDD(12) -36% 2/3/2020 - 12/1/2025
Sortino 1.36 CAGR 17.0%
Stdev 27.8%
MaxDD(12) -36%
Sortino 1.11
No. of Recommendations: 5
Total return incorporates dividends, but these stocks seem to pay very small or no dividend, so the effect of the dividend is negligible.
gprc also includes adjustments for splits, aprc does not.
Aussi
No. of Recommendations: 4
gprc also includes adjustments for splits, aprc does not.
gprc, per se, is not an investable parameter. It is unique to GTR1.
aprc is based on gtoa.a and grpc. "gtoa.a's main purpose is detecting and correcting for stock splits"
Which seems to imply that aprc DOES account for splits.
(FWIW, I get dizzy trying to follow the field definitions in the GTR1 documentation.)
Regardless, ignoring splits would give a stock a *lower* computed momentum and would thus incorrectly exclude a strong stock rather than incorrectly include a weak stock.
It doesn't matter anyway. The results are virtually identical.
Here is using gprc:
Avg Min Max
CAGR: 24.737926 23.116436 26.071377
MDD: -73.0342 -77.28851 -69.429611
UI(252): 16.658768 13.004523 20.505390
Here is using aprc:
Avg Min Max
CAGR: 24.519554 22.958212 26.837484
MDD: -72.663345 -79.246208 -67.261589
UI(252): 14.280787 11.270746 19.41403
No. of Recommendations: 4
My chatgpt testing showed 9 month lock-back was best.
Also my SPY>325daySMA as timing rule helped on most metrics.
Hold til drop did not help (except if you only bought the #1 stock, in which case holding as long as it was in the top 5 helped).
No. of Recommendations: 1
My chatgpt testing showed 9 month lock-back was best.
Also my SPY>325daySMA as timing rule helped on most metrics.
Hold til drop .........
Would you post your instructions to chatgpt?
What do you think about Claude vs chatgpt?
Thanks
No. of Recommendations: 8
My chatgpt testing showed 9 month lock-back was best.
Also my SPY>325daySMA as timing rule helped on most metrics.
Hold til drop did not help (except if you only bought the #1 stock, in which case holding as long as it was in the top 5 helped).Well, you gave me something to do on a lazy afternoon. ;-)
Good thing I have a spreadsheet all set up.
Dates 2/1/1985 to 11/28/2025
Top 10, no HTD, no timing
Stats for cycle 0 (not necesssarily the worst cycle)
189 day (9 month) lookback
CAGR 22.5%
Stdev 29.5%
MaxDD(12) -56%
Sortino 1.38
252 day (12 month) lookback
CAGR 24.3%
Stdev 30.6%
MaxDD(12) -63%
Sortino 1.44
------------------
Okay, the lowest cycle. For each.
189 day (9 month) lookback
CAGR 21.8%
Stdev 29.7%
MaxDD(12) -57%
Sortino 1.33
252 day (12 month) lookback
CAGR 23.2%
Stdev 30.7%
MaxDD(12) -69%
Sortino 1.37
====================================================
with TIMING
252 day (12 month) lookback, WITH various SMA lengths of the S&P500
lowest cycle
Note, this timing was done in the spreadsheet of the daily values
given by GTR1, and not in GTR1 itself.
The timing is applied at the end of each month, for the upcoming month.
43 week (10 month, 215 days) SMA
CAGR 20.0%
Stdev 23.9%
MaxDD(12) -38%
Sortino 1.61
52 week (12 month, 252 days) SMA
CAGR 22.8%
Stdev 26.1%
MaxDD(12) -33%
Sortino 1.79
65 week (15 month, 325 days) SMA
CAGR 23.3%
Stdev 26.7%
MaxDD(12) -33%
Sortino 1.70
-- and --
GTT timing (using 43 wk SMA)
CAGR 22.8%
Stdev 28.0%
MaxDD(12) -57%
Sortino 1.50
GTT timing (using 52 wk SMA)
CAGR 23.0%
Stdev 28.1%
MaxDD(12) -57%
Sortino 1.52
GTT timing (using 65 wk SMA)
CAGR 23.5%
Stdev 28.2%
MaxDD(12) -57%
Sortino 1.53
The way GTT timing works is by ignoring the SMA sell signal as long as
the two FRED indexes show the economy is doing okay.
But this might not be optimal for a very high volatility Momentum screen
such as this. A -33% drawdown is not as bad as a -57% drawdown.
==========================================================
About HTD ...
no HTD
CAGR 24.625883
GSD 37.881401
AT 3.075992
HTD12
CAGR 24.519554
GSD 38.160969
AT 2.464888
HTD13
CAGR 24.165035
GSD 37.885078
AT 2.258616
HTD15
CAGR 23.485237
GSD 37.780560
AT 1.968801
A small HTD reduces the turnover with little effect on the return.
No. of Recommendations: 2
Looks like gtt yielded a net **cost** relative to pure sma (15 month).
Am I reading that right, much greater draw down?
No. of Recommendations: 8
Looks like gtt yielded a net **cost** relative to pure sma (15 month).
Am I reading that right, much greater draw down?
Basically, yes.
In a way, as Elan pointed out once, MaxDD can be misleading since it only is the ONE-TIME absolute worst datapoint. That could be just a once-time out-of-the-ordinary occurrence which doesn't give a picture of how things behaved overall.
What if the MaxDD was -57% while the next 10 worst were all -20%? Is that worse than a MaxDD of -33% while the next 10 worst were all -30%? Which would you call the better one?
The thing about huge drawdowns in a strategy that has good overall returns is that you might not be able to stand the pain and throw in the towel, and thus miss out for the subsequent huge gains.
I think the Sortino Ratio is a better risk metric, as it measures the combined downside excursions. The Sortino ratio measures the risk-adjusted return. I use 0% as the MAR. A Sortino ratio greater than 1 is generally considered good.
So Sortino of 1.79 vs. 1.52 -- and MaxDD -33% vs. -57% -- with only 0.2% lower CAGR is probably preferable.
Don't forget than there is a lot of false accuracy in these numbers. There is a large variance in the CAGR numbers with only 1 or 2 days difference in start date. So all reported CAGRs from, say, 20% to 24% are functionally the same.
But that's the reason that I used the GTR1 cycle with the lowest CAGR.
No. of Recommendations: 4
my instructions to Chatgpt when on for days trying every permuation. RSI, one week return, beta, up/down days, recent upticks, essentially everything. Too many prompts to paste here. Some improved CAGR at the cost of much longer recovery periods, others at the expense of MDD, etc.
9-12 months all worked; 300-250 day SMA on SPY all worked as a timing tool and really helped most metrics with little cost in CAGR.
No. of Recommendations: 3
and don't forget I only used data to 10/1993, not gtr's 1985 date.
No. of Recommendations: 10
I generally prefer to look at the worst outcomes rather than average or median. Better for surprises to be happy than sad.
Your sessions with Chatgpt sounds like you pretty well covered all bases. Much more exhaustive than my timing test with spreadsheets & GTR1 values. But I found the same conclusion -- there is a wide range of parameters that work pretty well. Never forgetting that what worked absolutely best in the past was tuned for that past and likely won't be best in the future.
For this simple momentum screen I finally settled on a simple timing method that is just a small difference from what I already have automated.
Sell when the current S&P500 drops 1% below the 52 week SMA. Buy when it rises above the SMA. There needs to be a slight difference so that you don't get whiplash when it is right at the crossover point. 4% below works better with other screens, but in such a high volatility screen like this, 4% is too wide; you want to be quicker.
The BIG thing this timing did was in the 5 years 2/1/2000 to 2/1/2005. Where none of the other timings did nearly as well.
Untimed was -8.4% CAGR with -66% MaxDD.
Timed was +14.4% with -18% MaxDD.
That's the difference between jumping out the window and downgrading restaurant dining to McDonald's.
No. of Recommendations: 3
I see a typo in my response. 300 to 350 days SPY>SMA all worked for a timing add-on to a base 9month lookback, and picking 1,5, or 10 all worked but #1 only had massive risk so holding on would be hard. But MDD to recover days was 1/2 the time to wait vs. the MDD to recovery of QQQ.
1. Core continuous data
Strategy CAGR Sharpe Max DD
Mom 1 33.7% 0.780 -81% only buying top 1 stock by 9 month momentum
Mom 1 timed 37.0% 0.855 -76% Same but go to cash next month if SPY<325 day SMA
Mom 5 23.8% 0.742 -69%
Mom 5 timed 23.6% 0.790 -50%
Mom 10 21.2% 0.735 -71%
Mom 10 timed 21.8% 0.813 -48%
SPY 10.5% 0.626 -55%
QQQ 10.0% 0.488 -83%
2. Worst rolling returns
Strategy Worst 1Y Worst 3Y Worst 5Y Worst 10Year period
Mom 10 timed -25.5% -4.8% 1.8% 5.1%
SPY -43.3% -14.5% -2.3% 1.2%
QQQ -67.6% -25.0% -9.4% 0.7%
worst-case 5-year and 10-year outcomes beat the market
3. Start-date sensitivity test
“first trading day of any month” test is excellent.
Strategy Avg Start CAGR Worst
Mom 1 timed 28.0% 3.8%
Mom 5 timed 18.2% 6.4%
Mom 10 timed 16.9% 7.1%
SPY 11.3% 4.1%
4. Lookback period
Top-1 best: ~18 month momentum lookback
Top-10 best: ~9 month momentum lookback
1-month holding period best
5. Profit concentration
Top winners' contribution:
Strategy Top 1% Top 5% Top 10%
Mom 10 9.4% 27.0% 39.3%
The strategy was not dependent on one giant winner.
6. Drawdown improvement from timing filter
Strategy Max DD
Mom 10 -71.6%
Mom 10 timed -48.0%
That’s a massive improvement.
But importantly:
timing did not always improve CAGR
But worst 10-year returns still beat SPY
No. of Recommendations: 8
Surely we aren't the only people who have taken notice of this strategy. It does not seem possible that others would not have noticed and the extraordinary gains would have been arbitraged away. What am I missing? Is it just the volatility risk?
Below is the top 20 of Nasdaq 100 sorted by 1 year price gain, as of this morning.
Ticker Perf_YTD Perf_Year
SNDK 559.51% 4048.26%
WDC 200.36% 1073.30%
MU 174.16% 811.36%
STX 201.68% 768.04%
AMD 115.21% 348.16%
LRCX 74.00% 295.24%
AMAT 72.96% 185.64%
MRVL 97.28% 181.05%
KLAC 55.13% 168.82%
GOOGL 26.06% 158.31%
GOOG 24.71% 153.50%
MPWR 78.27% 153.35%
ASML 43.99% 118.13%
AVGO 24.00% 106.14%
ADI 52.99% 99.94%
NVDA 17.27% 87.49%
ARM 94.95% 84.03%
DDOG 45.53% 83.44%
MCHP 53.88% 77.21%
BKR 41.05% 76.03%
Isn't the difference between GOOGL and GOOG interesting?
It sure feels like this should be some kind of anomaly, so many stocks doubling or more in a year.
The same table for the S&P 500 is similar, but the #20 stock is up 158%. SNDK is still #1.
No. of Recommendations: 4
I have made a massive CAGR since mentioning the strategy so it has not been arbitraged away; these companies have huge market caps and are pieces in other types of chess boards. MU, SNDK, INTC have made me lots of money. Up over 300% in MU, over 100% in INTC in one month.
No. of Recommendations: 0
Great results!
Maybe I misunderstood the strategy but wouldn't the 21 day rebalance have taken you out of those positions?
No. of Recommendations: 2
I am not rebalancing; most of the big winners continue to be in the list the next month.
Up 389% in MU now.
I let the winners run; in my backtest I ordered AI to rebalance monthly.
No. of Recommendations: 2
Maybe I misunderstood the strategy but wouldn't the 21 day rebalance have taken you out of those positions?
I don't rebalance the existing positions. Only equal weight the new stocks.
Rebalancing existing positions inevitably means sells down existing positions, which essentially means selling down winners. Which is the wrong thing to do.
No. of Recommendations: 0
Just to understand it fully. Are we talking about running the screen monthly or 21 calendar days (3 weeks)??
Thanks,
AJ
No. of Recommendations: 4
Just to understand it fully. Are we talking about running the screen monthly or 21 calendar days (3 weeks)??
Market days.
All the standard SMA periods are market days. 200 day SMA, 50 day... all are "trading days"
5 days/week times 4.25 weeks/month = 21.25 days.
Subtract a little bit to account for weekdays where the market is closed is very close to 21.
No. of Recommendations: 3
In my tests you didn't get that much variance and it will be chance if by coincidence you pick the worst vs. the best start day.
I don't want to keep track myself of how many days it's been so for memory I shoot for the 1st calendar day of each month no matter what I had backtested; I don't criticize myself if I miss a day, either. There will be randomness on whether you trade on a crazy day or at a crazy moment; with 25% CAGR you can cover a lot of error and randomness.
No. of Recommendations: 3
Sorry, so we understand.
This is top 10 NDX100 by price performance (9 or 12 month trailing).
Buy and own iff we are above 10 month MA or your 300-325 day MA.
Check once a month.
HTD 12 or 15, so maybe add an issue or two, drop an issue or two if bullshit (over MA).
No. of Recommendations: 0
my instructions to Chatgpt when on for days trying every permuation. RSI, one week return, beta, up/down days, recent upticks, essentially everything.
Thank you musselmant,
Did you, in your instructions, look at timing with NH-NL? What was the result?
If not, how would you set up your instruction for this timing method? (trying to learn how to work with AI for a mechanical backtest from a respected source.)
Thanks
No. of Recommendations: 4
yes
This is top 10 NDX100 by price performance 9 months trailing (9 to 12 months all worked).
Buy each month (and continue to own unchanged stocks) if SPY is above its 325 trading day MA (300-325 day MA all worked).
Check once a month.
My HTD using ChatGPT did not provide extra return (except for people just buying the #1 stock, in which case holding it as long as it continued in the #1-5 position did improve return).
However others using gtr have HTD strategies.
Gtr allows backtesting to 1985 but it ends 11/2025.
My data starts 10/1993 instead and continues to last month.
So there can be differences between the two.
I got new data and used AI to double-check gtr and bring it forward from 11/2025 but could not get data back to 1985.
But the core of the strategy checked out using either, which was my goal. GTR did not share data, just outcomes; I wanted to see myself if we could duplicate the outcome with checkable data.
We did.
Despite the backtesting using monthly rebalancing so you own equal dollar amounts at the start of each month, in practice I let winners ride, which has paid off handsomely as MU, STX, INTC etc. soared.
No. of Recommendations: 3
Yes I ran NH/NL and other timing strategies but a simple SPY>325daySMA won
No. of Recommendations: 3
Yes I ran NH/NL and other timing strategies but a simple SPY>325daySMA wonAnd the funny thing is, the seemingly natural index to use would be QQQ (or ^IXIC on yahoo), since that is the Nasdaq 100.
But SPY (^GSPC) as the SMA index works better.
But...
the primary benefit of a good timing scheme does in this screen is to move you out of the market in the 2000-2005 period. In all the other 5 year periods, timing is kind of a
meh. Most had slightly worse results.
Of course, the thing is, you don't know ahead of time when the bottom might drop out.
For the eight 5-year periods starting in 1985:
Untimed Timed
24.6% 24.8% << -- average
24.6% 16.6% << -- median
There is another thing. Look at a chart for the Nasdaq 100 for 1995 to 2005. It was a huge ramp up and then a crash. The crash basically reversed the ramp up.
For this screen (GTR1 backtest, untimed):
2/1995 - 2/2000: CAGR 67.8%
2/2000 - 2/2005: CAGR -8.4%
2/1995 - 2/2005: CAGR 24.0%
Value on 1/2/1995: $149
Value on 2/1/2005: $1281
Peak value, 9/1/2000: $3251
Not too shabby overall. Almost 10X your money. Minus what you spent on Tums & sleeping pills.
Okay, with timing:
Value on 1/2/1995: $76
Value on 2/1/2005: $1997
Peak value, 9/1/2000: $2095
But look what the timing did for you from 1985 to 1995. Not so good.
Hmmm, maybe it would be better overall to have a looser sell signal.
No. of Recommendations: 4
I suspect as you found, that any time rule you come up with will whipsaw you in some (even long) periods, and others delay too late in other (also even long, or perhaps just randomly useful) periods.
I have long been suspicious of the timing discussions on this board for that reason. How to really prove statistical "truths"? If you miss one crash you feel victorious but is the timing rule really valid if you do?
I don't know.
Almost no one has the stomach to keep going after horrible crashes and multi-year recovery periods.
But I remember what it was like to practice law, so have despite the pain, since it beats going to work.
Will timing help?
If only I could go back to high school and ask Mary Lou out....
No. of Recommendations: 5
This last few months is partying like it's 1999 all over again (literally), and ol' R S I B D.
FC
disappointed I've missed the bubble
No. of Recommendations: 3
FC
disappointed I've missed the bubble
There is always the bubble ahead of you.
'course, the bubble ahead might turn out to be like AJG the minute I bought it.