exp_1182

Recovery Quality Contrarian 52-Week Hybrid (Quality Quorum Switchboard, v1182)

← All V2 experiments
Relative return
1.088x
Excess vs bench
8.80%
Benchmark
CAPW_UNIV
Rolling windows
179 · monthly
Mean strategy gain
24.13%
Mean benchmark gain
14.08%
Mean excess gain
10.05%
Dispersion (ref)
8.85%
Win-rate vs bench (ref)
87.71%
Worst / best ratio (ref)
0.965x / 1.188x
Logic variants
3
Updated
Jul 21, 2026
Anchored windows (reference — strategy vs benchmark)
Kept from V1 for continuity; the objective ranks on the full rolling set, not these four.
WindowStrategyBenchmarkRatio
2006-07-03 … 2011-06-30 14.79% 2.22% 1.123x
2011-07-01 … 2016-06-30 28.38% 13.74% 1.129x
2016-07-01 … 2021-06-30 23.45% 20.63% 1.023x
2021-07-01 … 2026-06-26 32.62% 15.48% 1.148x
All rolling windows — the objective set (equal-weighted mean ratio)
Strategy Benchmark (CAPW_UNIV) Excess
2006200720082009201020112012201320142015201620172018201920202021 -10%0%10%20%30%40%50%
rolling 5y windows, monthly step — 179 windows · mean ratio 1.088x · beat benchmark in 157/179
#WindowStrategyBenchmarkRatio
1 2006-07-31 … 2011-07-29 13.71% 1.79% 1.117x
2 2006-08-31 … 2011-08-31 14.14% 0.21% 1.139x
3 2006-09-29 … 2011-08-31 14.16% -0.14% 1.143x
4 2006-10-31 … 2011-10-31 12.59% 0.23% 1.123x
5 2006-11-30 … 2011-11-30 11.63% -0.05% 1.117x
6 2006-12-29 … 2011-11-30 11.44% -0.32% 1.118x
7 2007-01-31 … 2012-01-31 11.69% 0.93% 1.107x
8 2007-02-28 … 2012-01-31 11.33% 1.43% 1.098x
9 2007-03-30 … 2012-03-30 13.56% 3.09% 1.102x
10 2007-04-30 … 2012-04-30 12.00% 2.42% 1.094x
11 2007-05-31 … 2012-05-31 10.80% 0.60% 1.101x
12 2007-06-29 … 2012-06-29 11.41% 1.92% 1.093x
13 2007-07-31 … 2012-07-31 11.93% 2.69% 1.090x
14 2007-08-31 … 2012-08-31 11.39% 2.95% 1.082x
15 2007-09-28 … 2012-09-28 10.42% 3.20% 1.070x
16 2007-10-31 … 2012-10-31 10.11% 2.60% 1.073x
17 2007-11-30 … 2012-11-30 12.03% 3.45% 1.083x
18 2007-12-31 … 2012-12-31 12.53% 3.69% 1.085x
19 2008-01-31 … 2013-01-31 14.91% 5.85% 1.086x
20 2008-02-29 … 2013-02-28 14.81% 6.82% 1.075x
21 2008-03-31 … 2013-03-28 17.52% 7.73% 1.091x
22 2008-04-30 … 2013-04-30 17.08% 7.51% 1.089x
23 2008-05-30 … 2013-04-30 16.24% 7.81% 1.078x
24 2008-06-30 … 2013-06-28 24.64% 9.33% 1.140x
25 2008-07-31 … 2013-07-31 27.16% 10.48% 1.151x
26 2008-08-29 … 2013-07-31 27.96% 10.52% 1.158x
27 2008-09-30 … 2013-09-30 30.38% 11.48% 1.169x
28 2008-10-31 … 2013-10-31 33.42% 15.76% 1.153x
29 2008-11-28 … 2013-10-31 34.92% 17.46% 1.149x
30 2008-12-31 … 2013-12-31 36.66% 18.44% 1.154x
31 2009-01-30 … 2013-12-31 38.90% 20.64% 1.151x
32 2009-02-27 … 2014-01-31 40.19% 21.63% 1.153x
33 2009-03-31 … 2014-03-31 41.15% 20.60% 1.170x
34 2009-04-30 … 2014-04-30 38.33% 19.00% 1.162x
35 2009-05-29 … 2014-04-30 38.39% 18.32% 1.170x
36 2009-06-30 … 2014-06-30 40.20% 19.01% 1.178x
37 2009-07-31 … 2014-07-31 37.75% 17.39% 1.173x
38 2009-08-31 … 2014-08-29 38.08% 17.70% 1.173x
39 2009-09-30 … 2014-09-30 36.83% 16.64% 1.173x
40 2009-10-30 … 2014-09-30 38.39% 17.08% 1.182x
41 2009-11-30 … 2014-11-28 35.29% 16.82% 1.158x
42 2009-12-31 … 2014-12-31 33.54% 16.28% 1.148x
43 2010-01-29 … 2014-12-31 36.18% 17.23% 1.162x
44 2010-02-26 … 2015-01-30 35.13% 15.80% 1.167x
45 2010-03-31 … 2015-03-31 34.72% 15.40% 1.167x
46 2010-04-30 … 2015-04-30 32.41% 15.38% 1.148x
47 2010-05-28 … 2015-04-30 34.89% 17.09% 1.152x
48 2010-06-30 … 2015-06-30 38.86% 17.45% 1.182x
49 2010-07-30 … 2015-06-30 38.29% 16.43% 1.188x
50 2010-08-31 … 2015-08-31 34.17% 15.76% 1.159x
51 2010-09-30 … 2015-09-30 31.54% 13.61% 1.158x
52 2010-10-29 … 2015-09-30 30.83% 13.06% 1.157x
53 2010-11-30 … 2015-11-30 29.97% 15.09% 1.129x
54 2010-12-31 … 2015-12-31 28.24% 13.55% 1.129x
55 2011-01-31 … 2016-01-29 25.71% 11.90% 1.123x
56 2011-02-28 … 2016-01-29 24.73% 11.53% 1.118x
57 2011-03-31 … 2016-03-31 26.02% 12.90% 1.116x
58 2011-04-29 … 2016-04-29 24.94% 12.39% 1.112x
59 2011-05-31 … 2016-05-31 26.21% 12.94% 1.117x
60 2011-06-30 … 2016-06-30 27.38% 13.30% 1.124x
61 2011-07-29 … 2016-07-29 27.94% 14.52% 1.117x
62 2011-08-31 … 2016-08-31 26.95% 15.19% 1.102x
63 2011-09-30 … 2016-09-30 28.39% 16.32% 1.104x
64 2011-10-31 … 2016-10-31 26.18% 14.02% 1.107x
65 2011-11-30 … 2016-11-30 27.71% 14.66% 1.114x
66 2011-12-30 … 2016-12-30 25.50% 14.92% 1.092x
67 2012-01-31 … 2017-01-31 26.47% 14.63% 1.103x
68 2012-02-29 … 2017-02-28 26.06% 14.78% 1.098x
69 2012-03-30 … 2017-02-28 25.18% 14.43% 1.094x
70 2012-04-30 … 2017-04-28 24.19% 14.61% 1.084x
71 2012-05-31 … 2017-05-31 26.55% 15.98% 1.091x
72 2012-06-29 … 2017-05-31 26.27% 15.44% 1.094x
73 2012-07-31 … 2017-07-31 26.14% 15.43% 1.093x
74 2012-08-31 … 2017-08-31 25.11% 15.12% 1.087x
75 2012-09-28 … 2017-08-31 24.98% 14.77% 1.089x
76 2012-10-31 … 2017-10-31 24.43% 16.12% 1.072x
77 2012-11-30 … 2017-11-30 23.42% 16.79% 1.057x
78 2012-12-31 … 2017-12-29 23.61% 16.93% 1.057x
79 2013-01-31 … 2018-01-31 25.30% 17.57% 1.066x
80 2013-02-28 … 2018-02-28 23.17% 16.21% 1.060x
81 2013-03-28 … 2018-02-28 21.47% 15.81% 1.049x
82 2013-04-30 … 2018-04-30 20.21% 14.25% 1.052x
83 2013-05-31 … 2018-05-31 16.02% 14.57% 1.013x
84 2013-06-28 … 2018-05-31 15.92% 14.97% 1.008x
85 2013-07-31 … 2018-07-31 14.45% 14.83% 0.997x
86 2013-08-30 … 2018-07-31 14.63% 15.59% 0.992x
87 2013-09-30 … 2018-09-28 19.72% 15.84% 1.034x
88 2013-10-31 … 2018-10-31 15.75% 12.89% 1.025x
89 2013-11-29 … 2018-10-31 14.99% 12.60% 1.021x
90 2013-12-31 … 2018-12-31 11.33% 9.93% 1.013x
91 2014-01-31 … 2019-01-31 11.87% 12.37% 0.996x
92 2014-02-28 … 2019-02-28 9.59% 12.38% 0.975x
93 2014-03-31 … 2019-03-29 11.63% 12.76% 0.990x
94 2014-04-30 … 2019-04-30 13.37% 13.73% 0.997x
95 2014-05-30 … 2019-04-30 13.04% 13.54% 0.996x
96 2014-06-30 … 2019-06-28 12.26% 12.81% 0.995x
97 2014-07-31 … 2019-07-31 13.31% 13.30% 1.000x
98 2014-08-29 … 2019-07-31 12.61% 12.80% 0.998x
99 2014-09-30 … 2019-09-30 12.62% 12.70% 0.999x
100 2014-10-31 … 2019-10-31 12.90% 12.91% 1.000x
101 2014-11-28 … 2019-10-31 12.73% 12.60% 1.001x
102 2014-12-31 … 2019-12-31 12.80% 14.16% 0.988x
103 2015-01-30 … 2019-12-31 12.08% 14.85% 0.976x
104 2015-02-27 … 2020-01-31 11.32% 14.04% 0.976x
105 2015-03-31 … 2020-03-31 5.33% 8.56% 0.970x
106 2015-04-30 … 2020-04-30 9.27% 11.65% 0.979x
107 2015-05-29 … 2020-05-29 9.73% 12.61% 0.974x
108 2015-06-30 … 2020-06-30 9.89% 13.64% 0.967x
109 2015-07-31 … 2020-07-31 11.44% 14.60% 0.972x
110 2015-08-31 … 2020-08-31 14.09% 18.07% 0.966x
111 2015-09-30 … 2020-09-30 12.95% 17.05% 0.965x
112 2015-10-30 … 2020-10-30 12.31% 14.60% 0.980x
113 2015-11-30 … 2020-11-30 17.75% 17.43% 1.003x
114 2015-12-31 … 2020-12-31 19.62% 18.65% 1.008x
115 2016-01-29 … 2021-01-29 22.78% 19.26% 1.029x
116 2016-02-29 … 2021-02-26 26.05% 19.79% 1.052x
117 2016-03-31 … 2021-03-31 24.64% 19.42% 1.044x
118 2016-04-29 … 2021-03-31 25.45% 19.66% 1.048x
119 2016-05-31 … 2021-05-28 24.52% 20.42% 1.034x
120 2016-06-30 … 2021-06-30 23.19% 21.06% 1.018x
121 2016-07-29 … 2021-06-30 23.45% 20.63% 1.023x
122 2016-08-31 … 2021-08-31 26.58% 21.75% 1.040x
123 2016-09-30 … 2021-09-30 24.62% 20.22% 1.037x
124 2016-10-31 … 2021-10-29 26.77% 22.50% 1.035x
125 2016-11-30 … 2021-11-30 24.55% 21.87% 1.022x
126 2016-12-30 … 2021-11-30 25.84% 21.75% 1.034x
127 2017-01-31 … 2022-01-31 21.42% 20.17% 1.010x
128 2017-02-28 … 2022-02-28 21.58% 18.51% 1.026x
129 2017-03-31 … 2022-03-31 23.74% 19.46% 1.036x
130 2017-04-28 … 2022-03-31 23.95% 19.46% 1.038x
131 2017-05-31 … 2022-05-31 23.86% 15.59% 1.071x
132 2017-06-30 … 2022-06-30 21.34% 13.08% 1.073x
133 2017-07-31 … 2022-07-29 21.70% 15.16% 1.057x
134 2017-08-31 … 2022-08-31 22.59% 13.72% 1.078x
135 2017-09-29 … 2022-08-31 22.68% 13.56% 1.080x
136 2017-10-31 … 2022-10-31 24.63% 11.86% 1.114x
137 2017-11-30 … 2022-11-30 24.44% 12.52% 1.106x
138 2017-12-29 … 2022-11-30 24.23% 12.46% 1.105x
139 2018-01-31 … 2023-01-31 21.56% 11.01% 1.095x
140 2018-02-28 … 2023-02-28 22.06% 11.03% 1.099x
141 2018-03-29 … 2023-02-28 22.05% 11.72% 1.092x
142 2018-04-30 … 2023-04-28 21.62% 13.01% 1.076x
143 2018-05-31 … 2023-05-31 23.05% 12.95% 1.089x
144 2018-06-29 … 2023-05-31 24.18% 13.01% 1.099x
145 2018-07-31 … 2023-07-31 27.05% 14.67% 1.108x
146 2018-08-31 … 2023-08-31 23.82% 13.51% 1.091x
147 2018-09-28 … 2023-08-31 23.84% 13.56% 1.091x
148 2018-10-31 … 2023-10-31 20.92% 12.60% 1.074x
149 2018-11-30 … 2023-11-30 23.01% 14.58% 1.074x
150 2018-12-31 … 2023-12-29 26.34% 17.26% 1.077x
151 2019-01-31 … 2024-01-31 26.93% 16.27% 1.092x
152 2019-02-28 … 2024-01-31 26.83% 15.94% 1.094x
153 2019-03-29 … 2024-03-28 32.99% 17.50% 1.132x
154 2019-04-30 … 2024-04-30 30.92% 15.50% 1.134x
155 2019-05-31 … 2024-05-31 33.66% 18.12% 1.132x
156 2019-06-28 … 2024-06-28 32.58% 17.99% 1.124x
157 2019-07-31 … 2024-07-31 31.16% 17.70% 1.114x
158 2019-08-30 … 2024-08-30 31.90% 18.41% 1.114x
159 2019-09-30 … 2024-09-30 34.23% 18.65% 1.131x
160 2019-10-31 … 2024-10-31 33.81% 17.87% 1.135x
161 2019-11-29 … 2024-11-29 36.60% 18.64% 1.151x
162 2019-12-31 … 2024-12-31 33.99% 17.62% 1.139x
163 2020-01-31 … 2025-01-31 36.76% 18.07% 1.158x
164 2020-02-28 … 2025-02-28 37.56% 19.00% 1.156x
165 2020-03-31 … 2025-03-31 37.12% 19.24% 1.150x
166 2020-04-30 … 2025-04-30 33.42% 16.49% 1.145x
167 2020-05-29 … 2025-04-30 32.45% 15.80% 1.144x
168 2020-06-30 … 2025-06-30 32.87% 18.19% 1.124x
169 2020-07-31 … 2025-07-31 31.56% 17.87% 1.116x
170 2020-08-31 … 2025-08-29 31.87% 16.69% 1.130x
171 2020-09-30 … 2025-09-30 36.76% 18.57% 1.153x
172 2020-10-30 … 2025-09-30 37.18% 19.43% 1.149x
173 2020-11-30 … 2025-11-28 31.54% 17.77% 1.117x
174 2020-12-31 … 2025-12-31 33.38% 16.92% 1.141x
175 2021-01-29 … 2025-12-31 32.49% 17.20% 1.130x
176 2021-02-26 … 2026-01-30 34.06% 17.04% 1.145x
177 2021-03-31 … 2026-03-31 32.66% 14.07% 1.163x
178 2021-04-30 … 2026-04-30 32.23% 16.03% 1.140x
179 2021-05-28 … 2026-04-30 33.22% 16.22% 1.146x
Notes
mode=explore; family=recovery-quality-contrarian-52w-hybrid New hybrid family that combines the champion recovery-quality-contrarian stack with the strong bull shallower-sweet-spot logic from contrarian-52w, but changes the arbitration mechanism completely. Instead of a relay or barbell, this script runs a quality quorum switchboard: contrarian 52-week pullbacks, repair/trend evidence, and defensive durability each propose a candidate state, then the active regime decides which state may lead and which must merely confirm. Bull tapes allow shallower pullbacks to outrank only when repair is already visible; transition tapes require a fundamental quorum before deep drawdowns can compete; defensive tapes keep the contrarian sleeve on a short leash and let low-vol income-backed durability arbitrate conflicts. When recovery and contrarian signals disagree, the switchboard classifies the name as a repaired rebound, a sweet-spot pullback, or a falling knife and scores accordingly. Deliberate metric coverage this run: momentum uses return_1m_pct as a shakeout input plus return_3m_pct, return_6m_pct, and momentum_12_1_pct; trend/recovery uses both from_200d_ma_pct and from_52w_high_pct; volatility uses realized_vol_3m; liquidity uses avg_daily_volume_3m and trading_days_3m; income uses dividend_yield_ttm_pct and dividend_ttm; valuation uses pe and peg; growth uses revenue_growth_pct, free_cash_flow_growth_pct, and forward_eps; quality uses operating_margin_pct and free_cash_flow_margin_pct; size uses market_cap as a mild small-cap rebound tilt. Deliberate weight-0 metrics this run: return_12m_pct, avg_daily_dollar_volume_3m, forward_pe, eps_growth_pct, operating_income_growth_pct, shares_outstanding, close, adj_close, high_52w, ma_200d, eps_ttm, revenue_ttm, operating_income_ttm, free_cash_flow_ttm. Correlated momentum and valuation columns are intentionally thinned, and sparse fundamentals are normalized by present evidence so missing coverage does not auto-zero a name.
Lesson notes
#882 · degrade · relative_return Δ -0.3405 · parent exp_1123 · Jul 21, 2026 · auto/explore; benchmark CAPW_UNIV
explore/recovery-quality-contrarian-52w-hybrid: relative_return 1.0880x (delta -0.3405 vs exp_1123); win-rate 87.7095%, worst-window 0.964993, dispersion 8.8549%.
Monthly picks — top stocks selected each month (whole timeline)
timeline — 240 months · top 15 each
Month 123456789101112131415
2006-07-31 MNST GRMN FTI CPB MRK CMI DDS T TEX CME INTU LNT VFC EXPD DGX
2006-08-31 MRK T ILMN AIV KR LH BXP DDS DGX LMT MO L VNO SLG CVS
2006-09-29 T MRK AIV LMT ORCL ILMN AMT TJX BAC BAX VTR AAPL ABT PFE CMCSA
2006-10-31 AIV KSS BKNG MA AKAM KMX CRM T M APH HAS IT MAT MAY MRK
2006-11-30 ALGN MAT GS HAS NEE CMCSA HOG CF ES VNO APH REGN CSCO AIV OKE
2006-12-29 MTCH NEE ES BKNG OKE CNP CMCSA ETR MAT CSCO DOC NVDA GS ATI HAS
2007-01-31 HPQ MTCH GS DECK BKNG NEE DOC UAL TWX MAY CNP HAS PCAR MAR CMCSA
2007-02-28 MAT NEE KMX WYNN SYK T ON UIS SPG ALGN HAS DOC CNP GT ICE
2007-03-30 ON BKNG ICE MAT NRG CF NEE ETR MAY CNP CHD KR MGM ES MTCH
2007-04-30 BKNG ETR ES CF BAX PEG CI CHD MAT SRE NEE MAY AEP GT ON
2007-05-31 NRG BKNG CE DLTR CMI HON CI ANDV TSN KR VLO EIX GT OKE WBD
2007-06-29 CLF ICE BKNG NRG ON CE FCX ANDV HON WBD DLX MHK FIS DECK NOV
2007-07-31 BKNG CF AXON KMG BWA DJ CE PENN MTW ESRX FCX COP WBD ICE CVX
2007-08-31 FCX COP AXON FSLR DECK CVX BKNG BIIB HPQ HON IBM VRSN BWA SWKS KMG
2007-09-28 BIIB BKNG COP HPQ CVX FLR ESRX AXON IBM FCX HAL WDC FMC RTX BG
2007-10-31 FTI GRMN BKNG GOOG OXY FMC TRMB MGM BIIB APA BG WDC LVS MPWR FLR
2007-11-30 APA FLR FMC GOOG FCX BKNG FTI CIEN MRK BIIB OXY NDAQ WAT CLF CL
2007-12-31 BKNG VRSN MRK GOOG ISRG CPRT BRK-B CL CME BWA WDC HPQ WAT SCHW ESRX
2008-01-31 BKNG MO COP OXY WDC RTX XOM ESRX DVN SCHW CPRT DUK CL LMT BAX
2008-02-29 BKNG HAL ABT WDC OXY CVX XOM HPQ COP DVN AFL CL WMB EQT NOC
2008-03-31 MO BKNG HAL OXY WDC CVX CAG AFL DVN CL GE ABT BDX NOC CHD
2008-04-30 BKNG HAL CVX COP WDC D OXY ALL DVN XOM RTX CAG AFL UNP TRV
2008-05-30 HAL BKNG COP CVX D WDC APA CSX OXY UNP ABT ALL DVN ADI TRV
2008-06-30 WDC CF CSX FMC MA HAL UNP EQT MOS OXY CPRT COP EW MEE SWN
2008-07-31 D HAL EW ABT BKNG OXY COP BAX CPB SCHW WDC HPQ MO WWY MKC
2008-08-29 CF D ABT AON ED BAX COP SCHW IBM CPB OXY MKC EW MCD WWY
2008-09-30 ABT ED D CPB HPQ AON BAX MCD EW CHD PRGO SCHW MDLZ GEN MO
2008-10-31 ED ABT MRSH CHD AON CLX MO KR MDLZ BAX HPQ D CPB DLTR WWY
2008-11-28 ED DLTR CHD KR ABT AON D MDLZ EW SHW BAX KMB CLX ACGL MRSH
2008-12-31 AON DLTR XOM SHW ABT KR BMY MCD TRV EW ED CHD ACGL CL MDLZ
2009-01-30 ABT DLTR BMY EW XOM MNST CL MDLZ AON XEL BAX WM PCG CNP WEC
2009-02-27 BKNG CAG ABT EW BAX VTRS XOM PCG CL BMY AON XEL COR WEC BALL
2009-03-31 BKNG ED WBD EW VTRS BMY CAG MNST DLTR MO CMS BALL ABT AAP PCG
2009-04-30 BKNG AON EBAY IBM CAG WBD MNST TRV DRI BR VTRS MS EW MMM TJX
2009-05-29 BKNG EBAY CAG CF OXY RTX IBM WDC MS DRI WBD MMM TRV YUM TJX
2009-06-30 BKNG CAG WBD EBAY IBM BMY CF MSFT OXY MMM MS GOOG EOG DRI MO
2009-07-31 EBAY WBD BKNG BMY CAG MSFT CF OXY IBM FISV HPQ TJX FIS JNJ XOM
2009-08-31 BKNG EBAY WBD MTCH MMM TRV BMY CAG MSFT HPQ SPGI TJX RTX WHR AMGN
2009-09-30 BKNG WBD EBAY MTCH CAG BMY KLAC HPQ GE MMM AAPL EOG RTX TRV IBM
2009-10-30 BKNG WBD HIG GNW STX EBAY BC WSM TT FLEX SNDK WLL GMCR JBL KMX
2009-11-30 BKNG FLEX GOOG JBL CCI WBD CTSH ULTA TT PSKY FCX SANM LVS KMX STX
2009-12-31 BKNG GOOG KMG FCX CCI CTSH IP F DDS AMD GGP TT CLF INCY WFM
2010-01-29 BKNG AMD GGP WFM MU MEE PXD GMCR SNDK F AIV HMA VIAV DD CAR
2010-02-26 NYT BKNG AMD INCY F MTW DAL MU JBL AIV COR OKE WLL STX HUM
2010-03-31 F BKNG SANM DPZ AAL UAL ETFC CLF DECK DDR MTW SMCI WLL LVS FITB
2010-04-30 BKNG BBWI MTG UAL CLF VIAV DECK LPX AAL VSTNQ TSN DDS DDR INCY LYV
2010-05-28 BBWI ZION UAL BC AIV HBAN LVS URI ASH DPZ WLL INCY PVH HST RF
2010-06-30 BMY BBWI LLY MO TRV CAG YUM PEG GIS WBD COR DLTR ED AEP MMM
2010-07-30 BMY HAS CB PEG MO ED COP LLY BKNG AEP TRV DLTR SO BBWI CAG
2010-08-31 BKNG EW AAL BMY KDP NI NTAP HAS CTSH CMI BBWI ED BF-B BF.B DLTR
2010-09-30 BKNG CCU MBI CMS BBWI CTSH ERIE NI CPQ DLTR EC SWKS CHRW LVS LUMN
2010-10-29 BKNG MBI BWA COO CTSH AKAM LYB ERIE VRSN EMN IPGP BBWI SWKS DLTR DXCM
2010-11-30 BKNG BBWI BWA NTAP LVS TXN ILMN EXPD AME ETN WYNN F URI RCL SPGI
2010-12-31 LVS DECK BBWI VRTS FFIV BKNG F SWKS ILMN ETN URI MGM BWA FTNT NOV
2011-01-31 CIEN WLL DECK TER FCX ACAS BWA ETFC BKNG ILMN AIG CXO PXD FDO SNDK
2011-02-28 VIAV TER KLAC COP TEX MAY ETFC NOV NVDA HOG ON MU PSKY ANDV WY
2011-03-31 VIAV COP TER BKNG WY PSKY CIEN KKR NOV KLAC WYNN WMB CSX BX BKR
2011-04-29 BKNG ANDV VIAV MTW REGN BBWI ECHO IRM WYNN PSKY COP CBRE TTWO LULU BX
2011-05-31 BKNG BBWI KKR LULU WYNN REGN MNST BIIB ACAS GMCR CXO FDO PETM WFM PXD
2011-06-30 MNST BBWI WYNN REGN MCO BKNG GT EA KKR IPGP DDS HUM MTCH BIIB COO
2011-07-29 MNST COG EP WCG BKNG CEPH AET ABMD COO IRM BIIB EA TDC DLTR WYNN
2011-08-31 BKNG AAPL BBWI CVX LLY WYNN DUK ABT CF KO IBM AEP MTCH TJX GME
2011-09-30 BBWI AAPL LLY AEP NI BKNG INTC ED TJX ABT MTCH DLTR CL CNP KO
2011-10-31 KLAC DUK BBWI BKNG COP AAPL ABT INTC AEP CVX ED CAG XOM NI DLTR
2011-11-30 KLAC INTC BBWI AAPL COP AEP LLY AEE CVX PFE ABT CAG MTCH XOM TJX
2011-12-30 KLAC LLY CVX XOM AEP GE INTC AEE PM COP BBWI AAPL TJX ABT WBD
2012-01-31 KLAC GE LLY AAPL PFE TJX AEP BKNG INTC XOM BBWI CAG AEE VZ GRMN
2012-02-29 BKNG AAPL TJX MNST LYB GRMN SHW CNC TRGP CF WCG EQIX BBWI ADS TPR
2012-03-30 BKNG AAPL MOH MNST LVS EQIX LYB TJX ULTA AAP PSKY HFC TPR SHW EC
2012-04-30 AAPL BKNG TJX MNST SHW PM WBD PSKY SBAC DLTR TFC KMI WMB AAP USB
2012-05-31 BKNG AAPL WBD STX EC WMB SBAC SHW EBAY TJX HOG INCY SRE DLTR USB
2012-06-29 MNST STX BKNG SHW AAPL VRTX SRE DAL TJX SBAC EBAY CHD WBD DLTR CSGP
2012-07-31 AAL EW SHW CHD MRK SRE AAPL LPX KMB SBAC CSGP WEC LEN STX TJX
2012-08-31 STX WDC MRK SBAC EXPE EW EBAY SHW VRSN VTR DOC ALL TJX DVA TWX
2012-09-28 STX STZ LPX PHM EBAY ALL SHW WMB TWX CF VLO GOOG FITB MPC SBAC
2012-10-31 ANDV ALL SHW TWX HCA SBAC EBAY WBD DXCM STZ LLY THC MPC MRK VLO
2012-11-30 KBH ALL SBAC GNRC EBAY BAX VTRS IRM TWX PHM AMGN WSM MTW FLS DVA
2012-12-31 STX SBAC GNRC APTV BBBY AFL BAX VTRS STZ CPAY DDS REGN ETN PPG FLS
2013-01-31 STX DXC TRMB APTV HRB META LPX DAL EMN STT HFC EBAY WDC CPAY CPRT
2013-02-28 KKR STX DAL STT GS BSX KBH HCA ALL THC TSN ALK WBD TRGP MPC
2013-03-28 KKR STX NDAQ APO GEN MPC ALL STT KR DXC TWX TSN ANDV CTRA BC
2013-04-30 KKR FNMA FMCC KR TWX COR GEN STX NRG ALK HRB TSN VRTX CTRA MAT
2013-05-31 STX GME KKR KBH TSLA STZ REGN SLM JEF MTG WDC KR BX BKNG PFG
2013-06-28 FSLR STX WDC BKNG SLM KKR REGN STZ APO MBI MTG MCO BIIB BSX ENPH
2013-07-31 BKNG STX WDC DXCM ELV SLM CBOE MBI MET GNW TYL RF APTV GHC OMX
2013-08-30 BKNG MTG CSGP TRIP TSN GNW LYV ELV BSX CIEN CBOE SVU BBBY DAL GNRC
2013-09-30 BKNG MTG GT DXCM META OMX KATE FANG MGM BSX WEN EA GME FLT ETFC
2013-10-31 BKNG META MGM TSLA GT DXCM KATE MU ETFC INCY FLT RRD CELG HBI BX
2013-11-29 BKNG OMX GNW STZ PBI MCK META LVS CAH FANG BR IBKR AMP AXON APO
2013-12-31 FNMA FMCC BKNG IBKR BR DECK CAH GNW PBI MCK LNC AMP BX FDX HII
2014-01-31 FNMA FMCC BKNG MGM MU SMCI MTCH DECK BX GT HII URI KATE RRD GOOG
2014-02-28 BKNG SMCI BX MU META GOOG INCY DD MGM ILMN MTCH OKE DXCM TKO LYV
2014-03-31 WYNN BX BKNG ILMN DXCM MTCH MGM FRX VTRS MU META DD TPL AXON PANW
2014-04-30 GLW FSLR MU TSN TSLA DD HP VTRS LYB URI TPL BKR BKNG GNW BF.B
2014-05-30 MU BKR GLW LYB OKE DD KR ODFL COP ATI TRGP URI HP VNO WMB
2014-06-30 COP MU DAL FRX URI META TPL ODFL BALL OKE LYB SWKS EA SMCI WLL
2014-07-31 MU COP NFX CBRE FANG BKNG TAP BX URI TRGP EA FMCC NOV FLEX WMB
2014-08-29 MU GILD SMCI TWX BNY BK LYB AIV UDR WDC DLR CAR META FANG KLAC
2014-09-30 GILD STLD MU UNP TPL ENPH LYB DLR ADM UHS COO NDAQ KR ODFL THC
2014-10-31 GILD MU KDP KR ENPH ETR SIAL DXCM ABBV EW SWKS CSX DLR MO MNST
2014-11-28 KR SMCI KDP MU ABBV EW AIV KLAC MNST IRM DLR CNC AMGN COR CSX
2014-12-31 KR WELL EW MNST PAYC AIV COR IRM KDP EA CNC DLTR EIX AEP EQR
2015-01-30 KR SHW WELL CNC KDP PCG DRI NCLH IBKR IRM EW BX KMX DLTR GLW
2015-02-27 KR BX SHW IBKR COR DRI CNC RMD STZ AXON DLTR KDP SWKS EA PCG
2015-03-31 KR COR CNC DLTR DRI BX MNST SHW IBKR AET ELV VMC SWKS BIIB ZTS
2015-04-30 BX COR CNC SSP INCY SWKS PAYC ULTA VMC CI DLTR MSCI HSP ABMD DRI
2015-05-29 BX COR AXON BLDR GILD DRI ABMD HSP VTRS BSX HAS BNY BK EFX PAYC
2015-06-30 BX GILD BRCM JPM VTRS HUM DRI CNXT GS ABMD PANW HSP CIEN PAYC BTUUQ
2015-07-31 VLO BTUUQ DRI KRFT IBKR ANET MTG JPM CNC KR COTY GILD ACGL ROL PANW
2015-08-31 MDLZ DRI EA HAS MTG VLO ROL IBKR MNST ULTA ACGL HCA BF.B BF-B ALK
2015-09-30 BKNG MDLZ CASY DXCM DRI HSP ACGL STZ NVR HAS INCY HIG PANW EA MAS
2015-10-30 BKNG ACGL CDW STZ NDAQ MAS NI BBWI AIZ COTY INCY FISV KDP NVR MDLZ
2015-11-30 VLO MAS GOOG FISV KDP ACN CINF PAYX PSX JKHY BBWI AIZ GPN XRAY NI
2015-12-31 GOOG VLO MAS VRSN PMCS KDP XRAY ABMD ATVI TSS LDOS STZ GE HOLX PAYX
2016-01-29 ABMD ATVI GOOG TAP TSS KDP KMB HOLX STZ LHX VLO NI CLX TSN ARG
2016-02-29 T VZ NI CMS AWK XEL DLR KMB ATO WEC GOOG KLAC PPL PM KDP
2016-03-31 T VZ NI TSN XEL CMS PM AWK NDAQ ATO LNT MKC KLAC SYY EIX
2016-04-29 EXC TSN CPRT T NI EVRG BAX MAT EIX SYY BKNG DLR DD CNP XYL
2016-05-31 CLF DLR STLD MTW T CNP BSX IRM XYL EVRG MDR ZBH CPRT RRC ABMD
2016-06-30 DLR EVRG AWK MTW T CNP IRM NI CPRT MDR WM EQIX ALB QLGC CCI
2016-07-29 DXC IRM T DLR OKE BSX ALB DHR CPRT CLF HII CNP SYY AWK MDR
2016-08-31 DHR EW ULTA GRMN ALGN TSN GEN XYL VTR ARE AXON BSX WPX X MDR
2016-09-30 GEN DHR BKNG AMD MKTX CPRT GLW SPGI TSN X ITW WB EW VEEV PODD
2016-10-31 GEN WB DHR HPE CPRT LITE GLW BKNG CHTR TPL GNW ETSY X LDOS DXC
2016-11-30 CLF WOR HPE WB KLAC MGM CSX DXC LITE X BKNG PFG LVS JPM ODFL
2016-12-30 FNMA CLF FMCC STLD CSX BBY ODFL PRU TFC JPM UIS MS PFG WEN USB
2017-01-31 FMCC CLF KEY GS JPM IP CFG ZION STLD WEN RF TFC MS FNMA AMD
2017-02-28 XRX CLF SLM GEN X MTB UNM PNC JPM NAV COHR BKNG WDC CSX RF
2017-03-31 INCY BKNG TTD CSX GEN XRX HWM KLAC COHR JEF JBL GS HII NAV TTWO
2017-04-28 BKNG TTD GEN AMD KLAC AMAT JBL VIAV KBH XRX APO BBY ADBE DXC FMC
2017-05-31 KLAC BX WB WDC BKNG APO GOOG ROL BAX META KBH LRCX TTWO ADBE VEEV
2017-06-30 TTD BX VEEV WB TTWO CSX ADSK XYZ LRCX AMAT EA BAX ELV BKNG NAV
2017-07-31 CVNA BX BKNG AET PKG VRTX XYZ HRB BAX CBOE LITE AMAT PENN CTSH KBH
2017-08-31 XRX NRG XYZ COO BA META CBOE CVNA RCL VRSN AET STT VRTX BX PKG
2017-09-29 XRX WB VRTX CBOE MU TTD NRG CTSH META BX ATVI ROL BA RHT EA
2017-10-31 MU WB CBOE TROW TTD ABBV FMC LHX HLT AMAT DELL MTD TWTR XYZ KLAC
2017-11-30 MU XYZ ON BBBY TWTR LRCX VLO KORS CBOE COHR ANET AMAT MTG IBKR IPGP
2017-12-29 BBBY MU CBOE IBKR ALGN TSN TWTR TROW IPGP ANET HLT MNST CPRT KBH ON
2018-01-31 BBBY VLO ODFL IBKR ABBV FSLR CBOE TROW HLT PENN KKR VFC KBH TWTR CPRI
2018-02-28 EC MU TXN CPRT ANET KKR VLO BX WB ZTS CSGP XYZ TROW TWTR ON
2018-03-29 MU ON XYZ URI IBKR DECK HPE CPRT TKO CSGP NKTR ANET BKNG BLK EW
2018-04-30 MU CPRT NKTR MPC PSX CVNA BR BKNG CME ZTS CSGP XYZ NRG LW PANW
2018-05-31 MU PSX SEDG CPRT NRG VST BKNG LW OKE OXY VLO MTCH PTC PANW NDAQ
2018-06-29 PSX MU VLO THC DECK XYZ CPRT OKE GDDY EC TJX OXY VST MSCI SEDG
2018-07-31 MU XYZ TTD CVNA DXCM TJX ETSY CPRT CNC OKE PSX AXON DECK CSGP VRSN
2018-08-31 TJX CNC CPRT PFE KDP WAB MTCH HET CSX ABMD MRK CSGP EHC ADM MSI
2018-09-28 CVNA TJX PFE CNC FICO MTCH DXCM HET CSX ABMD MRK VRSN EHC ANDV BX
2018-10-31 MTCH XYZ TJX MOH DXCM MRK ABMD ESRX VEEV UIS MKC PFE HCA VZ AES
2018-11-30 MRK MKC KDP ESRX VZ AES PFE LW WBD BALL HCA DELL CME ROL BSX
2018-12-31 VZ PFE NEE MRK DUK AVGO ESRX EXC MKC KDP SPG EXR FE XEL CME
2019-01-31 AVGO VZ PFE DUK NEE EXC AIV EXR CNP SBUX DOC XEL MRK BALL FE
2019-02-28 AVGO FNMA FMCC AES BALL MTCH CLF DOC PGR TDC ERIE HET XLNX NRG KEYS
2019-03-29 AES MTCH SSP BALL KMI CPRT NYT FNMA CVNA ERIE FMCC AVGO KLAC KEYS PGR
2019-04-30 KEYS BALL KLAC MTCH PAYX APD SMCI FICO CPRT HET ZBRA LII MSCI NYT ROP
2019-05-31 CVNA BALL MTCH HSY MDLZ APD PAYX TT CHD LYV CSGP AWK PEP CPRT GPN
2019-06-28 MTCH CPRT BALL HSY WRB GPN XRAY APD HWM CSGP FDS MDLZ CINF TT WM
2019-07-31 BALL HSY MTCH CPRT WRB HWM APD ERIE ZTS MKTX MSI CINF FIS CSGP HLT
2019-08-30 HSY BALL SBAC WRB WEC QCOM TSN ETR FISV ENPH ZTS CSGP INVH FIS APD
2019-09-30 HSY WEC ETR INVH WU WELL FE CPRT ACGL WRB KLAC XEL ZTS CINF ES
2019-10-31 KBH ETR WU INVH KIM DOC KLAC WEC FNMA BF-B BF.B BLDR PODD T SHW
2019-11-29 WU BMY KIM KBH BF.B BF-B XRX URI AVP MAS JPM CPRT PSX KLAC HET
2019-12-31 WU DXCM URI JPM CVNA HWM ENPH BLDR AMGN HET VRTX CPRT APO XRX BMY
2020-01-31 SWKS ANSS FBHS HET CPRT THC APO KSU CDAY LITE QRVO BMY CTLT TYL MS
2020-02-28 BMY VICI HET LLY NEM ZTS ES CDAY RMD GPN BRO TSLA GOOG TDG DVA
2020-03-31 NEM ABBV PGR GEN KR DVA REGN GOOG ENPH MSFT VRTX CLX MNST CSGP DXCM
2020-04-30 ABBV KR GEN GIS CLX EA LLY VRTX NEM PGR AKAM MSFT CDNS REGN VZ
2020-05-29 ABBV GEN PGR ANET KR GIS NEM CDNS QCOM META LLY CLX VZ GILD EA
2020-06-30 ABBV EBAY NEM URI CDNS INTC QCOM PGR GIS ENPH MSFT META EA REGN CLX
2020-07-31 ABBV EBAY URI CDNS QCOM PGR ADBE CLX GIS MSFT KLAC MO NEM GILD MNST
2020-08-31 PGR ABBV EBAY CDNS MO PG MS KLAC AMGN META REGN VZ ORLY TXN URI
2020-09-30 CDNS RRC LOW PBI META CTLT CZR PGR FSLR ENPH CRM XYZ ADBE ROL CPRT
2020-10-30 PENN XYZ ENPH FDX CVNA LOW BLDR PGR CRWD WHR VAR TGT URI CPRT UPS
2020-11-30 ABBV MS IVZ KLAC PGR JPM TXN PG VRT PEG BLK ENPH WHR CDNS URI
2020-12-31 ABBV KLAC MS GS SPG C MRNA CDNS PGR IVZ AMAT URI TXN JPM BLK
2021-01-29 ABBV KLAC MS GS C PGR SPG JPM TRV URI ALL ENPH BLK CDNS TXN
2021-02-26 TUP CRWD PENN ENPH DDS QEP KLAC TDC VIAC GNRC COHR MRNA GS AXON AES
2021-03-31 GS JPM DVN MS MO KLAC PGR SPG MMM EBAY ETSY ALL MRNA JCI GD
2021-04-30 DISCA DISCK VIAC TRIP GT DVN TPL WSM NWSA GS SSP XEC LPX CLF MGM
2021-05-28 LPX MAC XEC TPL SLM CLF CAR DVN WSM COF GS STX TDC NUE AIV
2021-06-30 BX XEC GS MAC NUE DVN COF BBBY TRGP BIG STLD MS MUR TWTR RRD
2021-07-30 BX DVN RRC ASO GS TRGP RRD MUR MS SBNY MDP TWTR XEC VRT SIVB
2021-08-31 MRNA BX RRD MDP KKR SBNY SIVB DDS CLF CARR GOOG GS TWTR DRE PKI
2021-09-30 BX MRNA SBNY SIVB DRE IPG XLNX GOOG MDP RRD CTLT XEC KKR ALB GS
2021-10-29 RRC BX MRNA JEF SBNY RRD MDP GS KKR SIVB XLNX EOG DVN TRGP APA
2021-11-30 KKR COP EOG RRC BX MRNA CAR TRGP APO SPG APA MUR ARES DVN KLAC
2021-12-31 KKR BX PFE AMD KLAC DDOG DVN MRO ODFL FDS ZTS QCOM RRD APA EXC
2022-01-31 PFE BLDR EOG BX CVX WY EXC RRD ON DVN XOM XLNX DLTR KLAC HPQ
2022-02-28 EOG XOM WFC EXC NI CVX WMB MCK ADM WY PM TRGP COR VLO BX
2022-03-31 EOG ABBV DVN CVX REGN COP XOM PFE WY BX MRO EXC WMB BMY NI
2022-04-29 ABBV REGN CVX DVN EOG COP WY XOM PFE MRO EXC BMY WMB FCX SRE
2022-05-31 ABBV PFE EOG CF CVX REGN WY XOM DVN GILD PSX MRK EXC BMY WMB
2022-06-30 EOG ABBV PFE XOM CVX DVN CF COP PSX MRO MRK MPC VLO BMY FHN
2022-07-29 DVN EOG PFE CVX ABBV XOM CF MRO PSX COP MRK MPC KLAC BMY FHN
2022-08-31 DVN CVX CF EOG COP XOM PSX VRTX ON MRO VICI GS PSA UPS MPC
2022-09-30 DVN COP CF XOM SMCI VLO GPC EOG EQT MPC MRO MCK CAH OXY ON
2022-10-31 DVN EOG COP CVX CF XOM PSX ABBV MRO VLO GS AIG AMGN MRK APA
2022-11-30 COP EOG CVX XOM PSX DVN AIG CF ABBV MRK AMGN JPM BKNG GS MPC
2022-12-30 EOG COP CVX PSX XOM AIG BKNG GS DVN MPC JPM SPG AMGN ABBV MRK
2023-01-31 BKNG COP ACGL GNW MPC FLEX HES AIG TJX LVS ABMD MRNA ODP FTI XOM
2023-02-28 BKNG MPC ACGL LEN UCL LVS BWA HES CAT LYB VLO GNW PHM DECK TPR
2023-03-31 BKNG FTI COTY BWA PSX LVS MTW VLO JBL CPRT MPC DECK TPR STLD ATI
2023-04-28 BKNG COTY SMCI CPRT ADI BSX LW DECK MDLZ MPC LVS AVGO BUD OMC PCG
2023-05-31 BKNG PHM COTY HCA LEN CPRT MDLZ LW BSX MNST PCG WST HSY CLX FDX
2023-06-30 CPRT BKNG PHM KLAC LEN SMCI PLTR AVGO CAH LW KBH VNT TAP THC VRSK
2023-07-31 BKNG JBL FLEX KLAC VRT AVGO VMC CRH PHM CARR DAL COP UAL SMCI DELL
2023-08-31 BKNG SMCI EOG CVNA RCL DASH PHM CARR COP PSX CRH DAL BKR CCL TJX
2023-09-29 CVNA BKNG PSX SMCI APP EOG BKR DASH PNR VST PLTR VRT TJX GOOG MTG
2023-10-31 PSX APP BKNG VST VRSK JBL AFL TJX MPC KLAC CBOE CNX BR CPRI ERIE
2023-11-30 VST BKNG FNMA CBOE IBM CAH AFL AM FTI EC NRG PSX AKAM WMB MCK
2023-12-29 BKNG NRG CVNA IBM CRWD VRT VST PHM WSM CRH FNMA JPM SPG DELL GDDY
2024-01-31 BKNG FNMA IBM WSM FMCC CVNA X NRG VST PHM JPM CRH CRWD IR PSX
2024-02-29 FNMA SMCI FMCC PCAR CRH IBM CVNA NRG JPM VST BKNG IR TDG HLT CRWD
2024-03-28 SMCI FNMA DELL FMCC CRH ADCT NRG PCAR IR HWM ANF CRWD COHR JPM VST
2024-04-30 SMCI HOOD CVNA WSM DASH CAT FMCC APP ANF FNMA ADCT NVDA PLTR DYN JPM
2024-05-31 DELL CVNA FNMA FMCC WSM VRT TRGP ANF IBKR COIN GS WFC VST FANG LDOS
2024-06-28 DELL VST NRG HWM VRT FSLR IP IBKR GDDY BSX EME GS TRGP LDOS NVDA
2024-07-31 CVNA NVDA ANF TRGP GDDY IRM COHR HOOD GS WELL KMI TJX THC APP VST
2024-08-30 LUMN IRM PM CFG VTR TRGP MO GS CVNA WELL AFL TFC MSI NVDA JEF
2024-09-30 VTR WELL AFL PBI IBM BNY BK IRM THC PM LUMN NEM EIX PGR JEF
2024-10-31 LUMN VST COHR IRM BNY BK BKNG ECHO VTR FISV CNX IBM WELL GLW BXP
2024-11-29 LUMN FNMA FMCC WMB KMI VRT COHR FISV BKNG VNO DASH BNY BK CVNA NCLH
2024-12-31 WMB APP CVNA IBKR VST KMI TRGP CNX AXON FISV GS BKNG HOOD LITE VRT
2025-01-31 FNMA FMCC VST LITE CIEN BSX COIN FOXA TRGP KMI GS TPR APP LYV WMB
2025-02-28 FMCC IBKR FNMA BSX HOOD FOXA META GS WSM NKTR BKR ETR JPM EQT TKO
2025-03-31 FNMA FMCC PBI FOXA JPM G WELL MO PGR PM ETR TPR TPL BSX DASH
2025-04-30 MO VZ BKNG JPM PGR AEP TRV EXC CNP CCI ABT PPL KR PM AMT
2025-05-30 MO NEM VZ BKNG GILD UBER PM CNP JPM GS ALL C TRV PGR MNST
2025-06-30 MO BKNG CF JPM GILD MS C PM GS VZ UBER ABT NEM PGR CAH
2025-07-31 UBER RCL CAR GS JCI HWM PBI BNY BK JPM FLEX C FMCC APP BKNG
2025-08-29 HOOD TPR GS COIN C CAR DASH STX GEV CNXT BK BNY WDC GLW VST
2025-09-30 FNMA ECHO FMCC NEM C BK BNY AVGO GOOG GS MBI MS CFG GLW KLAC
2025-10-31 NEM APP ECHO GLW KLAC MPWR GOOG TEL GS PSKY MS C BWA LITE STX
2025-11-28 TE VRT KLAC ECHO GLW APP MPWR GOOG HOOD MIR WELL TEL GS NEM MS
2025-12-31 GOOG VIAV NKTR STX TE ATGE INCY SANM SSP KLAC CMA FSLR WDC C HOLX
2026-01-30 NEM ECHO KLAC TE ALB WDC GOOG MNST GS C STX FTI KEY NYT MS
2026-02-27 KLAC ECHO ALB FTI VTRS STX FDX BG DD BWA MNST GOOG MRK GLW ATI
2026-03-31 SPG GILD JNJ PSX AMGN MO KLAC VZ APA NEM D BMY EOG MRK CF
2026-04-30 SPG PSX APA CF MO EOG JNJ GILD BMY KLAC AMGN VZ D CSX KMI
2026-05-29 SPG APA EOG CF PSX MO JNJ MS GILD VZ KLAC D GS BMY AMGN
2026-06-26 SPG PSX MS MO VZ HST C EOG QCOM CF KLAC APA D GS BK
Scoring script (python)
FORMULA_NAME = "Recovery Quality Contrarian 52-Week Hybrid (Quality Quorum Switchboard, v1182)"
LOGIC_VARIANT_COUNT = 3
NOTES = """mode=explore; family=recovery-quality-contrarian-52w-hybrid
New hybrid family that combines the champion recovery-quality-contrarian stack with the strong bull shallower-sweet-spot logic from contrarian-52w, but changes the arbitration mechanism completely. Instead of a relay or barbell, this script runs a quality quorum switchboard: contrarian 52-week pullbacks, repair/trend evidence, and defensive durability each propose a candidate state, then the active regime decides which state may lead and which must merely confirm. Bull tapes allow shallower pullbacks to outrank only when repair is already visible; transition tapes require a fundamental quorum before deep drawdowns can compete; defensive tapes keep the contrarian sleeve on a short leash and let low-vol income-backed durability arbitrate conflicts. When recovery and contrarian signals disagree, the switchboard classifies the name as a repaired rebound, a sweet-spot pullback, or a falling knife and scores accordingly.
Deliberate metric coverage this run: momentum uses return_1m_pct as a shakeout input plus return_3m_pct, return_6m_pct, and momentum_12_1_pct; trend/recovery uses both from_200d_ma_pct and from_52w_high_pct; volatility uses realized_vol_3m; liquidity uses avg_daily_volume_3m and trading_days_3m; income uses dividend_yield_ttm_pct and dividend_ttm; valuation uses pe and peg; growth uses revenue_growth_pct, free_cash_flow_growth_pct, and forward_eps; quality uses operating_margin_pct and free_cash_flow_margin_pct; size uses market_cap as a mild small-cap rebound tilt. Deliberate weight-0 metrics this run: return_12m_pct, avg_daily_dollar_volume_3m, forward_pe, eps_growth_pct, operating_income_growth_pct, shares_outstanding, close, adj_close, high_52w, ma_200d, eps_ttm, revenue_ttm, operating_income_ttm, free_cash_flow_ttm. Correlated momentum and valuation columns are intentionally thinned, and sparse fundamentals are normalized by present evidence so missing coverage does not auto-zero a name."""

