You got me hooked (again) on seasonality. I did a lot of it 20 years ago on the DJIA using calendar months, option months, and moon cycles (!).
Using just the P123 screener and its backtester, this is the best I’ve found so far, which just alternates between three ETFs:
showVar(@1, 0)
showVar(@1, @1 + 10 ^ 0 * (Ticker("TLT") AND InSet(Month,5,6,7,8,9)))
showVar(@1, @1 + 10 ^ 1 * (Ticker("GLD") AND InSet(Month,1,2)))
showVar(@1, @1 + 10 ^ 2 * (Ticker("XLB") AND InSet(Month,3,4,10,11,12)))
@1 > 0
That gives a CAGR of 23.46% since the start of 1999.
I started looking at that because the five ETFs (“XLP,XLV,XLU,VIG,IEI”) you held from May thru Sept only had a CAGR of 1.11% as a group. That just didn’t seem very good. GLD (3.4%), TLT (5.4%), and IEI (2.5%) did better on their own, but I wasn’t using a filter to choose the best of the five each for each year’s selection since I didn’t know your criteria.
And, in my testing, it appears Jan and Feb were not good months for most ETFs either, so I was looking for something with little correlation with stocks for those months as well. I even started looking at some country ETFs.
I also got some interesting results doing tests on stocks using SECTOR= criteria, and then choosing the best five from the “sectors of the month”. For example, one rule looks like like:
showVar(@1, @1 + 10 ^ 7 * (Sector=MATERIALS AND InSet(Month,3,4,11,12)))
I didn’t limit the exchanges or stock sizes, but I did add an easily changeable liquidity filter which makes sure at least $2M worth of the stock traded every day for the past 50 days:
LoopMin("Vol(CTR) * Close(CTR)", 50) > 2000000 // Liquidity check
=======================================================================
As for the seasonality tests I did 20 years ago, see here for a postmortem I did in 2009 of the “systems” I developed in 1998. The backtesting and forward results did well on the “OC3” system, which had these rules:
[list=1]
[]If month is Mar, Apr, May, Nov, or Dec, then “In” the market
[]If day of option month is -7 or -8 or 1 (7th and 8th before expiration, and day after), then “Out” of the market
[]If month is Sep, then “Out” of the market
[]If any other trading day, then “In” the market[/list=1]
Not sure what I’d do with “option month” criteria today, since the most heavily traded stocks now have weekly options.