exp_1164

Recovery Quality Contrarian 52-Week Hybrid (Quorum Ladder, v1164)

← All V2 experiments
Relative return
1.087x
Excess vs bench
8.67%
Benchmark
CAPW_UNIV
Rolling windows
179 · monthly
Mean strategy gain
24.16%
Mean benchmark gain
14.08%
Mean excess gain
10.07%
Dispersion (ref)
10.75%
Win-rate vs bench (ref)
90.50%
Worst / best ratio (ref)
0.975x / 1.224x
Logic variants
4
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 5.37% 2.22% 1.031x
2011-07-01 … 2016-06-30 24.04% 13.74% 1.091x
2016-07-01 … 2021-06-30 43.40% 20.63% 1.189x
2021-07-01 … 2026-06-26 20.50% 15.48% 1.043x
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.087x · beat benchmark in 162/179
#WindowStrategyBenchmarkRatio
1 2006-07-31 … 2011-07-29 5.32% 1.79% 1.035x
2 2006-08-31 … 2011-08-31 3.32% 0.21% 1.031x
3 2006-09-29 … 2011-08-31 3.08% -0.14% 1.032x
4 2006-10-31 … 2011-10-31 2.54% 0.23% 1.023x
5 2006-11-30 … 2011-11-30 1.58% -0.05% 1.016x
6 2006-12-29 … 2011-11-30 1.23% -0.32% 1.016x
7 2007-01-31 … 2012-01-31 1.35% 0.93% 1.004x
8 2007-02-28 … 2012-01-31 0.63% 1.43% 0.992x
9 2007-03-30 … 2012-03-30 3.02% 3.09% 0.999x
10 2007-04-30 … 2012-04-30 2.21% 2.42% 0.998x
11 2007-05-31 … 2012-05-31 -1.08% 0.60% 0.983x
12 2007-06-29 … 2012-06-29 -0.10% 1.92% 0.980x
13 2007-07-31 … 2012-07-31 0.95% 2.69% 0.983x
14 2007-08-31 … 2012-08-31 1.26% 2.95% 0.984x
15 2007-09-28 … 2012-09-28 0.66% 3.20% 0.975x
16 2007-10-31 … 2012-10-31 0.51% 2.60% 0.980x
17 2007-11-30 … 2012-11-30 1.26% 3.45% 0.979x
18 2007-12-31 … 2012-12-31 2.16% 3.69% 0.985x
19 2008-01-31 … 2013-01-31 5.64% 5.85% 0.998x
20 2008-02-29 … 2013-02-28 5.68% 6.82% 0.989x
21 2008-03-31 … 2013-03-28 7.05% 7.73% 0.994x
22 2008-04-30 … 2013-04-30 6.81% 7.51% 0.994x
23 2008-05-30 … 2013-04-30 6.68% 7.81% 0.990x
24 2008-06-30 … 2013-06-28 10.19% 9.33% 1.008x
25 2008-07-31 … 2013-07-31 13.48% 10.48% 1.027x
26 2008-08-29 … 2013-07-31 13.67% 10.52% 1.029x
27 2008-09-30 … 2013-09-30 18.55% 11.48% 1.063x
28 2008-10-31 … 2013-10-31 22.25% 15.76% 1.056x
29 2008-11-28 … 2013-10-31 23.01% 17.46% 1.047x
30 2008-12-31 … 2013-12-31 22.95% 18.44% 1.038x
31 2009-01-30 … 2013-12-31 24.03% 20.64% 1.028x
32 2009-02-27 … 2014-01-31 25.64% 21.63% 1.033x
33 2009-03-31 … 2014-03-31 26.97% 20.60% 1.053x
34 2009-04-30 … 2014-04-30 25.59% 19.00% 1.055x
35 2009-05-29 … 2014-04-30 25.36% 18.32% 1.059x
36 2009-06-30 … 2014-06-30 27.97% 19.01% 1.075x
37 2009-07-31 … 2014-07-31 26.52% 17.39% 1.078x
38 2009-08-31 … 2014-08-29 27.67% 17.70% 1.085x
39 2009-09-30 … 2014-09-30 25.76% 16.64% 1.078x
40 2009-10-30 … 2014-09-30 28.24% 17.08% 1.095x
41 2009-11-30 … 2014-11-28 25.35% 16.82% 1.073x
42 2009-12-31 … 2014-12-31 23.02% 16.28% 1.058x
43 2010-01-29 … 2014-12-31 24.11% 17.23% 1.059x
44 2010-02-26 … 2015-01-30 21.60% 15.80% 1.050x
45 2010-03-31 … 2015-03-31 20.69% 15.40% 1.046x
46 2010-04-30 … 2015-04-30 19.78% 15.38% 1.038x
47 2010-05-28 … 2015-04-30 21.23% 17.09% 1.035x
48 2010-06-30 … 2015-06-30 25.00% 17.45% 1.064x
49 2010-07-30 … 2015-06-30 24.15% 16.43% 1.066x
50 2010-08-31 … 2015-08-31 22.34% 15.76% 1.057x
51 2010-09-30 … 2015-09-30 20.56% 13.61% 1.061x
52 2010-10-29 … 2015-09-30 19.94% 13.06% 1.061x
53 2010-11-30 … 2015-11-30 21.44% 15.09% 1.055x
54 2010-12-31 … 2015-12-31 20.83% 13.55% 1.064x
55 2011-01-31 … 2016-01-29 19.77% 11.90% 1.070x
56 2011-02-28 … 2016-01-29 19.59% 11.53% 1.072x
57 2011-03-31 … 2016-03-31 21.17% 12.90% 1.073x
58 2011-04-29 … 2016-04-29 21.09% 12.39% 1.077x
59 2011-05-31 … 2016-05-31 22.22% 12.94% 1.082x
60 2011-06-30 … 2016-06-30 23.75% 13.30% 1.092x
61 2011-07-29 … 2016-07-29 25.87% 14.52% 1.099x
62 2011-08-31 … 2016-08-31 26.44% 15.19% 1.098x
63 2011-09-30 … 2016-09-30 27.80% 16.32% 1.099x
64 2011-10-31 … 2016-10-31 25.43% 14.02% 1.100x
65 2011-11-30 … 2016-11-30 27.39% 14.66% 1.111x
66 2011-12-30 … 2016-12-30 25.67% 14.92% 1.093x
67 2012-01-31 … 2017-01-31 25.27% 14.63% 1.093x
68 2012-02-29 … 2017-02-28 25.66% 14.78% 1.095x
69 2012-03-30 … 2017-02-28 25.20% 14.43% 1.094x
70 2012-04-30 … 2017-04-28 23.59% 14.61% 1.078x
71 2012-05-31 … 2017-05-31 27.32% 15.98% 1.098x
72 2012-06-29 … 2017-05-31 27.08% 15.44% 1.101x
73 2012-07-31 … 2017-07-31 28.39% 15.43% 1.112x
74 2012-08-31 … 2017-08-31 29.05% 15.12% 1.121x
75 2012-09-28 … 2017-08-31 28.98% 14.77% 1.124x
76 2012-10-31 … 2017-10-31 29.83% 16.12% 1.118x
77 2012-11-30 … 2017-11-30 30.80% 16.79% 1.120x
78 2012-12-31 … 2017-12-29 29.37% 16.93% 1.106x
79 2013-01-31 … 2018-01-31 31.00% 17.57% 1.114x
80 2013-02-28 … 2018-02-28 32.47% 16.21% 1.140x
81 2013-03-28 … 2018-02-28 31.72% 15.81% 1.137x
82 2013-04-30 … 2018-04-30 27.91% 14.25% 1.120x
83 2013-05-31 … 2018-05-31 25.64% 14.57% 1.097x
84 2013-06-28 … 2018-05-31 26.14% 14.97% 1.097x
85 2013-07-31 … 2018-07-31 24.05% 14.83% 1.080x
86 2013-08-30 … 2018-07-31 25.59% 15.59% 1.087x
87 2013-09-30 … 2018-09-28 24.79% 15.84% 1.077x
88 2013-10-31 … 2018-10-31 20.24% 12.89% 1.065x
89 2013-11-29 … 2018-10-31 20.29% 12.60% 1.068x
90 2013-12-31 … 2018-12-31 18.12% 9.93% 1.074x
91 2014-01-31 … 2019-01-31 19.28% 12.37% 1.061x
92 2014-02-28 … 2019-02-28 17.03% 12.38% 1.041x
93 2014-03-31 … 2019-03-29 18.42% 12.76% 1.050x
94 2014-04-30 … 2019-04-30 20.46% 13.73% 1.059x
95 2014-05-30 … 2019-04-30 19.03% 13.54% 1.048x
96 2014-06-30 … 2019-06-28 21.17% 12.81% 1.074x
97 2014-07-31 … 2019-07-31 20.80% 13.30% 1.066x
98 2014-08-29 … 2019-07-31 19.87% 12.80% 1.063x
99 2014-09-30 … 2019-09-30 18.45% 12.70% 1.051x
100 2014-10-31 … 2019-10-31 18.59% 12.91% 1.050x
101 2014-11-28 … 2019-10-31 18.52% 12.60% 1.053x
102 2014-12-31 … 2019-12-31 22.58% 14.16% 1.074x
103 2015-01-30 … 2019-12-31 23.20% 14.85% 1.073x
104 2015-02-27 … 2020-01-31 22.69% 14.04% 1.076x
105 2015-03-31 … 2020-03-31 19.51% 8.56% 1.101x
106 2015-04-30 … 2020-04-30 23.31% 11.65% 1.104x
107 2015-05-29 … 2020-05-29 23.46% 12.61% 1.096x
108 2015-06-30 … 2020-06-30 23.22% 13.64% 1.084x
109 2015-07-31 … 2020-07-31 24.62% 14.60% 1.087x
110 2015-08-31 … 2020-08-31 28.95% 18.07% 1.092x
111 2015-09-30 … 2020-09-30 28.64% 17.05% 1.099x
112 2015-10-30 … 2020-10-30 25.92% 14.60% 1.099x
113 2015-11-30 … 2020-11-30 31.04% 17.43% 1.116x
114 2015-12-31 … 2020-12-31 32.26% 18.65% 1.115x
115 2016-01-29 … 2021-01-29 44.12% 19.26% 1.208x
116 2016-02-29 … 2021-02-26 44.54% 19.79% 1.207x
117 2016-03-31 … 2021-03-31 45.79% 19.42% 1.221x
118 2016-04-29 … 2021-03-31 46.41% 19.66% 1.224x
119 2016-05-31 … 2021-05-28 45.90% 20.42% 1.212x
120 2016-06-30 … 2021-06-30 44.48% 21.06% 1.193x
121 2016-07-29 … 2021-06-30 43.40% 20.63% 1.189x
122 2016-08-31 … 2021-08-31 43.43% 21.75% 1.178x
123 2016-09-30 … 2021-09-30 41.46% 20.22% 1.177x
124 2016-10-31 … 2021-10-29 46.17% 22.50% 1.193x
125 2016-11-30 … 2021-11-30 43.27% 21.87% 1.176x
126 2016-12-30 … 2021-11-30 44.80% 21.75% 1.189x
127 2017-01-31 … 2022-01-31 38.84% 20.17% 1.155x
128 2017-02-28 … 2022-02-28 37.08% 18.51% 1.157x
129 2017-03-31 … 2022-03-31 38.49% 19.46% 1.159x
130 2017-04-28 … 2022-03-31 39.37% 19.46% 1.167x
131 2017-05-31 … 2022-05-31 37.50% 15.59% 1.190x
132 2017-06-30 … 2022-06-30 35.03% 13.08% 1.194x
133 2017-07-31 … 2022-07-29 33.87% 15.16% 1.162x
134 2017-08-31 … 2022-08-31 31.34% 13.72% 1.155x
135 2017-09-29 … 2022-08-31 31.57% 13.56% 1.159x
136 2017-10-31 … 2022-10-31 31.73% 11.86% 1.178x
137 2017-11-30 … 2022-11-30 31.93% 12.52% 1.172x
138 2017-12-29 … 2022-11-30 32.50% 12.46% 1.178x
139 2018-01-31 … 2023-01-31 28.07% 11.01% 1.154x
140 2018-02-28 … 2023-02-28 24.52% 11.03% 1.122x
141 2018-03-29 … 2023-02-28 25.60% 11.72% 1.124x
142 2018-04-30 … 2023-04-28 25.93% 13.01% 1.114x
143 2018-05-31 … 2023-05-31 24.55% 12.95% 1.103x
144 2018-06-29 … 2023-05-31 25.30% 13.01% 1.109x
145 2018-07-31 … 2023-07-31 27.88% 14.67% 1.115x
146 2018-08-31 … 2023-08-31 25.80% 13.51% 1.108x
147 2018-09-28 … 2023-08-31 27.12% 13.56% 1.119x
148 2018-10-31 … 2023-10-31 26.55% 12.60% 1.124x
149 2018-11-30 … 2023-11-30 29.03% 14.58% 1.126x
150 2018-12-31 … 2023-12-29 32.87% 17.26% 1.133x
151 2019-01-31 … 2024-01-31 33.36% 16.27% 1.147x
152 2019-02-28 … 2024-01-31 33.37% 15.94% 1.150x
153 2019-03-29 … 2024-03-28 35.77% 17.50% 1.155x
154 2019-04-30 … 2024-04-30 32.25% 15.50% 1.145x
155 2019-05-31 … 2024-05-31 34.40% 18.12% 1.138x
156 2019-06-28 … 2024-06-28 34.17% 17.99% 1.137x
157 2019-07-31 … 2024-07-31 32.85% 17.70% 1.129x
158 2019-08-30 … 2024-08-30 33.41% 18.41% 1.127x
159 2019-09-30 … 2024-09-30 36.21% 18.65% 1.148x
160 2019-10-31 … 2024-10-31 35.11% 17.87% 1.146x
161 2019-11-29 … 2024-11-29 36.99% 18.64% 1.155x
162 2019-12-31 … 2024-12-31 32.96% 17.62% 1.130x
163 2020-01-31 … 2025-01-31 34.10% 18.07% 1.136x
164 2020-02-28 … 2025-02-28 32.45% 19.00% 1.113x
165 2020-03-31 … 2025-03-31 29.72% 19.24% 1.088x
166 2020-04-30 … 2025-04-30 26.46% 16.49% 1.086x
167 2020-05-29 … 2025-04-30 25.74% 15.80% 1.086x
168 2020-06-30 … 2025-06-30 26.12% 18.19% 1.067x
169 2020-07-31 … 2025-07-31 24.62% 17.87% 1.057x
170 2020-08-31 … 2025-08-29 22.68% 16.69% 1.051x
171 2020-09-30 … 2025-09-30 25.76% 18.57% 1.061x
172 2020-10-30 … 2025-09-30 26.65% 19.43% 1.061x
173 2020-11-30 … 2025-11-28 23.05% 17.77% 1.045x
174 2020-12-31 … 2025-12-31 23.87% 16.92% 1.059x
175 2021-01-29 … 2025-12-31 17.02% 17.20% 0.998x
176 2021-02-26 … 2026-01-30 21.15% 17.04% 1.035x
177 2021-03-31 … 2026-03-31 17.41% 14.07% 1.029x
178 2021-04-30 … 2026-04-30 17.09% 16.03% 1.009x
179 2021-05-28 … 2026-04-30 17.58% 16.22% 1.012x
Notes
mode=explore; family=recovery-quality-contrarian-52w-hybrid New hybrid family that combines the strongest parent ideas with an explicit arbitration ladder instead of a flat blend: contrarian drawdown entry, repair confirmation, and sparse-fundamental durability each get a turn to lead only when their preconditions are met. Strong tapes let repaired names and shallow 52-week-high pullbacks outrank deep value traps; mixed tapes require a quality-plus-liquidity quorum before a turnaround can score; risk-off tapes only admit contrarian candidates if low-vol, income support, and tradability confirm durability. When contrarian drawdown and trend-repair disagree, the script resolves the conflict with a quorum gate rather than averaging both sides. Deliberate metric coverage this run: use one short-horizon shakeout metric, one medium-horizon return, one momentum metric, both recovery distance metrics, volatility, all three liquidity metrics, both income metrics, two valuation metrics, three growth metrics, both quality metrics, and one explicit size tilt. Deliberate weight-0 metrics this run: return_3m_pct, return_12m_pct, pe, eps_growth_pct, revenue_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 clusters are intentionally thinned, and sparse fundamentals are normalized by present weights so missing fields do not auto-zero a stock.
Lesson notes
#868 · degrade · relative_return Δ -0.3418 · parent exp_1123 · Jul 21, 2026 · auto/explore; benchmark CAPW_UNIV
explore/recovery-quality-contrarian-52w-hybrid: relative_return 1.0867x (delta -0.3418 vs exp_1123); win-rate 90.5028%, worst-window 0.975433, dispersion 10.7482%.
Monthly picks — top stocks selected each month (whole timeline)
timeline — 240 months · top 15 each
Month 123456789101112131415
2006-07-31 GOOGL GE GOOG C BAC JNJ T MO KO XOM PG SLG WFC PFE PEP
2006-08-31 GRMN NUE FTI ILMN STLD TEX CME GOOG GS SLB GOOGL ODFL R AAL COP
2006-09-29 ILMN LVS ADM PWR WYNN CVS OXY ODFL SBAC VRTX TEX MO MTW AAL XRAY
2006-10-31 AKAM HUM GEN DDS MAY MSI FLEX UHS MOLX COHR BKNG ADM IDXX PFE MA
2006-11-30 ALGN ILMN AT TROW BLS CMI INTU ANF REGN APCC BMET CRM BKNG AKAM SWY
2006-12-29 MAY MA EQIX PTC CRM APH REGN ORCL LRCX ICE ALGN ILMN AAPL BBWI GOOG
2007-01-31 MAY UAL AT LVLT OMX FFIV EXPE BJS BKNG BMET IGT NVDA MOS BIG TEX
2007-02-28 MA ALGN WYNN UAL AKAM CBRE UIS KMX DOC ATI UAA PSA TWX MGM GT
2007-03-30 CF MAY ICE ON ALGN WYNN UIS MGM FSLR SLG WY VTR DOC KMX MA
2007-04-30 CF BG UIS TTWO ICE MAY REG DOC MAR ASN HST CRM COR WYNN LVS
2007-05-31 ALGN GT ICE ANDV WYNN REGN CF INCY ON ES EL SPG ADI CE MNST
2007-06-29 ANDV CLF DLX GT NRG AMZN CTRA ETR MAT ATI MA KR STLD ICE TTWO
2007-07-31 CF KMG CE MTW DLX PWR EXPE VRSN AXON VLO TSN NRG FIS GWW MOS
2007-08-31 FSLR AXON FCX DECK ALGN CE AT TEX MA ICE BWA CAT LRCX UNP MLM
2007-09-28 VRTX UAA PPL AOS KLAC PAYX MCHP AT PWR DLX KSE VLO MLM DLTR IEX
2007-10-31 GRMN AMZN NVDA AXON MPWR FTI SLB CMI NOV GME AL EBAY BKR WYNN MGM
2007-11-30 FTI NOV FLR NDAQ CMG GRMN MGM AMZN CLF CMI FCX AL AAPL SLB WYNN
2007-12-31 HPQ GOOGL GOOG JNJ PG KO AAPL MO INTC PEP MRK MCD WMT XOM PENN
2008-01-31 GS MSFT GOOGL PG GOOG JNJ KO MO HPQ XOM PEP AAPL ESRX CVX AMZN
2008-02-29 GS XOM GE CVX IBM LMT D DVN COP HAL GD CB NOC PG CAT
2008-03-31 XOM CVX GE IBM LMT COP D MMM HAL GD SLB NOC CB TRV PG
2008-04-30 GE CVX IBM XOM APA DVN D LMT HAL ALL MMM COP DE SLB GD
2008-05-30 MOS CF DE MA APA DVN OXY FSLR BKNG XOM RTX EOG AEP MHK TRV
2008-06-30 IBM CVX XOM OXY COP D DVN LMT MHK BA HAL CAT GD PH SLB
2008-07-31 CVX IBM OXY COP MA DVN D HAL GS SLB LMT XOM ABT BA AZO
2008-08-29 CF MOS APA BTUUQ OXY CLF GS AMT FSLR ESV SLB IBM MEE COP NAV
2008-09-30 D IBM GE GS MCD DVN LMT AON AZO COP ED GD XOM CVX JNJ
2008-10-31 D IBM MCD GE COP XOM AON ED CVX LMT AZO JNJ PG MHK WMT
2008-11-28 D MCD XOM IBM ED CVX AON AZO COP PG JNJ LMT WMT ABT GD
2008-12-31 CVX XOM JNJ MCD ABT IBM COP AON ED PG LMT RTX AZO AMGN GD
2009-01-30 XOM CVX MCD JNJ ABT IBM COP AON DVN ED APA AZO LMT PG RTX
2009-02-27 XOM CVX MCD JNJ IBM ABT ED OXY AON AZO RTX LMT PG AMGN BMY
2009-03-31 CVX XOM IBM UPS MCD JNJ AZO PG OXY BMY AON ED AMGN AMT RTX
2009-04-30 CVX IBM XOM UPS AZO MCD JNJ OXY BMY PG AON ED AMGN BKNG LMT
2009-05-29 IBM XOM UPS AZO JNJ OXY CVX MCD PG BMY LMT BKNG AON ED AMGN
2009-06-30 IBM DRI V OXY LIN MS EOG SPGI WBD MCHP EBAY AZO AAPL AMT BKNG
2009-07-31 V OXY EBAY MCD SPGI AZO MCHP MS NFLX WBD DRI SLB AMT JNJ BLK
2009-08-31 ISRG AZO CCI MCHP WHR EOG AMGN ADBE LIN GILD MOS GT WBD EBAY BEN
2009-09-30 WHR F BKNG MTG FITB IP FMCC QCOM WBD V FNMA AAPL COF AZO LEN
2009-10-30 BKNG WBD GS EBAY AAPL HIG CCI GNW EOG ISRG WHR STX THC EXPE CAR
2009-11-30 GS BKNG GNW BC STX HIG MAC MSFT LVS CB ISRG JBL URI KMX WBD
2009-12-31 BKNG WBD KMG GS GE ISRG DDR CCI FCX LVS MSFT GNW WYNN HIG LPX
2010-01-29 BKNG MSFT GGP WBD LULU SLG WHR SPG UAL CCI AAPL DDS STX AMD WFM
2010-02-26 BKNG ISRG CCI AMD AMT DDS LULU MCO SYK CI MSFT AMZN MTW PFE ULTA
2010-03-31 F BKNG SANM ISRG CI UIS GGP STX WDC BBWI DPZ AAL GD LYV GILD
2010-04-30 BKNG MTG INCY CLF LULU GNW F AAL UAL BBWI AMD CI LYV NFLX SANM
2010-05-28 BBWI UAL DPZ BKNG F ISRG SANM BC INCY WLL FAST ZION GGP AIV DRI
2010-06-30 VZ IBM BMY TRV MO PG GE AZO DUK SO T JNJ ED INTC PEG
2010-07-30 VZ AZO IBM BMY NEM CB AAPL TRV PG T SBUX SO PEG GE ED
2010-08-31 IBM NEM CB AZO GS VZ AAPL TRV BMY JPM HON AXP MMM PG INTC
2010-09-30 NEM AXP AZO BKNG CB NTAP MBI MRO WY F AAL KDP DRI BBWI NFLX
2010-10-29 BKNG NTAP NEM AZO NFLX GS CB BBWI MRO MBI AXP BMY ADI AAPL CI
2010-11-30 NTAP BKNG AZO CB GS UAL INTU EXPE BMY CDNS LVS TXN MCO URI NEM
2010-12-31 BKNG LVS NFLX AZO FFIV VRTS MRVL CMG DECK UAL ANF TXN KMX GS UAA
2011-01-31 ANF AZO GS RCL MOS ETFC BKNG BBWI BLK MRVL WHR WLL NTAP WDC LVS
2011-02-28 ETFC NFLX MAY RCL NVDA NTAP GS MOS BKNG WLL BLK LVS MU URI AMAT
2011-03-31 MOS TER URI COP NXPI ON AMAT SWKS WYNN MAY XOM TXN EBAY ETFC BKNG
2011-04-29 TER URI MOS COP BKNG KLAC WY MU LULU CVX NFLX WYNN ROK MAY BLK
2011-05-31 VLO LULU CAT BKNG MU NXPI URI COP MOS KKR KLAC TER WYNN MAY CVX
2011-06-30 VLO CF BKNG WYNN ANF REGN TER MCO KLAC KKR GE NFLX CHTR IPGP PFE
2011-07-29 VLO PFE CAT AZO COP NFLX MCO EP TMUS UAA IPGP COG REGN WCG WYNN
2011-08-31 IBM AAPL COP CVX VZ CAT AZO DUK FCX T ED XOM INTC BBWI SPG
2011-09-30 IBM AAPL CVX XOM COP AZO DUK VZ CAT ED T SPG GE JNJ BKNG
2011-10-31 IBM AAPL AZO XOM DUK VZ COP CVX ED T AEP GE SPG MCD KLAC
2011-11-30 IBM VZ AAPL XOM AZO ED COP CAT GE INTC CVX T MCD ADI BKNG
2011-12-30 IBM VZ AAPL XOM AZO ED COP GE INTC MCD CAT CVX V BKNG MO
2012-01-31 GE MCO VZ ED AZO COP XOM KLAC BLK MA MHK SPG BMY FTNT MCD
2012-02-29 GILD URI KLAC AZO AAPL GE AEP EOG CF SPG CAT ALK IBM BLK APOL
2012-03-30 CF URI AAPL EOG OXY CAT COG AZO BKNG MCD VMC AIG BLK FLS SPG
2012-04-30 AAPL BLK BKNG URI FAST KLAC QCOM GE AZO COP NXPI SPG EOG VLO WCG
2012-05-31 STX ISRG BKNG URI AAPL ORLY AIG CF AZO SPG KLAC MSFT EC MTCH GILD
2012-06-29 STX BKNG VRTX URI AAPL AZO TSCO CMG UAA YUM M LULU EC ORLY SPG
2012-07-31 AIG BKNG ISRG AAPL WBD STX IDXX MNST INTC LEN COP DG LIN AZO ADBE
2012-08-31 STX EXPE BKNG VRTX AZO AAPL ALL WDC SPG AMGN MO GE QCOM CF KLAC
2012-09-28 STX VRTX WDC LPX PHM AAPL SPG ALL CHTR CF LEN AMGN EXR VLO MHK
2012-10-31 STX AAPL LULU VRTX WDC VLO ANDV GE ALL ROST CF MO DG MTCH QCOM
2012-11-30 PHM STX DHI GNRC AAPL ALL KBH GE WHR GS KKR AIG CHTR AMGN TRV
2012-12-31 REGN ALL CF WHR BBBY PHM AMGN STX GILD GNRC LULU GPS DHI GS AZO
2013-01-31 STX LULU PHM BBBY LEN ALL WHR AXON LPX GS F WDC BKNG TRV BLK
2013-02-28 LEN STX PHM GS GNRC ALL F REGN WHR LKQ BLK MCO RCL KBH HFC
2013-03-28 KKR MHK GS EXPE AOS GNRC APO BKNG ORCL VLO WDC PHM GILD BC AMGN
2013-04-30 MHK KKR AMGN VLO THC GILD FNMA WDC MPC AOS GS ANDV PSX HRB STX
2013-05-31 PHM KKR GME BEN AMGN PFE BLK APO MHK PSA CPB VLO LEN KBH WDC
2013-06-28 BLK MCO PHM GS VLO NFLX REGN WDC FMCC GILD SVU AOS KKR FNMA FSLR
2013-07-31 STX WDC KKR BKNG MSFT FMCC FSLR FNMA BMY MU VLO MHK PHM BLK DXCM
2013-08-30 REGN MTG MCO BLK DAL SVU BBBY JPM GS CSCO JNJ WDC GNW BKNG FNMA
2013-09-30 CI BKNG META BBY FL GME REGN BBBY MTG EA JPM WYNN CBOE TSN BLK
2013-10-31 META REGN TSLA MU BKNG GT WYNN CIEN SVU MGM MA FNMA FMCC BBY MCO
2013-11-29 META FL EOG SLB BBY BKNG FANG GME OMX AXON MU REGN DAL CMG BX
2013-12-31 REGN BKNG META BBY MU AXON DAL FMCC BX FL FNMA MA URI VLO NFLX
2014-01-31 MU MA FNMA BKNG FMCC META BA URI BX VLO V AOS ABBV GS DECK
2014-02-28 MU META VLO BX INCY URI PHM BKNG SMCI TKO WYNN MA ILMN REGN RRD
2014-03-31 META BKNG WYNN ILMN MU FNMA FMCC DXCM MTCH PANW FRX URI AAL NFLX INCY
2014-04-30 AAL META BKNG URI MU WYNN PANW MTCH BX FNMA ILMN STX FMCC V UAL
2014-05-30 META MU URI WYNN FMCC FNMA ON RCL TSLA LUV AAL DAL AZO ILMN BX
2014-06-30 BKNG DAL MU URI META WYNN AAL LUV FMCC EOG UAL FNMA RCL FRX WLL
2014-07-31 MU NFX FANG URI DAL AAL TRGP EOG CAR NFLX SLB META WLL HAL HP
2014-08-29 MU COP GILD HAL NXPI URI WDC INTC LUV SMCI EOG AAL LRCX BKNG TWX
2014-09-30 GILD COP MU NXPI LUV TPL URI DAL TRGP WDC META NFLX RCL HAL MRO
2014-10-31 MU META GILD ENPH UAA NXPI LUV TRGP BKNG BBY ISRG ABBV INTC WDC GS
2014-11-28 GILD MU ABBV META LUV BLK AMGN NOW GS WMB CRM EW NXPI LRCX SMCI
2014-12-31 GILD MU GD RCL PAYC LUV AMGN AAPL META EXPE EW LRCX UAL BLK AMAT
2015-01-30 RCL AMAT MU AMGN AZO AAL BBY GD INTC KLAC BLK ABBV MCO TRV META
2015-02-27 UAL RCL PLD ED DAL AEP LUV ALK AAL AXON LULU GILD IRM GD AZO
2015-03-31 GILD MO AMAT LULU BKNG AZO CI DRI AAPL UAL NVDA WHR BBWI SBUX ON
2015-04-30 DRI SWKS AZO CI VLO LUV ON INCY NCLH KSS AAL LULU CNC UAA SBUX
2015-05-29 BLDR LULU AZO BKNG BBWI DRI KSS SBUX MNST AXON UAA CI GS NFX FANG
2015-06-30 PAYC GILD AAPL BLK COST CZR GE TXN MO HAS GS BKNG AZO NVDA BX
2015-07-31 CI GS BTUUQ PAYC GILD GE ADI BBWI HAS IBKR AAPL BLK SBUX SWKS PSX
2015-08-31 GE GILD SPG PSA AZO CCI GS SBUX JPM BLK DRI MHK MO BKNG TRV
2015-09-30 GE SPG GILD PSA CCI AZO GS JPM SBUX MO CB BKNG TRV DRI GD
2015-10-30 GE PSA SPG AZO GILD BLK CCI JPM MO SBUX PLD MMM CB BKNG TRV
2015-11-30 BKNG GILD HAS UAL EXPE SPG AMZN MHK AZO GE CI GOOGL D PSA REGN
2015-12-31 GE PSA SPG GOOGL CCI AZO AMZN MCD MO AMGN PLD PSX BKNG META MMM
2016-01-29 GE PSA SPG GOOGL MCD CCI AZO AMGN MO PLD AMZN COST BKNG MMM T
2016-02-29 T GE VZ SPG PSA MCD GOOGL CCI AZO AMGN MO META AMZN ED TRV
2016-03-31 BKNG AMZN ETN KLAC T PSA AZO ANET VZ CI ABBV AMGN GE UAL META
2016-04-29 PSA GOOGL KLAC ETN AZO VZ IBM DPZ HRL SPG MSFT T GE TRV META
2016-05-31 BKNG ETN MCD CLF EMR GE T SPGI META SPG AZO RRC PSA VZ ABBV
2016-06-30 SPGI ABBV META GOOGL BLK FAST IBM HPQ WHR NXPI ADBE BKNG MHK T AMGN
2016-07-29 PSA CCI GE MCD T TRV BKNG SPG OKE AZO RRC SPGI KLAC INTU VZ
2016-08-31 CLF DHR NVDA T SPGI NEM PLD DXC KLAC ULTA O ISRG TXN URI AMT
2016-09-30 NVDA DHR AMD SPGI CLF K AMAT PAYC EBAY GNW WMB NEM URI META TXN
2016-10-31 WB NVDA EBAY SPGI STX DHR JOY IDXX AMAT HPQ WMB AOS ETSY CTAS WDC
2016-11-30 DHR SPGI META WB ISRG BKNG CLF NVDA QCOM PYPL PAYC TXN ETSY MSFT KLAC
2016-12-30 NVDA FMCC FNMA BBY CLF KSS FL QCOM BKNG DHR LITE ADI SPGI UIS NOC
2017-01-31 NVDA AMD DAL GS AAL FMCC NBR UAL C STLD BBY CLF ANET URI UIS
2017-02-28 NVDA URI TPL WDC CLF COHR NBR BBY FNMA ADI KLAC BKNG FL X FMCC
2017-03-31 NVDA GS URI CFG LNC AMGN LUV INCY RF ANET TTD KLAC BKNG AMAT AAL
2017-04-28 NVDA GS AMD URI ADI AMAT ANET ON KLAC INCY NRG STX BKNG IBM LITE
2017-05-31 LRCX NVDA GS ANET NCLH BKNG AMAT STX KLAC MS META ADBE VRTX BX WDC
2017-06-30 NVDA LRCX AMAT TTD KLAC WB VRTX ANET ADI ADSK TTWO NFLX VEEV BKNG BX
2017-07-31 MU VRTX NVDA ANET WDC LRCX PYPL AMAT BKNG REGN GS BX HAS ADBE ABBV
2017-08-31 BKNG VRTX BX BBY NVDA META DE BA REGN RCL LITE AMAT ADBE GS KLAC
2017-09-29 VRTX REGN NVDA RCL WB BKNG ADBE BA META ANET SEDG FSLR BX CHTR LRCX
2017-10-31 VRTX MU WB ABBV AMAT NVDA AMGN SEDG BLK URI ANET SPGI BX BA META
2017-11-30 MU VRTX AMAT SEDG LRCX XYZ TER MCHP NVDA ON ANET NOW META ABBV BBBY
2017-12-29 MU AMAT NVDA LRCX SEDG IPGP VRTX ALGN WB ADBE ISRG ANET AZO CI ABBV
2018-01-31 MU SEDG ABBV BBBY WYNN BLK ANET KBH LRCX ALL FSLR TXN AZO DVN MTCH
2018-02-28 ANET EC AZO KKR ABBV BLK MU BBBY TXN MPC NOW MTCH BA VRTX CI
2018-03-29 ANET MU BA FCX AZO CAT NXPI URI PYPL TXN BLK RCL ABBV CF MCO
2018-04-30 SPG PSX AEP PSA NXPI BA BKNG CCI COST BLK GD MCO CSCO V EXR
2018-05-31 ANET ANF SEDG PAYC NKTR BKNG MTCH ETSY ALL PSX FCX BLK MU EC STX
2018-06-29 MU BLK VLO THC ANF ANET NVDA ADBE PSX INTC SEDG MTCH EC PAYC BKNG
2018-07-31 ETSY MU TTD ANF DPZ ANET ENPH PSA SEDG NOW MCO STX AXON XYZ CVNA
2018-08-31 MU AXON THC PSX M BKNG MOS ETSY CMG ANF TRIP STX EXPE SEDG TKO
2018-09-28 CVNA CMG ETSY PSX AXON LULU KSS TTD PAYC MOS FTNT MPWR ANET PSA CTAS
2018-10-31 CCI AVGO VZ EXR SPG AEP AMGN BA D AAPL MO AMZN V T GOOGL
2018-11-30 CCI EXR VZ PSA CVX MO SPG BA XOM WFC NKE MCD AMGN T PG
2018-12-31 CCI EXR PSA VZ BEN SPG ABBV CVX MCD SBUX AMGN DUK PG BA D
2019-01-31 CCI EXR VZ PSA CVX MCD SPG PFE AMGN PG SBUX D DUK V T
2019-02-28 MOS AMD EXR CCI KO PHM FMCC FNMA KDP LRCX GM PSA COP LW TRIP
2019-03-29 ETSY ENPH AZO TTD BA AMD MTCH FTNT CAT CIEN CCI LRCX AVGO MRNA LIN
2019-04-30 AMD FNMA FMCC AZO ETSY ENPH CCI TTD NFLX KLAC CAT CDNS MTCH LLY BLK
2019-05-31 LLY CCI AZO LIN CVX PEP T EXR AMZN BLK GS SO JPM AXP LMT
2019-06-28 MTCH ETSY LLY FNMA AZO CCI LEN FMCC META NFLX AXON CVNA MTG PEP LIN
2019-07-31 AZO QCOM ERIE LIN PEP MTCH WBD WDAY PYPL TTD NOW CCI NEM CVNA XRX
2019-08-30 GS ENPH QCOM AZO TTD CDNS BLK HAS NOW PGR AXP CF ADI ORCL PYPL
2019-09-30 ENPH QCOM SBUX AZO DIS CDNS NOW GD MU META EXR MTCH SBAC MKTX PYPL
2019-10-31 ENPH SEDG PODD EXR NWL SBUX CMG QCOM EL AZO TXN FNMA KLAC LMT PEP
2019-11-29 WHR SEDG QCOM TSLA KLAC ENPH MPC LRCX MTCH NEM AZO BMY T LMT TER
2019-12-31 XRX ENPH QCOM WHR BMY LMT REGN PODD GS LEN TGT LEG CVNA KLAC PSX
2020-01-31 QCOM XRX BMY SEDG TER ENPH TGT LEG KLAC CVS AMGN LKQ LLY SWKS STX
2020-02-28 LLY JNJ LMT GS BLK PEP T BMY LIN JPM AMGN SO AZO NEM GOOGL
2020-03-31 LMT CCI LLY JPM NEM AMT ALL AMZN QCOM ABBV T EXR VZ CHTR AMD
2020-04-30 LMT LLY CCI IBM AZO REGN ABBV NEM ALL EXR AMT T AMZN QCOM NFLX
2020-05-29 LMT BLK IBM LLY CCI AZO NEM AMZN REGN ALL QCOM AMT NFLX KHC VZ
2020-06-30 IBM ABBV TSLA AZO CCI BLK LMT AMT CPB NEM REGN DPZ AMGN JNJ QCOM
2020-07-31 TSLA VRTX LLY NFLX GILD CVS PAYC V CI PH ENPH DPZ MU AZO ALL
2020-08-31 ETSY REGN DDOG FTNT NEM AMT BLK AON LRCX DHI BBBY ANET ENPH CCI MKTX
2020-09-30 TSLA REGN AMD META ETSY BLK ENPH AMZN NFLX AAPL EBAY BBBY CRM TER MS
2020-10-30 TSLA LOW ENPH NVDA CRWD ADBE AMD REGN SEDG XYZ DHI GME MCO UPS ETSY
2020-11-30 LOW SEDG BBY PGR TMO MPWR DDOG GE AAPL AMZN AZO CRM LEG ADBE WHR
2020-12-31 BBWI TTD WHR GE TSLA ANF CVNA ETSY NVDA PENN FDX XYZ GME ENPH AMD
2021-01-29 BLK ENPH ALL AMD TSLA SEDG ETSY TER TTD TUP FCX PG MPWR PGR AZO
2021-02-26 TUP ENPH TSLA MRNA GME DDS BLK M NWL PGR NTAP FCX CRWD DVN LOW
2021-03-31 FCX ETSY TUP NBR MRNA TPR ENPH GS TSLA OXY CZR PENN PYPL HAL TER
2021-04-30 GME DISCA DISCK OXY VIAC TPL ETSY KSS M KLAC CLF COP TUP TSLA TRIP
2021-05-28 KSS TPL GME AZO HPQ UAA DISCA DISCK TUP FCX GS TDC STX MHK OXY
2021-06-30 GME FCX STX BX MHK CAR GS NUE IVZ CI MOS DHI BEN KSS EXPE
2021-07-30 ANF FCX GS BX MRO ASO XOM TPL MPC COP RRC F IVZ MUR SLB
2021-08-31 MRNA BX FCX KKR DDS AZO GME EOG GS ANF CLF WFC STX QCOM MHK
2021-09-30 BX MRNA GS KKR DDS EXR FTNT BLK SBNY NVDA JWN AMD REGN SIVB ASO
2021-10-29 MRNA RRC BX MRO GS CMG KKR RRD DASH OXY M AZO MDP JWN CF
2021-11-30 KKR MRNA GS OXY BX COP CB CMG EOG M JWN WFC DXCM MRO BLK
2021-12-31 AMD BX NVDA TSLA KKR BBWI DDOG CAR MRNA MRO M COP JWN NFLX OXY
2022-01-31 CVX GILD EXR GS CB AZO BLK ABBV WFC REGN JPM TRV CCI XOM PSA
2022-02-28 CVX WY COP CB GS AZO WFC EXR XOM ABBV BLK TRV GILD REGN JPM
2022-03-31 COP CVX ABBV GS EXR SPG WFC XOM CB REGN WY T PFE LMT AZO
2022-04-29 COP CVX ABBV REGN GILD EXR CB T AZO PFE XOM CCI SBUX BMY C
2022-05-31 CVX XOM ABBV BMY PFE MO CCI PLD REGN T MPC WY LMT AMGN AMT
2022-06-30 XOM CVX BMY ABBV PFE AMT GILD CCI EOG T AMGN TXN LMT MO REGN
2022-07-29 XOM CVX ABBV BMY PFE AMT GILD T PSA CCI LMT VZ AMGN JNJ IBM
2022-08-31 CVX XOM AMGN BMY GS PSA PFE AZO AMT CCI T EXR ABBV VRTX TXN
2022-09-30 CVX XOM GS PFE PSA ABBV CCI EXR T AZO MO VRTX AMGN COP LMT
2022-10-31 CVX XOM GS ABBV PFE PSA BMY AZO AMGN MO EXR CCI COP PLD LMT
2022-11-30 DVN MRO COP OXY PSA EOG XOM CF MOS PAYC AZO CVX DXCM APA VLO
2022-12-30 COP EOG DVN MRO OXY VLO VRTX KLAC SMCI CF TPL FSLR AXON BMY BKNG
2023-01-31 APA DVN OXY MRO ABBV CVX AMGN AZO MRNA COP ISRG EOG GILD XOM MO
2023-02-28 CVX VLO BLK KLAC COP EOG VRTX NFLX LEN XOM APA FCX BEN ODP UCL
2023-03-31 URI PSX SPG UCL SLB BKNG CAT MTW BLK VLO MAR HES AZO MPC FTI
2023-04-28 MPC PSX ABNB URI VLO MCHP ADI NXPI MPWR BKNG PH AVGO KLAC PANW NFLX
2023-05-31 CCI XOM PSA MO BKNG V VRTX LEN AZO CVX LMT MCD GILD PANW AVGO
2023-06-30 CRWD BKNG META FSLR PLTR AMD TSLA EXR ANET SNPS PSA MPC APP BIIB GOOGL
2023-07-31 ANET AAL TSLA THC META F TEX PSA AON PANW AN BKNG CRWD ORCL CMG
2023-08-31 PLTR PHM SMCI UAL META CMG DAL TTD EOG LEN NFLX ISRG MPWR KLAC BLK
2023-09-29 PSX MO BLK AMGN JPM AZO ETN V HD COP CVX PH ADBE AON MA
2023-10-31 PSX CCI AMGN PSA BLK JPM AZO SPG HD AON V EMR XOM ABBV COP
2023-11-30 FNMA HAL SLB APP JBL CNX CPRI APA PHM EMR RRC VLO CHTR CI CMCSA
2023-12-29 PLTR CRWD PHM CVNA APP UBER IBM VRT ANF ADBE FTI SNPS SMCI BLK GPS
2024-01-31 DHI GPS PHM LULU X ANF FNMA CRWD ANET EXR COIN AVGO AMT WSM APP
2024-02-29 EXR FNMA BKNG ANF SMCI CRWD PANW ADBE EXPE NVDA AMGN ROST FMCC NOW CCI
2024-03-28 ANF PLTR ADCT SMCI NVDA CRWD UBER FNMA MPWR EXR ROST DDOG CCI META D
2024-04-30 ANF NVDA SMCI EXR DYN CRWD CVNA CRM COIN WSM UBER CAT NFLX FNMA PLTR
2024-05-31 COIN SMCI ANF DELL FNMA CVNA NVDA URI UBER EXR CEG META CAT FMCC VRT
2024-06-28 CEG VST NVDA URI DELL COIN QCOM VRT ANF EME WSM NRG FIX ETN DECK
2024-07-31 NVDA ANF META CEG APP COIN HOOD GPS AVGO CVNA VST PGR GOOGL QCOM NRG
2024-08-30 ANF NVDA GPS NTAP GS AMT CEG VST GOOGL EXR URI LUMN HOOD PGR JPM
2024-09-30 NVDA ANF GS AMT EXR JPM PGR KLAC DYN PANW REGN MO COST IBM BLK
2024-10-31 EXR AMT IBM LUMN HAS PGR PLTR PHM URI COHR ANF META COST VST NVDA
2024-11-29 CEG AVGO LUMN CVNA WYNN NVDA CCI URI PLTR FMCC COHR AMT FNMA GEV LDOS
2024-12-31 APP AXON URI RCL NVDA LUMN TTD ORCL PH CVNA GS LB VST CNX LITE
2025-01-31 NVDA PLTR AVGO TSLA BKNG NOW EXPE MRVL GEV FMCC ANET VST MIR FNMA LULU
2025-02-28 PLTR HOOD RCL GS APP CVNA IBKR UAL AVGO FMCC CRWD CCL NOW AMZN WSM
2025-03-31 GS BLK AMT PGR EXR AZO JPM MO META TRV SPG T PH AMZN NOC
2025-04-30 AMT JPM BLK AZO MO EXR PGR TRV T VZ PSA NOC AMGN DUK BMY
2025-05-30 AMT GILD NEM JPM BLK CI AZO MO ALL PGR UBER TRV AMGN VZ PSA
2025-06-30 FNMA PLTR ED DPZ ALL NEM PGR TMUS TSLA ISRG PAYC HOOD GILD TRV F
2025-07-31 HOOD AMT DG NFLX NEM UBER DRI PGR FTNT MPWR CAR GS KLAC MCHP YUM
2025-08-29 PLTR AMD CAR HOOD MOS EMR STX COIN VST TPR NCLH JBL GS ETN NEM
2025-09-30 COIN CCL AVGO UAL RCL AMD GS DAL NEM NFLX FNMA GILD CAR STX MCHP
2025-10-31 NEM URI ECHO STX COIN APP MU NCLH GS UAL AZO SEDG WYNN HOOD BLK
2025-11-28 MU ECHO UBER AMD HOOD MPWR STX KLAC NOC NEM URI APP BLK PLTR ANET
2025-12-31 WDC KSS STX NEM MU AMD M AVGO MPWR IDXX INTC PLTR KLAC FIX GOOGL
2026-01-30 NEM WDC M WBD ECHO EXPE KLAC MU AVGO LLY UAL AMD KSS GS ALL
2026-02-27 STX MU WDC GS KLAC NEM ECHO GOOGL LRCX M WBD TE IVZ ALB C
2026-03-31 GS JNJ GILD ALL SPG EXR AMGN TRV PSX AMT PFE CB LMT UPS COST
2026-04-30 GILD MU NEM PSX APA AMGN JNJ REGN GS TER CCI WDC LLY LMT MRK
2026-05-29 LITE VIAV NBR MU VRT NEM ALL WDC TER APA CF OXY PSX CCI ANET
2026-06-26 WDC STX MU DELL VIAV AMD LITE PSX CIEN MRVL FLEX CSCO TXN COHR CRWD
Scoring script (python)
FORMULA_NAME = "Recovery Quality Contrarian 52-Week Hybrid (Quorum Ladder, v1164)"
LOGIC_VARIANT_COUNT = 4
NOTES = """mode=explore; family=recovery-quality-contrarian-52w-hybrid
New hybrid family that combines the strongest parent ideas with an explicit arbitration ladder instead of a flat blend: contrarian drawdown entry, repair confirmation, and sparse-fundamental durability each get a turn to lead only when their preconditions are met. Strong tapes let repaired names and shallow 52-week-high pullbacks outrank deep value traps; mixed tapes require a quality-plus-liquidity quorum before a turnaround can score; risk-off tapes only admit contrarian candidates if low-vol, income support, and tradability confirm durability. When contrarian drawdown and trend-repair disagree, the script resolves the conflict with a quorum gate rather than averaging both sides.
Deliberate metric coverage this run: use one short-horizon shakeout metric, one medium-horizon return, one momentum metric, both recovery distance metrics, volatility, all three liquidity metrics, both income metrics, two valuation metrics, three growth metrics, both quality metrics, and one explicit size tilt. Deliberate weight-0 metrics this run: return_3m_pct, return_12m_pct, pe, eps_growth_pct, revenue_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 clusters are intentionally thinned, and sparse fundamentals are normalized by present weights so missing fields do not auto-zero a stock."""