PULLBACK_REPAIR = {
    "from_52w_high_pct": (0.24, -1),
    "return_1m_pct": (0.16, -1),
    "return_3m_pct": (0.17, +1),
    "return_6m_pct": (0.12, +1),
    "from_200d_ma_pct": (0.15, +1),
    "momentum_12_1_pct": (0.10, +1),
    "market_cap": (0.06, -1),
}

REPAIR_LEADERSHIP = {
    "from_200d_ma_pct": (0.24, +1),
    "return_3m_pct": (0.20, +1),
    "momentum_12_1_pct": (0.16, +1),
    "return_6m_pct": (0.10, +1),
    "forward_eps": (0.10, +1),
    "revenue_growth_pct": (0.10, +1),
    "free_cash_flow_growth_pct": (0.10, +1),
}

DURABLE_INCOME = {
    "realized_vol_3m": (0.17, -1),
    "operating_margin_pct": (0.15, +1),
    "free_cash_flow_margin_pct": (0.14, +1),
    "dividend_yield_ttm_pct": (0.10, +1),
    "dividend_ttm": (0.08, +1),
    "pe": (0.10, -1),
    "peg": (0.07, -1),
    "avg_daily_volume_3m": (0.10, +1),
    "trading_days_3m": (0.09, +1),
}


def _to_float(value):
    if value is None or isinstance(value, bool):
        return None
    try:
        value = float(value)
    except Exception:
        return None
    if value != value:
        return None
    return value


def _metric(stock, name):
    return _to_float(stock.get(name))


def _rank_map(stocks, metric, direction):
    pairs = []
    for stock in stocks:
        symbol = stock.get("symbol")
        if not symbol:
            continue
        value = _metric(stock, metric)
        if value is not None:
            pairs.append((symbol, value))
    if not pairs:
        return {}
    pairs.sort(key=lambda item: item[1])
    count = len(pairs)
    if count == 1:
        return {pairs[0][0]: 1.0}
    out = {}
    denom = float(count - 1)
    i = 0
    while i < count:
        j = i + 1
        value = pairs[i][1]
        while j < count and pairs[j][1] == value:
            j += 1
        avg_rank = (i + j - 1) * 0.5
        pct = avg_rank / denom
        score = pct if direction > 0 else 1.0 - pct
        k = i
        while k < j:
            out[pairs[k][0]] = score
            k += 1
        i = j
    return out


def _weighted_score(symbol, sleeve, rank_cache):
    total = 0.0
    present = 0.0
    for metric, spec in sleeve.items():
        weight, direction = spec
        ranks = rank_cache.get((metric, direction))
        if ranks is None:
            continue
        score = ranks.get(symbol)
        if score is None:
            continue
        total += weight * score
        present += weight
    if present <= 0.0:
        return 0.0
    return total / present