def score_universe(stocks, regime, ctx):
    metrics = [
        "return_1m_pct",
        "return_6m_pct",
        "momentum_12_1_pct",
        "from_200d_ma_pct",
        "from_52w_high_pct",
        "realized_vol_3m",
        "avg_daily_volume_3m",
        "avg_daily_dollar_volume_3m",
        "trading_days_3m",
        "dividend_yield_ttm_pct",
        "dividend_ttm",
        "forward_pe",
        "peg",
        "operating_income_growth_pct",
        "free_cash_flow_growth_pct",
        "forward_eps",
        "operating_margin_pct",
        "free_cash_flow_margin_pct",
    ]
    zmap = {}
    for metric in metrics:
        zmap[metric] = ctx.z(metric)

    def raw(stock, key):
        return stock.get(key)

    def z(metric, symbol):
        vals = zmap.get(metric)
        if not vals:
            return None
        return vals.get(symbol)

    def clamp(x, lo, hi):
        if x < lo:
            return lo
        if x > hi:
            return hi
        return x

    def blend(symbol, spec):
        total = 0.0
        used = 0.0
        for metric, weight, sign in spec:
            val = z(metric, symbol)
            if val is None:
                continue
            total += weight * sign * clamp(val, -3.0, 3.0)
            used += weight
        if used == 0.0:
            return 0.0
        return total / used

    def size_tilt(stock, prefer_small):
        cap = raw(stock, "market_cap")
        if cap is None or cap <= 0:
            return 0.0
        if cap <= 4.0e9:
            base = 1.0
        elif cap <= 1.2e10:
            base = 0.55
        elif cap <= 3.0e10:
            base = 0.10
        elif cap <= 9.0e10:
            base = -0.20
        else:
            base = -0.55
        return base if prefer_small else -base

    def liquidity_score(stock, symbol):
        score = 0.0
        count = 0.0

        adv = raw(stock, "avg_daily_dollar_volume_3m")
        if adv is not None:
            count += 1.0
            if adv >= 2.0e7:
                score += 1.0
            elif adv >= 7.0e6:
                score += 0.7
            elif adv >= 2.0e6:
                score += 0.4

        av = raw(stock, "avg_daily_volume_3m")
        if av is not None:
            count += 1.0
            if av >= 2.5e6:
                score += 1.0
            elif av >= 8.0e5:
                score += 0.7
            elif av >= 2.0e5:
                score += 0.4

        td = raw(stock, "trading_days_3m")
        if td is not None:
            count += 1.0
            if td >= 62:
                score += 1.0
            elif td >= 59:
                score += 0.7
            elif td >= 56:
                score += 0.35

        if count == 0.0:
            return 0.0
        return score / count

    def quality_quorum(stock, symbol):
        score = 0.0
        count = 0.0
        for metric in [
            "operating_margin_pct",
            "free_cash_flow_margin_pct",
            "operating_income_growth_pct",
            "free_cash_flow_growth_pct",
            "forward_eps",
        ]:
            val = z(metric, symbol)
            if val is None:
                continue
            count += 1.0
            if val > 0.35:
                score += 1.0
            elif val > -0.15:
                score += 0.5
        if count == 0.0:
            return 0.0
        return score / count

    def income_support(stock, symbol):
        return blend(symbol, [
            ("dividend_yield_ttm_pct", 0.65, 1),
            ("dividend_ttm", 0.35, 1),
        ])

    def valuation_relief(stock, symbol):
        return blend(symbol, [
            ("forward_pe", 0.55, -1),
            ("peg", 0.45, -1),
        ])

    def repair_strength(stock, symbol):
        return blend(symbol, [
            ("from_200d_ma_pct", 0.36, 1),
            ("return_6m_pct", 0.24, 1),
            ("momentum_12_1_pct", 0.22, 1),
            ("return_1m_pct", 0.18, -1),
        ])

    def quality_strength(stock, symbol):
        return blend(symbol, [
            ("operating_margin_pct", 0.22, 1),
            ("free_cash_flow_margin_pct", 0.18, 1),
            ("operating_income_growth_pct", 0.16, 1),
            ("free_cash_flow_growth_pct", 0.16, 1),
            ("forward_eps", 0.12, 1),
            ("forward_pe", 0.10, -1),
            ("peg", 0.06, -1),
        ])

    def risk_strength(stock, symbol):
        return blend(symbol, [
            ("realized_vol_3m", 0.55, -1),
            ("avg_daily_dollar_volume_3m", 0.20, 1),
            ("avg_daily_volume_3m", 0.10, 1),
            ("trading_days_3m", 0.15, 1),
        ])

    def drawdown_shape(stock, symbol):
        dd = raw(stock, "from_52w_high_pct")
        if dd is None:
            return 0.0
        if dd > -4.0:
            return -0.40
        if dd > -10.0:
            return 0.20
        if dd > -22.0:
            return 1.00
        if dd > -35.0:
            return 0.85
        if dd > -48.0:
            return 0.35
        if dd > -65.0:
            return -0.05
        return -0.45

    def deep_contrarian_strength(stock, symbol):
        base = drawdown_shape(stock, symbol)
        z52 = z("from_52w_high_pct", symbol)
        if z52 is None:
            return base
        return 0.65 * base + 0.35 * clamp(-z52, -3.0, 3.0) / 2.0

    bull = regime.get("bull", 0.0)
    breadth = regime.get("breadth", 0.0)
    median_mom = regime.get("median_momentum_12_1_pct", 0.0)
    median_repair = regime.get("median_from_200d_ma_pct", 0.0)
    avg_vol = regime.get("avg_realized_vol_3m", 0.0)

    if bull >= 0.74 and breadth >= 0.60 and median_mom >= 5.0:
        branch = 0
    elif bull >= 0.56 and breadth >= 0.46 and median_repair >= -2.0:
        branch = 1
    elif bull >= 0.40 and breadth >= 0.36:
        branch = 2
    else:
        branch = 3

    scores = {}
    for stock in stocks:
        symbol = stock["symbol"]

        liq = liquidity_score(stock, symbol)
        quorum = quality_quorum(stock, symbol)
        repair = repair_strength(stock, symbol)
        quality = quality_strength(stock, symbol)
        risk = risk_strength(stock, symbol)
        contrarian = deep_contrarian_strength(stock, symbol)
        income = income_support(stock, symbol)
        value = valuation_relief(stock, symbol)

        dd = raw(stock, "from_52w_high_pct")
        above_200 = raw(stock, "from_200d_ma_pct")
        one_month = raw(stock, "return_1m_pct")

        knife_penalty = 0.0
        if dd is not None and dd < -52.0 and (above_200 is None or above_200 < -8.0):
            knife_penalty -= 0.55
        if repair < -0.35 and contrarian > 0.55:
            knife_penalty -= 0.35

        quality_gate = 0.0
        if quorum >= 0.66:
            quality_gate += 0.25
        elif quorum <= 0.20:
            quality_gate -= 0.25

        liquidity_gate = 0.0
        if liq >= 0.72:
            liquidity_gate += 0.18
        elif liq <= 0.28:
            liquidity_gate -= 0.30

        pullback_bonus = 0.0
        if one_month is not None:
            if -10.0 <= one_month <= -1.0:
                pullback_bonus += 0.18
            elif one_month > 12.0:
                pullback_bonus -= 0.12

        if branch == 0:
            repaired_leader = 0.0
            if repair > 0.20:
                repaired_leader = 0.22
            shallow_contrarian = 0.0
            if dd is not None and -24.0 <= dd <= -8.0 and (above_200 is None or above_200 > -2.0):
                shallow_contrarian = 0.18

            score = (
                0.34 * repair +
                0.23 * contrarian +
                0.15 * quality +
                0.10 * risk +
                0.08 * value +
                0.05 * income +
                0.05 * size_tilt(stock, True) +
                repaired_leader +
                shallow_contrarian +
                0.5 * pullback_bonus +
                quality_gate +
                liquidity_gate +
                knife_penalty
            )

        elif branch == 1:
            arbitration = 0.0
            if repair >= 0.10 and contrarian >= 0.25:
                arbitration += 0.24
            elif contrarian > 0.55 and quorum < 0.45:
                arbitration -= 0.28
            elif repair < -0.10 and contrarian > 0.35:
                arbitration -= 0.18

            score = (
                0.30 * repair +
                0.24 * contrarian +
                0.20 * quality +
                0.10 * risk +
                0.06 * value +
                0.05 * income +
                0.05 * size_tilt(stock, True) +
                arbitration +
                pullback_bonus +
                quality_gate +
                liquidity_gate +
                knife_penalty
            )

        elif branch == 2:
            turnaround_pass = 0.0
            if quorum >= 0.50 and liq >= 0.55:
                turnaround_pass += 0.20
            else:
                turnaround_pass -= 0.25

            if dd is not None and dd < -45.0 and quorum < 0.60:
                turnaround_pass -= 0.25
            if above_200 is not None and above_200 > 3.0:
                turnaround_pass += 0.12

            score = (
                0.27 * quality +
                0.24 * repair +
                0.18 * contrarian +
                0.12 * risk +
                0.08 * value +
                0.06 * income +
                0.05 * size_tilt(stock, False) +
                turnaround_pass +
                0.4 * pullback_bonus +
                quality_gate +
                liquidity_gate +
                knife_penalty
            )

        else:
            survivability = 0.0
            if risk > 0.10 and liq >= 0.60:
                survivability += 0.20
            else:
                survivability -= 0.25
            if quorum >= 0.55:
                survivability += 0.15
            if income > 0.05:
                survivability += 0.10
            if contrarian > 0.45 and repair < 0.0:
                survivability -= 0.22

            score = (
                0.28 * risk +
                0.24 * quality +
                0.14 * repair +
                0.12 * income +
                0.08 * value +
                0.08 * contrarian +
                0.06 * size_tilt(stock, False) +
                survivability +
                0.3 * quality_gate +
                liquidity_gate +
                knife_penalty
            )

        scores[symbol] = score

    return scores