def _regime_branch(regime):
    text = ""
    bull_value = None
    breadth_value = None
    vol_value = None

    if isinstance(regime, dict):
        for key in ("name", "label", "regime", "state", "market_regime"):
            value = regime.get(key)
            if isinstance(value, str):
                text += " " + value.lower()
        bull_value = _to_float(regime.get("bull"))
        breadth_value = _to_float(regime.get("breadth"))
        vol_value = _to_float(regime.get("avg_realized_vol_3m"))
    elif isinstance(regime, str):
        text = regime.lower()

    if "bear" in text or "risk_off" in text or "defen" in text or "stress" in text:
        return "defense"
    if "bull" in text or "risk_on" in text or "uptrend" in text or "strong" in text:
        return "bull"

    if bull_value is not None and breadth_value is not None:
        if bull_value >= 0.62 and breadth_value >= 0.58:
            return "bull"
        if bull_value <= 0.45 or breadth_value <= 0.42:
            return "defense"

    if vol_value is not None and vol_value >= 0.36:
        return "defense"

    return "transition"


def _clamp(value, lo, hi):
    if value < lo:
        return lo
    if value > hi:
        return hi
    return value


def score_universe(stocks, regime, ctx):
    rank_cache = {}
    for sleeve in (PULLBACK_REPAIR, REPAIR_LEADERSHIP, DURABLE_INCOME):
        for metric, spec in sleeve.items():
            direction = spec[1]
            key = (metric, direction)
            if key not in rank_cache:
                rank_cache[key] = _rank_map(stocks, metric, direction)

    branch = _regime_branch(regime)
    scores = {}

    for stock in stocks:
        symbol = stock.get("symbol")
        if not symbol:
            continue

        pullback = _weighted_score(symbol, PULLBACK_REPAIR, rank_cache)
        repair = _weighted_score(symbol, REPAIR_LEADERSHIP, rank_cache)
        durable = _weighted_score(symbol, DURABLE_INCOME, rank_cache)

        d52 = _metric(stock, "from_52w_high_pct")
        d200 = _metric(stock, "from_200d_ma_pct")
        r1 = _metric(stock, "return_1m_pct")
        r3 = _metric(stock, "return_3m_pct")
        m12 = _metric(stock, "momentum_12_1_pct")
        vol = _metric(stock, "realized_vol_3m")

        shallow_pullback = d52 is not None and d52 <= -8.0 and d52 >= -28.0
        deep_pullback = d52 is not None and d52 < -28.0
        repaired = (
            (d200 is not None and d200 > -2.0) and
            ((r3 is not None and r3 > 0.0) or (m12 is not None and m12 > 0.0))
        )
        leader = (
            (d200 is not None and d200 > 4.0) and
            (m12 is not None and m12 > 0.0)
        )
        calm = vol is not None and vol < 42.0

        q_count = 0.0
        q_total = 0.0
        for metric_name in (
            "operating_margin_pct",
            "free_cash_flow_margin_pct",
            "revenue_growth_pct",
            "free_cash_flow_growth_pct",
            "forward_eps",
            "pe",
            "dividend_yield_ttm_pct",
        ):
            direction = -1 if metric_name == "pe" else +1
            rank = rank_cache.get((metric_name, direction), {}).get(symbol)
            if rank is not None:
                q_total += 1.0
                if rank > 0.55:
                    q_count += 1.0
        quality_quorum = (q_count / q_total) if q_total > 0.0 else 0.0
        quality_strong = quality_quorum >= 0.57

        liquidity = (
            rank_cache.get(("avg_daily_volume_3m", +1), {}).get(symbol, 0.5) * 0.55 +
            rank_cache.get(("trading_days_3m", +1), {}).get(symbol, 0.5) * 0.45
        )
        value_income = (
            rank_cache.get(("pe", -1), {}).get(symbol, 0.5) * 0.38 +
            rank_cache.get(("peg", -1), {}).get(symbol, 0.5) * 0.22 +
            rank_cache.get(("dividend_yield_ttm_pct", +1), {}).get(symbol, 0.5) * 0.24 +
            rank_cache.get(("dividend_ttm", +1), {}).get(symbol, 0.5) * 0.16
        )

        knife_penalty = 0.0
        if deep_pullback and not repaired and quality_quorum < 0.40:
            knife_penalty += 0.12
        if deep_pullback and d200 is not None and d200 < -10.0 and r3 is not None and r3 < 0.0:
            knife_penalty += 0.07
        if r1 is not None and r1 > 18.0 and repair < 0.50:
            knife_penalty += 0.03

        if branch == "bull":
            base = 0.45 * repair + 0.33 * pullback + 0.22 * durable
            if shallow_pullback and repaired:
                base += 0.08
            if leader and quality_quorum > 0.50:
                base += 0.05
            if deep_pullback and not repaired:
                base -= 0.10
            if pullback > repair + 0.10:
                if shallow_pullback and quality_strong:
                    base += 0.03
                else:
                    base -= 0.05
        elif branch == "transition":
            base = 0.37 * repair + 0.27 * pullback + 0.22 * durable + 0.14 * value_income
            if deep_pullback and repaired and quality_strong:
                base += 0.08
            if deep_pullback and quality_quorum < 0.45:
                base -= 0.12
            if shallow_pullback and repaired:
                base += 0.04
            if pullback > repair + 0.08:
                if quality_strong:
                    base += 0.02
                else:
                    base -= 0.06
            if repair > pullback + 0.12 and leader:
                base += 0.03
        else:
            base = 0.17 * pullback + 0.25 * repair + 0.38 * durable + 0.20 * value_income
            if repaired and calm and quality_quorum > 0.50:
                base += 0.06
            if deep_pullback and (not calm or liquidity < 0.45 or quality_quorum < 0.50):
                base -= 0.13
            if shallow_pullback and repaired and value_income > 0.55:
                base += 0.03
            if leader and durable > 0.60:
                base += 0.02

        conflict = pullback - repair
        if conflict > 0.14 and not quality_strong:
            base -= 0.05 * conflict
        elif conflict < -0.14 and leader and durable > 0.55:
            base += 0.04 * (-conflict)

        scores[symbol] = _clamp(base - knife_penalty, 0.0, 1.0)

    return scores