exp_1148

Recovery Quality Contrarian 52W Hybrid (Arbitrated Relay, v1148)

← All V2 experiments
Relative return
1.015x
Excess vs bench
1.52%
Benchmark
CAPW_UNIV
Rolling windows
179 · monthly
Mean strategy gain
15.78%
Mean benchmark gain
14.08%
Mean excess gain
1.69%
Dispersion (ref)
6.01%
Win-rate vs bench (ref)
66.48%
Worst / best ratio (ref)
0.939x / 1.077x
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 9.37% 2.22% 1.070x
2011-07-01 … 2016-06-30 12.96% 13.74% 0.993x
2016-07-01 … 2021-06-30 21.98% 20.63% 1.011x
2021-07-01 … 2026-06-26 20.28% 15.48% 1.042x
All rolling windows — the objective set (equal-weighted mean ratio)
Strategy Benchmark (CAPW_UNIV) Excess
2006200720082009201020112012201320142015201620172018201920202021 -5%0%5%10%15%20%25%30%
rolling 5y windows, monthly step — 179 windows · mean ratio 1.015x · beat benchmark in 119/179
#WindowStrategyBenchmarkRatio
1 2006-07-31 … 2011-07-29 9.26% 1.79% 1.073x
2 2006-08-31 … 2011-08-31 7.27% 0.21% 1.070x
3 2006-09-29 … 2011-08-31 6.87% -0.14% 1.070x
4 2006-10-31 … 2011-10-31 6.81% 0.23% 1.066x
5 2006-11-30 … 2011-11-30 4.61% -0.05% 1.047x
6 2006-12-29 … 2011-11-30 4.63% -0.32% 1.050x
7 2007-01-31 … 2012-01-31 7.80% 0.93% 1.068x
8 2007-02-28 … 2012-01-31 8.53% 1.43% 1.070x
9 2007-03-30 … 2012-03-30 10.61% 3.09% 1.073x
10 2007-04-30 … 2012-04-30 10.30% 2.42% 1.077x
11 2007-05-31 … 2012-05-31 6.36% 0.60% 1.057x
12 2007-06-29 … 2012-06-29 7.67% 1.92% 1.057x
13 2007-07-31 … 2012-07-31 7.50% 2.69% 1.047x
14 2007-08-31 … 2012-08-31 8.25% 2.95% 1.051x
15 2007-09-28 … 2012-09-28 8.59% 3.20% 1.052x
16 2007-10-31 … 2012-10-31 7.43% 2.60% 1.047x
17 2007-11-30 … 2012-11-30 8.54% 3.45% 1.049x
18 2007-12-31 … 2012-12-31 8.38% 3.69% 1.045x
19 2008-01-31 … 2013-01-31 11.37% 5.85% 1.052x
20 2008-02-29 … 2013-02-28 11.76% 6.82% 1.046x
21 2008-03-31 … 2013-03-28 14.89% 7.73% 1.066x
22 2008-04-30 … 2013-04-30 15.11% 7.51% 1.071x
23 2008-05-30 … 2013-04-30 14.88% 7.81% 1.066x
24 2008-06-30 … 2013-06-28 15.89% 9.33% 1.060x
25 2008-07-31 … 2013-07-31 17.35% 10.48% 1.062x
26 2008-08-29 … 2013-07-31 17.53% 10.52% 1.063x
27 2008-09-30 … 2013-09-30 19.55% 11.48% 1.072x
28 2008-10-31 … 2013-10-31 23.54% 15.76% 1.067x
29 2008-11-28 … 2013-10-31 25.41% 17.46% 1.068x
30 2008-12-31 … 2013-12-31 26.45% 18.44% 1.068x
31 2009-01-30 … 2013-12-31 29.57% 20.64% 1.074x
32 2009-02-27 … 2014-01-31 29.51% 21.63% 1.065x
33 2009-03-31 … 2014-03-31 27.19% 20.60% 1.055x
34 2009-04-30 … 2014-04-30 23.68% 19.00% 1.039x
35 2009-05-29 … 2014-04-30 22.21% 18.32% 1.033x
36 2009-06-30 … 2014-06-30 24.35% 19.01% 1.045x
37 2009-07-31 … 2014-07-31 21.50% 17.39% 1.035x
38 2009-08-31 … 2014-08-29 21.91% 17.70% 1.036x
39 2009-09-30 … 2014-09-30 20.62% 16.64% 1.034x
40 2009-10-30 … 2014-09-30 21.39% 17.08% 1.037x
41 2009-11-30 … 2014-11-28 21.17% 16.82% 1.037x
42 2009-12-31 … 2014-12-31 20.55% 16.28% 1.037x
43 2010-01-29 … 2014-12-31 21.26% 17.23% 1.034x
44 2010-02-26 … 2015-01-30 19.94% 15.80% 1.036x
45 2010-03-31 … 2015-03-31 19.69% 15.40% 1.037x
46 2010-04-30 … 2015-04-30 21.06% 15.38% 1.049x
47 2010-05-28 … 2015-04-30 23.33% 17.09% 1.053x
48 2010-06-30 … 2015-06-30 22.75% 17.45% 1.045x
49 2010-07-30 … 2015-06-30 21.82% 16.43% 1.046x
50 2010-08-31 … 2015-08-31 19.89% 15.76% 1.036x
51 2010-09-30 … 2015-09-30 16.68% 13.61% 1.027x
52 2010-10-29 … 2015-09-30 15.88% 13.06% 1.025x
53 2010-11-30 … 2015-11-30 17.92% 15.09% 1.025x
54 2010-12-31 … 2015-12-31 15.46% 13.55% 1.017x
55 2011-01-31 … 2016-01-29 11.95% 11.90% 1.000x
56 2011-02-28 … 2016-01-29 11.77% 11.53% 1.002x
57 2011-03-31 … 2016-03-31 14.98% 12.90% 1.018x
58 2011-04-29 … 2016-04-29 14.15% 12.39% 1.016x
59 2011-05-31 … 2016-05-31 14.71% 12.94% 1.016x
60 2011-06-30 … 2016-06-30 12.86% 13.30% 0.996x
61 2011-07-29 … 2016-07-29 14.19% 14.52% 0.997x
62 2011-08-31 … 2016-08-31 15.57% 15.19% 1.003x
63 2011-09-30 … 2016-09-30 18.74% 16.32% 1.021x
64 2011-10-31 … 2016-10-31 14.52% 14.02% 1.004x
65 2011-11-30 … 2016-11-30 17.96% 14.66% 1.029x
66 2011-12-30 … 2016-12-30 17.57% 14.92% 1.023x
67 2012-01-31 … 2017-01-31 15.92% 14.63% 1.011x
68 2012-02-29 … 2017-02-28 16.64% 14.78% 1.016x
69 2012-03-30 … 2017-02-28 16.19% 14.43% 1.015x
70 2012-04-30 … 2017-04-28 16.56% 14.61% 1.017x
71 2012-05-31 … 2017-05-31 19.46% 15.98% 1.030x
72 2012-06-29 … 2017-05-31 18.61% 15.44% 1.027x
73 2012-07-31 … 2017-07-31 18.01% 15.43% 1.022x
74 2012-08-31 … 2017-08-31 17.90% 15.12% 1.024x
75 2012-09-28 … 2017-08-31 17.36% 14.77% 1.022x
76 2012-10-31 … 2017-10-31 19.42% 16.12% 1.028x
77 2012-11-30 … 2017-11-30 19.39% 16.79% 1.022x
78 2012-12-31 … 2017-12-29 20.39% 16.93% 1.030x
79 2013-01-31 … 2018-01-31 20.37% 17.57% 1.024x
80 2013-02-28 … 2018-02-28 19.54% 16.21% 1.029x
81 2013-03-28 … 2018-02-28 18.06% 15.81% 1.019x
82 2013-04-30 … 2018-04-30 16.22% 14.25% 1.017x
83 2013-05-31 … 2018-05-31 16.28% 14.57% 1.015x
84 2013-06-28 … 2018-05-31 17.17% 14.97% 1.019x
85 2013-07-31 … 2018-07-31 16.54% 14.83% 1.015x
86 2013-08-30 … 2018-07-31 16.93% 15.59% 1.012x
87 2013-09-30 … 2018-09-28 15.42% 15.84% 0.996x
88 2013-10-31 … 2018-10-31 12.13% 12.89% 0.993x
89 2013-11-29 … 2018-10-31 11.21% 12.60% 0.988x
90 2013-12-31 … 2018-12-31 8.03% 9.93% 0.983x
91 2014-01-31 … 2019-01-31 10.83% 12.37% 0.986x
92 2014-02-28 … 2019-02-28 10.43% 12.38% 0.983x
93 2014-03-31 … 2019-03-29 10.97% 12.76% 0.984x
94 2014-04-30 … 2019-04-30 11.46% 13.73% 0.980x
95 2014-05-30 … 2019-04-30 10.86% 13.54% 0.976x
96 2014-06-30 … 2019-06-28 7.55% 12.81% 0.953x
97 2014-07-31 … 2019-07-31 7.98% 13.30% 0.953x
98 2014-08-29 … 2019-07-31 7.56% 12.80% 0.954x
99 2014-09-30 … 2019-09-30 7.63% 12.70% 0.955x
100 2014-10-31 … 2019-10-31 7.40% 12.91% 0.951x
101 2014-11-28 … 2019-10-31 7.32% 12.60% 0.953x
102 2014-12-31 … 2019-12-31 11.12% 14.16% 0.973x
103 2015-01-30 … 2019-12-31 11.67% 14.85% 0.972x
104 2015-02-27 … 2020-01-31 8.87% 14.04% 0.955x
105 2015-03-31 … 2020-03-31 4.08% 8.56% 0.959x
106 2015-04-30 … 2020-04-30 6.63% 11.65% 0.955x
107 2015-05-29 … 2020-05-29 6.80% 12.61% 0.948x
108 2015-06-30 … 2020-06-30 7.06% 13.64% 0.942x
109 2015-07-31 … 2020-07-31 8.23% 14.60% 0.944x
110 2015-08-31 … 2020-08-31 10.93% 18.07% 0.940x
111 2015-09-30 … 2020-09-30 11.30% 17.05% 0.951x
112 2015-10-30 … 2020-10-30 8.65% 14.60% 0.948x
113 2015-11-30 … 2020-11-30 13.26% 17.43% 0.964x
114 2015-12-31 … 2020-12-31 16.43% 18.65% 0.981x
115 2016-01-29 … 2021-01-29 18.95% 19.26% 0.997x
116 2016-02-29 … 2021-02-26 19.74% 19.79% 1.000x
117 2016-03-31 … 2021-03-31 20.41% 19.42% 1.008x
118 2016-04-29 … 2021-03-31 20.64% 19.66% 1.008x
119 2016-05-31 … 2021-05-28 20.28% 20.42% 0.999x
120 2016-06-30 … 2021-06-30 22.72% 21.06% 1.014x
121 2016-07-29 … 2021-06-30 21.98% 20.63% 1.011x
122 2016-08-31 … 2021-08-31 23.35% 21.75% 1.013x
123 2016-09-30 … 2021-09-30 21.57% 20.22% 1.011x
124 2016-10-31 … 2021-10-29 23.85% 22.50% 1.011x
125 2016-11-30 … 2021-11-30 22.13% 21.87% 1.002x
126 2016-12-30 … 2021-11-30 22.42% 21.75% 1.006x
127 2017-01-31 … 2022-01-31 20.58% 20.17% 1.003x
128 2017-02-28 … 2022-02-28 17.57% 18.51% 0.992x
129 2017-03-31 … 2022-03-31 17.37% 19.46% 0.982x
130 2017-04-28 … 2022-03-31 17.03% 19.46% 0.980x
131 2017-05-31 … 2022-05-31 14.55% 15.59% 0.991x
132 2017-06-30 … 2022-06-30 11.69% 13.08% 0.988x
133 2017-07-31 … 2022-07-29 12.90% 15.16% 0.980x
134 2017-08-31 … 2022-08-31 9.99% 13.72% 0.967x
135 2017-09-29 … 2022-08-31 9.32% 13.56% 0.963x
136 2017-10-31 … 2022-10-31 8.81% 11.86% 0.973x
137 2017-11-30 … 2022-11-30 10.92% 12.52% 0.986x
138 2017-12-29 … 2022-11-30 10.37% 12.46% 0.981x
139 2018-01-31 … 2023-01-31 9.38% 11.01% 0.985x
140 2018-02-28 … 2023-02-28 9.82% 11.03% 0.989x
141 2018-03-29 … 2023-02-28 10.01% 11.72% 0.985x
142 2018-04-30 … 2023-04-28 9.11% 13.01% 0.966x
143 2018-05-31 … 2023-05-31 6.06% 12.95% 0.939x
144 2018-06-29 … 2023-05-31 6.49% 13.01% 0.942x
145 2018-07-31 … 2023-07-31 9.53% 14.67% 0.955x
146 2018-08-31 … 2023-08-31 9.48% 13.51% 0.964x
147 2018-09-28 … 2023-08-31 9.74% 13.56% 0.966x
148 2018-10-31 … 2023-10-31 9.55% 12.60% 0.973x
149 2018-11-30 … 2023-11-30 11.19% 14.58% 0.970x
150 2018-12-31 … 2023-12-29 15.80% 17.26% 0.987x
151 2019-01-31 … 2024-01-31 13.10% 16.27% 0.973x
152 2019-02-28 … 2024-01-31 12.65% 15.94% 0.972x
153 2019-03-29 … 2024-03-28 14.79% 17.50% 0.977x
154 2019-04-30 … 2024-04-30 13.51% 15.50% 0.983x
155 2019-05-31 … 2024-05-31 18.57% 18.12% 1.004x
156 2019-06-28 … 2024-06-28 18.11% 17.99% 1.001x
157 2019-07-31 … 2024-07-31 18.40% 17.70% 1.006x
158 2019-08-30 … 2024-08-30 19.20% 18.41% 1.007x
159 2019-09-30 … 2024-09-30 19.78% 18.65% 1.010x
160 2019-10-31 … 2024-10-31 20.42% 17.87% 1.022x
161 2019-11-29 … 2024-11-29 21.94% 18.64% 1.028x
162 2019-12-31 … 2024-12-31 20.38% 17.62% 1.023x
163 2020-01-31 … 2025-01-31 22.45% 18.07% 1.037x
164 2020-02-28 … 2025-02-28 22.49% 19.00% 1.029x
165 2020-03-31 … 2025-03-31 23.67% 19.24% 1.037x
166 2020-04-30 … 2025-04-30 20.71% 16.49% 1.036x
167 2020-05-29 … 2025-04-30 20.86% 15.80% 1.044x
168 2020-06-30 … 2025-06-30 26.06% 18.19% 1.067x
169 2020-07-31 … 2025-07-31 26.41% 17.87% 1.072x
170 2020-08-31 … 2025-08-29 25.02% 16.69% 1.071x
171 2020-09-30 … 2025-09-30 26.01% 18.57% 1.063x
172 2020-10-30 … 2025-09-30 27.11% 19.43% 1.064x
173 2020-11-30 … 2025-11-28 24.44% 17.77% 1.057x
174 2020-12-31 … 2025-12-31 23.51% 16.92% 1.056x
175 2021-01-29 … 2025-12-31 23.40% 17.20% 1.053x
176 2021-02-26 … 2026-01-30 22.15% 17.04% 1.044x
177 2021-03-31 … 2026-03-31 19.54% 14.07% 1.048x
178 2021-04-30 … 2026-04-30 21.70% 16.03% 1.049x
179 2021-05-28 … 2026-04-30 22.27% 16.22% 1.052x
Notes
mode=explore; family=recovery-quality-contrarian-52w-hybrid This hybrid combines four distinct sleeves rather than averaging parents mechanically: a panic-repair sleeve for deep 52-week washouts that are proving they can rebound, a skeptical transition sleeve for messy tapes where quality must validate recovery before price strength is trusted, a trend-graduation sleeve where repaired names can outrank pure momentum only after crossing a quality-and-stability gate, and a defensive compounder sleeve for risk-off conditions. The explicit arbitration mechanism is stock-level: deep drawdown only helps when near-term repair is real, clean trend only wins when the name is not excessively extended versus recovery evidence, and weak-quality contrarian bounces are capped so low-quality dead-cat rallies do not dominate. Deliberate metric coverage this run: actively use momentum (return_1m_pct, return_3m_pct, return_6m_pct, momentum_12_1_pct), trend/recovery (from_200d_ma_pct, from_52w_high_pct), volatility (realized_vol_3m), liquidity (avg_daily_volume_3m, avg_daily_dollar_volume_3m, trading_days_3m), income (dividend_yield_ttm_pct), valuation (forward_pe, peg), growth (operating_income_growth_pct, free_cash_flow_growth_pct, forward_eps), quality (operating_margin_pct, free_cash_flow_margin_pct), and size (market_cap). Deliberate weight-0 metrics this run: return_12m_pct, dividend_ttm, 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.
Lesson notes
#855 · degrade · relative_return Δ -0.3757 · parent exp_1118 · Jul 21, 2026 · auto/explore; benchmark CAPW_UNIV
explore/recovery-quality-contrarian-52w-hybrid: relative_return 1.0152x (delta -0.3757 vs exp_1118); win-rate 66.4804%, worst-window 0.939052, dispersion 6.0054%.
Monthly picks — top stocks selected each month (whole timeline)
timeline — 240 months · top 15 each
Month 123456789101112131415
2006-07-31 AMGN MDT ESRX CMS SYK NEE EIX MRK AEP MCO EG AAPL D CNP COR
2006-08-31 CRM GEN CI EA MCO EXPE MTCH ZBH ESRX PAYX FCX VMC NVDA F DRI
2006-09-29 CCL GEN AMAT AAPL MCO MNST CRM GOOG GOOGL CF TGT ORCL EA TPR AMG
2006-10-31 UAL AXON ALGN SWKS FFIV NSC CI CRM VMC VIAB ATI CMG CCL VRTX KSS
2006-11-30 EXPE OI MLM NDAQ WDC AMZN AAL MDT UAL ICE CCL GS MMM RCL FICO
2006-12-29 EXPE NVR FTI CSGP MLM TWX MDT A ICE HD UNH ILMN CF VIAB TEX
2007-01-31 MNST TT KBH DHI VTRS BC CME CAR ICE EBAY LVS AAL MGM EXPE DIS
2007-02-28 URI AET ISRG EXPD CIEN HUM ICE MAT AON DXC ON ZBRA NAV CVS CMX
2007-03-30 MNST CNX HP QCOM DNR JNPR CVS FLR VLO NRG ORCL TTWO MAT KR MMM
2007-04-30 ADM CAT HUM ETR MOS PEG HP GLW EIX BKR CNX FSLR MMM LLY DNR
2007-05-31 HES EIX STJ MEE WWY WIN COO MCD CVS LLTC HON CMCSA PXD BOL FSLR
2007-06-29 FNMA ILMN ICE NVDA GEN CMCSA LIN NOV SLB MCD MNST PENN MDLZ APA SWKS
2007-07-31 UAL AXON AAPL AMZN ICE SWKS DGX COP HPQ ROK PAYX BWA TMUS HON GOOG
2007-08-31 DXCM NDAQ IBKR EBAY GOOG VRTX FLEX DGX EA CMCSA LOW ED LUV COR ES
2007-09-28 MAC WU GPN KIM NEM HAL CNC INTU EBAY NDAQ ES MCD AMGN EOG WYNN
2007-10-31 BBY MSI IBKR CAH BIIB BXP SRE FISV STZ DOC SPG MAC EXPE FLR ADM
2007-11-30 RMD CNP PNW BBY ABT UNH LNT CL SRE MLM EL MDLZ CMS MRK XEL
2007-12-31 SNPS HPQ CPB KSS CSCO ANF DE HD AMAT WMT GPS LOW TGT MDT VLO
2008-01-31 KSS MOS CAG SNPS TGT GS MS HD LOW CPB AMAT HPQ AZO BBWI MDT
2008-02-29 URI ALL STX WHR KSS BA KLAC MHK CF HAL MOS VLO CDNS XRX SPGI
2008-03-31 MHK URI WHR ADI BA GS BEN ALL ABT D STX BKNG XRX HAL BBWI
2008-04-30 BA CF KLAC URI MOS MHK CDNS SPGI HAL ALL AIG WDC D XRX STX
2008-05-30 STX BA D MA LLY HAL ABT BKNG MMM WDC CF GE ADI OXY MOS
2008-06-30 URI STX CF MOS GS LLY D PEG ALL RTX WDC ABT HAL TRV AEP
2008-07-31 WHR GS UNH GE ABT RCL MMM WDC RTX TRV CF BKNG DE D LLY
2008-08-29 MS MHK LLY ED CI BA AEP RTX MCD APA MMM D TRV RCL DE
2008-09-30 LLY MMM DRI RTX MHK GE ED D MCD AEP CAG ABT APA ADI AON
2008-10-31 BA AON D APA MHK ABT MCD OXY ETN CAG ED GE DRI HON MS
2008-11-28 BKNG CAT D APA COP AON HON PH ETN OXY DE ADI DRI LLY MCD
2008-12-31 EBAY MOS GS GE ANF DE RCL BA BKNG VLO WYNN ADI HON APA CAG
2009-01-30 MOS WDC GS APA FCX VLO COP EOG BKNG DE ADI PH EBAY DVN HON
2009-02-27 MOS EBAY WDC CF ANF FCX GS RCL DVN APA SLB COP EOG VLO ADI
2009-03-31 MOS EBAY GE EOG ANF CF MS DE WHR RCL CAT CVX SLB ADI UPS
2009-04-30 GE EBAY MOS CAT RCL WHR CF SLB GD BKNG EOG MS ADBE PSA PH
2009-05-29 GE EOG EBAY MOS CAT CF GD UPS CVX MS WHR BKNG RCL AEE ADBE
2009-06-30 EOG WHR EBAY XRX GE SYK SPG HAL SLB AMGN AEE ISRG EXR MOS BMY
2009-07-31 MOS GE EOG EBAY XRX AMGN BMY WHR BKNG AMT PG SYK MCHP AEE SPG
2009-08-31 MCO EOG SYK BKNG ABT WHR GE PG MDT GILD SPG AMGN XOM COST EBAY
2009-09-30 GE GILD EOG SYK PG ABT XOM COST MCD PEP WBD EBAY AZO CMCSA BKNG
2009-10-30 MCO GILD EOG XOM AMGN GE SYK AZO BKNG ABT WBD MCD EBAY SPGI NEE
2009-11-30 GILD AMGN LMT GE AZO BKNG PEG GS CB CCI ABT WBD INTU XOM QCOM
2009-12-31 MCO AZO DRI BKNG SPGI TMUS CB PEG PEP AMGN MCD GILD PG LIN ORCL
2010-01-29 LMT AMGN GILD AZO BKNG FL MCO CB PEG WBD GS SYK LIN CF GE
2010-02-26 AMGN LMT CB MCO TMUS BKNG GS GILD PEG PFE ADBE IBM LIN AZO MSFT
2010-03-31 GS AMGN LMT CB MSFT JPM XRX QCOM CI EBAY BKNG MCO MA GE ABT
2010-04-30 WDC PEG BKNG XRX TRV MA ABT NTAP AMGN CI MRO DPZ CB GS BBWI
2010-05-28 GS PEG BMY JPM QCOM WFC CI TRV GE AMGN GILD ABT MRO CB BKNG
2010-06-30 GILD AMGN MA GE JPM MSFT ABT CB PEG WFC TXN GS QCOM MCO CI
2010-07-30 GS QCOM BLK JPM CI MSFT AMGN BEN GILD MCO MA BKNG MDT EBAY WFC
2010-08-31 GS MA INTC MSFT JPM GILD AMGN NEM CB BKNG MRO V CI BEN BMY
2010-09-30 BLK WDC MA GE MCO INTC GS BEN GILD MRO AMGN WBA BKNG TER MSFT
2010-10-29 WDC GILD GS INTC MA MSFT MDT MRO AMGN V BKNG TXN AXP CI BEN
2010-11-30 WDC INTC AXP WFC GS TXN BKNG TER MCHP SYK ADI GILD MSFT D MA
2010-12-31 WDC GS JPM BLK MDT GE WFC D MSFT PHM INTC ADI BMY TXN DHI
2011-01-31 INTC GILD JPM ISRG AXP MDT LMT ADBE BLK BMY D ADI PHM MCHP MRVL
2011-02-28 INTC MDT BLK AXP BMY ISRG ADBE OXY MOS V ADI TXN LMT GILD MSFT
2011-03-31 GILD D ISRG AXP MA AMGN ADI BKNG INTC EXPE LLY XOM JPM TXN COP
2011-04-29 NEM V ADBE BKNG COP ISRG ADI MDT JPM TXN LLY NTAP AMGN WBD D
2011-05-31 GE BKNG MRVL INTC XRX ADBE D NTAP COP EXPE ADI AMGN MOS CAT GILD
2011-06-30 MSFT GE INTC BKNG COP AAPL XRX FCX D WBD TXN CAT XOM MOS APA
2011-07-29 MOS KLAC GE MS JPM ADI D CSCO NEM MU WFC XRX WBD BKNG TXN
2011-08-31 KLAC CF GE ADI MOS BKNG JPM WFC CAT WBD AMAT FCX AAPL CCL LRCX
2011-09-30 AMAT KLAC LRCX ADBE CF TER GE MOS TXN AAPL ADI BKNG OXY MCO JPM
2011-10-31 AMAT CF MOS FCX LRCX ADBE KLAC KKR TER CAT XRX VLO JPM APA FTNT
2011-11-30 GE ADBE KLAC IVZ CF BLK CAT VLO WFC LRCX ETN APA MCO MA NVDA
2011-12-30 CF JPM FCX ADBE VLO XRX KLAC IVZ ETN BEN BKNG GE CAT ORCL WFC
2012-01-31 FCX JPM CF AMAT BEN VLO ORCL IVZ BKNG GE CAT CI LRCX KLAC NFLX
2012-02-29 AIG APA XRX AMAT BEN JPM BKNG CF ORCL AAPL MRO VLO GE C IVZ
2012-03-30 VLO WYNN BKNG AAPL CF AIG CI BEN WBD AMAT AEP GILD KLAC ORCL CAT
2012-04-30 WYNN ORCL CF COP BKNG AAPL VLO MRO WBD HAL CAT XRX PEG EOG KLAC
2012-05-31 ORCL BKNG AAPL KLAC CF CI QCOM AEP SPG PEG WBD AIG NEE XRX ETN
2012-06-29 XRX APA CF BKNG ORCL QCOM OXY KLAC AIG EOG STX JPM C SPG AAPL
2012-07-31 EOG ETN HAL QCOM AAPL KLAC GS OXY CF BKNG BLK MCD ORCL JPM WDC
2012-08-31 MS STX URI JPM WDC WYNN XRX APA C CF ALL ETN QCOM GS ISRG
2012-09-28 MS WYNN WDC CF ALL ETN STX GS QCOM JPM EOG HAL BKNG AAPL ISRG
2012-10-31 ALL URI CF CSCO KLAC AAPL AIG MS ISRG LIN QCOM GE ORLY BKNG EOG
2012-11-30 BKNG ALL ORLY GE XRX CF WDC AAPL CSCO MAR AMGN GS KLAC ISRG QCOM
2012-12-31 STX WDC KLAC VRTX BKNG GS MAR INTC ORLY ALL AIG AZO AMGN FAST LIN
2013-01-31 BKNG STX WDC XRX FL MAR ALL KKR GE CSCO AMGN AZO CF KLAC MO
2013-02-28 VRTX STX FL ALL BKNG GS WDC MSFT KKR YUM GE AMT AZO AAPL CB
2013-03-28 BKNG STX KKR DG AMGN ALL WFC WDC YUM GS GE FL MSFT BAC HON
2013-04-30 BKNG AMGN GE KKR ALL WDC ORCL LULU CDNS GS QCOM DG STX AAPL INTC
2013-05-31 BKNG VLO AMGN INTC MCO WDC STX MO REGN PHM KKR ORCL ALL GS SPGI
2013-06-28 ISRG PFE BKNG LULU PSA KKR GS T SPGI WDC QCOM EBAY MA ALL CCI
2013-07-31 CF BKNG AAPL CDNS ORCL GS INTU LLY QCOM BEN FTNT STX VLO ALL AMGN
2013-08-30 AAPL VLO BKNG CB PFE LLY MA ISRG INTU V GE MAR PSA MO JPM
2013-09-30 BEN CF PFE ORCL GS BKNG MA META AAPL MAR QCOM V MCO GE EBAY
2013-10-31 VLO BKNG GS ORCL PHM AAPL KKR MA BEN AMT CF V PSA SPG URI
2013-11-29 PHM BKNG REGN MO OXY ORCL MA URI CB BX CF MCO ABBV PFE GS
2013-12-31 PHM ABBV PFE META BKNG JNJ C MA CSCO EBAY DE URI MSFT OXY BX
2014-01-31 PHM ISRG BKNG GS LLY PFE CDNS CB REGN MO V PSA SPG JNJ URI
2014-02-28 BKNG GS ISRG REGN MO PHM CB SPG IBM OXY CDNS META PSA MA ABBV
2014-03-31 T VZ PLD CSCO BKNG COP APA V SPG EOG CB BX AIG URI BEN
2014-04-30 C VZ EOG PLD APA GS V BEN UPS AIG BKNG OXY PGR URI KLAC
2014-05-30 V META CAG BKNG EOG URI T PFE MA BX BEN VZ COP F MS
2014-06-30 META T URI OXY EOG GS AIG BX V VZ GE PHM AMGN MS COP
2014-07-31 V BKNG C META PFE URI MA BX EBAY BMY CI VZ OXY EOG ISRG
2014-08-29 V GILD EBAY GE MU BX PHM ABBV URI AIG QCOM AXP OXY T BKNG
2014-09-30 V GE GILD MA PLD BKNG NXPI GS MS PFE AXP VZ T QCOM AIG
2014-10-31 BKNG AIG GILD PLD PHM QCOM GE NXPI AXP ORCL XOM MS META URI MU
2014-11-28 BX T AIG VZ NXPI GE META MCHP AXP MU MCD PFE KKR EBAY GS
2014-12-31 VLO EOG OXY COP T GE AEP VZ QCOM BKNG EBAY XOM ED BX PLD
2015-01-30 AIG GILD GE OXY PSX VZ VLO T F YUM PLD EOG ALL EBAY HAL
2015-02-27 BKNG PSX AIG EOG GILD URI VLO QCOM VZ GE F PLD MSFT EBAY WDC
2015-03-31 GILD PSX EOG BKNG GE CI SBUX AAPL HAL AMT TXN JNJ CPB META MU
2015-04-30 GILD URI EOG PSX MU STX BKNG QCOM WBD INTC WDC IBM GME LRCX HAL
2015-05-29 GILD BKNG QCOM AXP WBD AMAT MOS WY INTC PSX JNJ IBM CB CI META
2015-06-30 URI GILD BKNG AXP INTC GS WBD BEN AMT IBM CB MOS AMGN WY ANET
2015-07-31 PLD GILD WDC BKNG TXN STX SPG VLO ED SBUX AMT GS WY CB ALL
2015-08-31 URI MOS PLD AXP TXN NEM INTC GILD BKNG STX VLO CCI UAL MMM ORCL
2015-09-30 VLO PLD GILD ALL BKNG TXN ORCL WY INTC CB BLK SBUX STX IBM CCI
2015-10-30 URI NEM MOS GILD BEN BKNG WY VLO ORCL TXN CCI PLD QCOM AXP SBUX
2015-11-30 URI NEM GS GILD ALL NXPI IBM WBD ETN VLO AAPL AMGN AMAT PLD ORCL
2015-12-31 NEM GILD URI BKNG AAPL AMGN GS UAL ALL IBM PLD IVZ CCI MO NEE
2016-01-29 AAPL NEM IBM GS ETN GILD BEN C AMGN BKNG ORCL WBD CCI NXPI NEE
2016-02-29 GILD IBM ABBV URI BKNG GME AAPL JWN DAL ETN BEN F YUM AXP ANET
2016-03-31 GILD NXPI AAPL URI ABBV BEN BAC IBM WBD EBAY IVZ AXP AMGN BKNG MCO
2016-04-29 NXPI C URI AXP MS ABBV EBAY BAC BKNG GILD GS ANET DIS AMGN DAL
2016-05-31 NXPI C ABBV AXP URI AAPL DAL REGN BAC QCOM BKNG AMGN MHK INTC WFC
2016-06-30 BKNG ABBV AMGN MHK DIS CCI GILD PSX URI QCOM CCL JPM KLAC LUV SPGI
2016-07-29 REGN AAPL NXPI BKNG UAL BAC ABBV V KLAC AMGN SPGI MCO MA MCD CCI
2016-08-31 C GS UAL BKNG AAPL NXPI AXP ABBV CCL MCD PSX WFC AMGN SPGI INTU
2016-09-30 DAL GILD REGN SPGI LUV C ABBV UAL CCL BKNG CI WBD MCD AMGN GS
2016-10-31 DAL LUV DIS ABBV WFC F MCD SPGI GILD C BKNG TRV MHK VZ PSX
2016-11-30 ABBV DG DIS SPGI MCD META CI KLAC VZ T BKNG GILD MHK WBD F
2016-12-30 META PSA ABBV SPGI F LEG ED DG ISRG AMT COST LULU BLK K GILD
2017-01-31 AMGN ABBV SPGI ISRG MDT F MCO GILD MCD BKNG VZ BLK SPG AMAT XRX
2017-02-28 ABBV MDT PSA SPGI QCOM AMT AMGN AZO PYPL BKNG ED META ADBE VZ CCI
2017-03-31 AMGN MDT SPGI META INTU BKNG REGN YUM KLAC LEG AMAT TXN ADBE MHK PLD
2017-04-28 BMY AMGN EXR SPGI MDT AMAT KLAC NEM YUM DG META MHK BKNG REGN PG
2017-05-31 KLAC META LRCX SPGI BKNG ADBE AMAT PG MSFT BX EBAY KHC INTC ALL GOOGL
2017-06-30 GS GILD BMY AMGN SPG SPGI MSFT EXR NVDA META REGN BX MS PANW PAYC
2017-07-31 NEM AMAT BMY GS SPGI LRCX GILD KHC META VRTX AMGN NVDA BKNG ADI BX
2017-08-31 GS SPG KLAC INTC ALL RCL TRV AMGN MS CB CSCO BX AMAT SPGI LRCX
2017-09-29 DVN AZO GS KLAC AMAT STX OXY TRV XOM TXN AMGN BKNG LRCX BX RCL
2017-10-31 STX DVN IBM AMAT BKNG AZO GS RCL TXN CB ABBV AMGN SPGI MU ADBE
2017-11-30 AZO MO DVN DIS STX XOM ANET SPG CPB AMGN TXN KLAC KKR EBAY META
2017-12-29 MO DVN AMGN WBD STX WDC DIS KLAC BKNG REGN SPG MCHP TXN XOM AEP
2018-01-31 BKNG AMGN WBD CMG GILD MO WDC KKR TXN ABBV MU ANET DIS KLAC IBM
2018-02-28 AEP BKNG WBD LRCX TXN MU CMG SPG NXPI AMGN WDC KLAC KKR ANET AMAT
2018-03-29 MU AEP REGN WDC BKNG PSX META MO LRCX PSA DIS DUK ED WYNN NXPI
2018-04-30 MU NXPI BKNG AEP PSX DIS ALL DUK ANET RCL CI MRVL XOM META WYNN
2018-05-31 MU WDC PSX FCX AEP DIS TER MCO AMAT AZO BKNG URI MRVL KHC SEDG
2018-06-29 REGN KHC CMCSA GIS MU MO MCO FCX PSX CI BKNG ANET AEP V META
2018-07-31 MU REGN CI LRCX FCX CMCSA MO TER AMAT BLK BMY MCO CB RCL GD
2018-08-31 URI CMCSA CI MU REGN MO ABBV META MCO ALL GS BLK PFE BKNG AZO
2018-09-28 URI BKNG MO GD CMCSA MU AVGO CAT PFE CI REGN MCO MOS GS CB
2018-10-31 MCO AVGO SEDG BKNG LRCX IVZ MU GS META TXN ADI PHM ALL MO MOS
2018-11-30 NXPI ABBV MCO EOG STX LRCX BKNG MU AMAT AVGO PSX MO OXY MOS PHM
2018-12-31 BLK PSX META BKNG PHM EOG MO AVGO LRCX MU ABBV CB ADI MCO AAPL
2019-01-31 MU URI NXPI MCO EOG META FCX STX AMAT PSX LRCX OXY ABBV WY BKNG
2019-02-28 MU FCX URI PSX BLK NXPI STX META NVDA AVGO MO ALL IVZ MCO OXY
2019-03-29 DVN MU NVDA META MRO OXY BKNG AAPL STX PSX AMAT MO KLAC GS BLK
2019-04-30 DVN MU GS URI BKNG MS AAPL BLK MRO NVDA AMGN VRTX WBD ADI META
2019-05-31 BMY GS BKNG AMGN GILD LLY COP VRTX INTC AAPL BLK MO SPG AXP MTCH
2019-06-28 GS URI MU BKNG DVN MOS AMGN PSX GILD EOG WBD CAT NVDA INTC VRTX
2019-07-31 LLY AMGN OXY INTC PSX BKNG GS VRTX GILD SPG JNJ AXP MTCH BMY CAT
2019-08-30 BMY GILD VRTX INTC JNJ QCOM GS BKNG PSX WBD FTNT AMGN CCI SPG CAT
2019-09-30 BMY CSCO COP DVN GILD VRTX INTC URI SPG ABBV ANET JNJ PSX BEN CAT
2019-10-31 REGN VRTX GILD JNJ MO BMY ANET FTNT ABBV NCLH NTAP BKNG QCOM AMGN DPZ
2019-11-29 LLY REGN DVN COP NTAP QCOM AXP URI BMY VRTX MO ORCL JNJ XRX IBM
2019-12-31 DVN CSCO ANET QCOM LLY COP EOG NTAP BMY URI MMM AMGN REGN AXP TER
2020-01-31 ANET ORCL DVN LLY QCOM BMY WBD TRV REGN VRTX ETSY MSFT BKNG AXP PSA
2020-02-28 ANET BKNG ORCL SPG BMY LLY QCOM TRV MMM MSFT PSA VRTX EBAY WBD URI
2020-03-31 ANET WBD QCOM BKNG CSCO ALL NEM MA MO ABBV PGR LLY CDNS GS HAS
2020-04-30 DVN WBD BKNG C SPG ANET QCOM JPM NEM ENPH GS ALL ABBV AZO URI
2020-05-29 BKNG ANET QCOM CB JPM MO CF KO GS LLY ABBV EXR ENPH NEM TRV
2020-06-30 SPG C TRV QCOM MO EBAY BKNG GS NEM KO ABBV JPM URI CB ALL
2020-07-31 CF MO XRX BKNG KO QCOM EBAY JPM INTC ALL ENPH GS TRV CB SPGI
2020-08-31 SPG INTC XRX MO ALL ENPH WBD JPM KO BMY MS EBAY META URI KLAC
2020-09-30 ALL INTC MO KO AEP ED XRX WBD ENPH IBM AON ABBV BMY SPGI PGR
2020-10-30 ALL ENPH SPG JPM MO ABBV KO CI ED BMY BKNG REGN INTC AON AMT
2020-11-30 DVN ALL SPG WBD JPM CSCO ENPH AON AMGN GS NEM IBM VRTX INTC AEP
2020-12-31 DVN ALL NEM SPG AMGN ETSY CSCO MCO EBAY ENPH SPGI VRTX PGR AMT MO
2021-01-29 INTC ALL REGN DVN KLAC VRTX SPG GS ADBE ENPH SPGI AMGN AMAT NEM AMT
2021-02-26 PGR MCO AMGN SPGI AZO KLAC TER EBAY CSCO VRTX ORLY VZ DVN ADBE GS
2021-03-31 NEM PG AMT SPGI AMGN AEP VRTX EBAY DPZ ED PFE MCO GS MO REGN
2021-04-30 ADBE PG VRTX CRM TTD MSFT ORCL MO AAPL SPGI NVDA AMT AMGN BMY PFE
2021-05-28 REGN PGR EBAY PG AZO ALL MO VRTX ADBE AMGN CRM BMY SPGI NEM PFE
2021-06-30 REGN ETSY QCOM TMO PGR BX TTD MTCH GS CB AAPL VRTX PG AMD MRNA
2021-07-30 REGN BX QCOM PGR VRTX GS MO KLAC MRNA AMGN ETSY TTD BMY ORCL JPM
2021-08-31 MRNA WY ETSY QCOM C KKR GS CB BX TTD PFE WFC PGR AMD EBAY
2021-09-30 MRNA WY BX GM WFC CB C KKR PGR QCOM KLAC ETSY GS DISH PFE
2021-10-29 WY FCX BX CB KKR GS C QCOM GM PGR META EOG EBAY OXY LRCX
2021-11-30 MRNA C META GILD WY SBUX FCX KKR BX SPG KLAC MO MU WFC REGN
2021-12-31 BMY FCX MO AXP META KKR GILD EBAY GS PFE REGN CB BX MRNA KLAC
2022-01-31 C META WFC GILD REGN PFE GS WY COP IVZ SBUX BX FCX CB JPM
2022-02-28 GILD GS C REGN WFC JPM CB WY COP ISRG TXN URI IVZ AMT CHTR
2022-03-31 MRNA GILD GS REGN META IVZ COP CF FCX EBAY PFE WFC OXY JPM AMT
2022-04-29 GS GILD REGN WDC FCX COP BBWI NXPI JPM CF WY MU ABBV PFE BMY
2022-05-31 MRNA GS REGN GILD CF SPG APA C EOG IVZ KLAC PFE AMAT MU BEN
2022-06-30 MRNA GILD SPGI REGN SBUX GS ABBV PFE C NXPI URI CHTR WFC BMY PLD
2022-07-29 MRNA SPG WFC MU AMAT LRCX ADBE C AMD SBUX GS KLAC NVDA BLK EBAY
2022-08-31 CF BKNG ABNB PLD META CSCO VRTX GS MRNA COP ON JPM APA DVN EOG
2022-09-30 BKNG SPG FCX ABNB CF PLD NXPI MCHP COP JPM VRTX EOG MRNA QCOM APA
2022-10-31 MRNA BKNG SPG FCX PLD APA AIG COP EOG CF AVGO CHTR DVN GS ADBE
2022-11-30 BKNG MRNA AMAT PLD NXPI AVGO LRCX MCHP AIG KLAC QCOM SPG CF ADBE AON
2022-12-30 PLD BKNG ADBE MRNA APA PSA AIG SPG MO CF AVGO AMAT KLAC COP LRCX
2023-01-31 PLD QCOM META BKNG MOS ABNB PSA CCI EXPE AMAT ADBE CF CHTR GOOGL TSLA
2023-02-28 CF PSA MOS PLD ABNB EXR TSLA AMGN BKNG MO MSFT AAPL META OXY MCHP
2023-03-31 PSA CCI EOG OXY QCOM ABNB AMGN BKNG MOS COP EXR MRNA TSLA PFE GOOGL
2023-04-28 DVN MRO OXY COP APA PSA AMGN BKNG EOG MO CF EXR QCOM VZ VRTX
2023-05-31 EOG NEE ENPH OXY COP AMGN PFE BKNG PSA DPZ DHR VRTX QCOM EMR ADI
2023-06-30 CF EOG COP NEE BKNG CVX PHM DPZ VLO SPG MOS DVN URI MRO PAYC
2023-07-31 CF DVN MRO OXY AMGN EOG VLO COP APA BKNG MOS CVX DHR SCHW QCOM
2023-08-31 MTCH BKNG CF EOG PSA AMGN PSX MRO NEE CB GILD AON VLO MO EMR
2023-09-29 EOG PSX PSA BKNG MRO ED CF MO GILD AMGN JPM SPG MCHP GS NEE
2023-10-31 NEE CCI PSA MRO EOG BKNG PSX MO AON GILD ADI MCHP KLAC AMT ED
2023-11-30 CCI ENPH EXR BKNG ABNB ADI EBAY MCHP DAL JNJ D DE MO BLK IBM
2023-12-29 ENPH BKNG MTCH CCI MO EBAY DE ABNB PHM SPG FTNT NEE DAL CSCO JNJ
2024-01-31 BKNG MO ENPH MTCH IBM ABNB CCI JNJ CSCO FTNT DAL DE NVDA PHM EOG
2024-02-29 MO D JNJ BKNG PGR EOG EXR KLAC PEG MRO META GE AMT CCI CB
2024-03-28 NEE BMY EOG MO NVDA DE GE HAL SLB MRO META PGR JNJ BKNG MCD
2024-04-30 NEE NVDA JNJ PGR PANW CSCO BKNG EXR HAL AAPL MCD EOG DE KLAC MO
2024-05-31 NVDA META AMT JNJ BKNG EXR CMCSA CSCO CCI DE MCD PGR ANF MO GS
2024-06-28 NVDA JNJ CRM MCD CSCO PANW AMT IBM META BMY ADBE BKNG CMCSA DE MO
2024-07-31 MTCH NVDA JNJ BMY META PAYC MCD PLD CMCSA CCI IBM MO V BKNG AMT
2024-08-30 CRM BMY NVDA AMT META MSFT PAYC PANW PGR V BKNG MO MTCH ADBE MCD
2024-09-30 CRM AMT PAYC MSFT BMY LULU PGR NVDA CMCSA V IBM GOOGL TRV MO URI
2024-10-31 LULU NVDA CRM META MSFT BKNG PGR COIN TRV AMT IBM CRWD DIS EOG CB
2024-11-29 LULU NVDA ANF CRM META COIN DPZ MSFT WYNN BKNG GOOGL SLB AMT BBWI GS
2024-12-31 QCOM WDAY KLAC NVDA LULU APA MRO META LRCX REGN MSFT BKNG ANF COIN CB
2025-01-31 QCOM KLAC COIN AMAT LRCX PGR NVDA META SLB UBER MSFT DPZ EXR SNPS LULU
2025-02-28 QCOM KLAC NVDA AMT REGN PGR CCI META MSFT LRCX SLB NXPI MPWR COP CB
2025-03-31 QCOM KLAC DVN MO LRCX PGR EXR NVDA AMT NEM META GOOGL CRM MSFT BKNG
2025-04-30 COIN NVDA MPWR BKNG GOOGL ANET AMT ADBE KLAC META LRCX CRM AMAT MO PGR
2025-05-30 MPWR ADBE URI TTD COIN KLAC BKNG NVDA GILD GOOGL NTAP HOOD AMAT LRCX CF
2025-06-30 TER QCOM ANET MPWR AMAT GOOGL BKNG PYPL HOOD REGN PFE GILD NTAP ADBE URI
2025-07-31 TTD HOOD TER BKNG DVN PLD GILD MPWR REGN C DHI ADBE NVDA COP QCOM
2025-08-29 REGN BMY PFE MPWR PGR AMGN LRCX GILD BKNG CB QCOM PLD EXR ENPH AAPL
2025-09-30 AVGO PGR FTNT REGN AMGN GILD PFE CB COIN C ADBE KLAC BKNG NEM LLY
2025-10-31 BMY REGN GILD VRTX KLAC MPWR FTNT CRM ADBE NEM EXR ISRG BKNG SPGI AVGO
2025-11-28 PGR VRTX BMY GILD FTNT BKNG NEM CF AMT INTU MU TMUS ALL AZO MPWR
2025-12-31 ADBE PGR VRTX WDC CRM ABNB INTU CMCSA GILD BKNG BMY C NEM KLAC AMT
2026-01-30 AMT PGR WDC KLAC NEM AZO BKNG GILD CMCSA EXR EOG MU MA MPWR META
2026-02-27 AMT CHTR WDC GILD KLAC TMUS NFLX NEM URI MA AZO PGR MPWR V NVDA
2026-03-31 BKNG AVGO INTU WDC PLTR NFLX KLAC AZO MA GILD PGR FTNT CCI NVDA PSX
2026-04-30 MSFT KLAC CCI AZO AMT MA V MU WDC NFLX GILD META SPG NVDA NEM
2026-05-29 ADBE BKNG MSFT PLTR CCI MA CRM GILD SPGI PAYC KLAC NVDA META NOW AMT
2026-06-26 WDC BKNG AZO KLAC MU MA AMT CCI AVGO SPG NVDA ALL AON TRV AXP
Scoring script (python)
FORMULA_NAME = "Recovery Quality Contrarian 52W Hybrid (Arbitrated Relay, v1148)"
LOGIC_VARIANT_COUNT = 4
NOTES = """mode=explore; family=recovery-quality-contrarian-52w-hybrid
This hybrid combines four distinct sleeves rather than averaging parents mechanically: a panic-repair sleeve for deep 52-week washouts that are proving they can rebound, a skeptical transition sleeve for messy tapes where quality must validate recovery before price strength is trusted, a trend-graduation sleeve where repaired names can outrank pure momentum only after crossing a quality-and-stability gate, and a defensive compounder sleeve for risk-off conditions. The explicit arbitration mechanism is stock-level: deep drawdown only helps when near-term repair is real, clean trend only wins when the name is not excessively extended versus recovery evidence, and weak-quality contrarian bounces are capped so low-quality dead-cat rallies do not dominate.
Deliberate metric coverage this run: actively use momentum (return_1m_pct, return_3m_pct, return_6m_pct, momentum_12_1_pct), trend/recovery (from_200d_ma_pct, from_52w_high_pct), volatility (realized_vol_3m), liquidity (avg_daily_volume_3m, avg_daily_dollar_volume_3m, trading_days_3m), income (dividend_yield_ttm_pct), valuation (forward_pe, peg), growth (operating_income_growth_pct, free_cash_flow_growth_pct, forward_eps), quality (operating_margin_pct, free_cash_flow_margin_pct), and size (market_cap). Deliberate weight-0 metrics this run: return_12m_pct, dividend_ttm, 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."""

# Deliberate weight-0 metrics this run:
# - Momentum/return: return_12m_pct
# - Income: dividend_ttm
# - Valuation: pe
# - Growth: eps_growth_pct, revenue_growth_pct
# - Raw levels / duplicate size-price information: shares_outstanding, close, adj_close,
#   high_52w, ma_200d, eps_ttm, revenue_ttm, operating_income_ttm, free_cash_flow_ttm

def score_universe(stocks, regime, ctx):
    def clamp(x, lo, hi):
        if x < lo:
            return lo
        if x > hi:
            return hi
        return x

    def as_number(x):
        if isinstance(x, bool):
            return 1.0 if x else 0.0
        if isinstance(x, (int, float)):
            return float(x)
        return None

    def metric_value(stock, name):
        return as_number(stock.get(name))

    def regime_value(name, default):
        v = None
        if isinstance(regime, dict):
            v = as_number(regime.get(name))
        if v is None and isinstance(ctx, dict):
            v = as_number(ctx.get(name))
        if v is None:
            return default
        return v

    def percentile_maps(metric_names):
        maps = {}
        for name in metric_names:
            vals = []
            for stock in stocks:
                v = metric_value(stock, name)
                if v is not None:
                    vals.append(v)
            vals.sort()
            n = len(vals)
            if n == 0:
                maps[name] = None
                continue
            ranks = {}
            i = 0
            while i < n:
                j = i + 1
                while j < n and vals[j] == vals[i]:
                    j += 1
                rank = ((i + j - 1) * 0.5) / (n - 1) if n > 1 else 0.5
                ranks[vals[i]] = rank
                i = j
            maps[name] = ranks
        return maps

    def pct(stock, name, invert=False):
        v = metric_value(stock, name)
        if v is None:
            return None
        ranks = rank_maps.get(name)
        if ranks is None:
            return None
        p = ranks.get(v)
        if p is None:
            return None
        return 1.0 - p if invert else p

    def blend(stock, parts):
        total = 0.0
        wsum = 0.0
        for metric_name, weight, invert in parts:
            p = pct(stock, metric_name, invert)
            if p is None:
                continue
            total += weight * p
            wsum += weight
        if wsum <= 0.0:
            return 0.0
        return total / wsum

    def liquidity_gate(stock):
        adv = pct(stock, "avg_daily_dollar_volume_3m", False)
        av = pct(stock, "avg_daily_volume_3m", False)
        td = pct(stock, "trading_days_3m", False)
        total = 0.0
        wsum = 0.0
        if adv is not None:
            total += 0.5 * adv
            wsum += 0.5
        if av is not None:
            total += 0.3 * av
            wsum += 0.3
        if td is not None:
            total += 0.2 * td
            wsum += 0.2
        if wsum <= 0.0:
            return 0.5
        return total / wsum

    def recovery_core(stock):
        return blend(stock, [
            ("from_52w_high_pct", 0.36, True),
            ("from_200d_ma_pct", 0.24, True),
            ("return_1m_pct", 0.16, False),
            ("return_3m_pct", 0.14, False),
            ("realized_vol_3m", 0.10, True),
        ])

    def transition_core(stock):
        return blend(stock, [
            ("from_52w_high_pct", 0.24, True),
            ("from_200d_ma_pct", 0.14, True),
            ("return_1m_pct", 0.16, False),
            ("return_3m_pct", 0.16, False),
            ("operating_margin_pct", 0.10, False),
            ("free_cash_flow_margin_pct", 0.10, False),
            ("operating_income_growth_pct", 0.10, False),
        ])

    def momentum_core(stock):
        return blend(stock, [
            ("momentum_12_1_pct", 0.30, False),
            ("return_6m_pct", 0.22, False),
            ("return_3m_pct", 0.14, False),
            ("return_1m_pct", 0.08, False),
            ("from_200d_ma_pct", 0.10, False),
            ("realized_vol_3m", 0.08, True),
            ("forward_pe", 0.08, True),
        ])

    def quality_core(stock):
        return blend(stock, [
            ("operating_margin_pct", 0.28, False),
            ("free_cash_flow_margin_pct", 0.24, False),
            ("forward_eps", 0.14, False),
            ("free_cash_flow_growth_pct", 0.16, False),
            ("operating_income_growth_pct", 0.10, False),
            ("peg", 0.08, True),
        ])

    def defensive_core(stock):
        return blend(stock, [
            ("realized_vol_3m", 0.28, True),
            ("operating_margin_pct", 0.20, False),
            ("free_cash_flow_margin_pct", 0.18, False),
            ("dividend_yield_ttm_pct", 0.10, False),
            ("forward_pe", 0.10, True),
            ("peg", 0.06, True),
            ("return_3m_pct", 0.08, False),
        ])

    metric_names = [
        "return_1m_pct",
        "return_3m_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",
        "forward_pe",
        "peg",
        "operating_income_growth_pct",
        "free_cash_flow_growth_pct",
        "forward_eps",
        "operating_margin_pct",
        "free_cash_flow_margin_pct",
        "market_cap",
    ]
    rank_maps = percentile_maps(metric_names)

    market_trend = regime_value("market_trend", regime_value("trend", 0.0))
    risk_on = regime_value("risk_on", 0.5)
    drawdown = regime_value("drawdown", regime_value("market_drawdown", 0.0))
    vol_regime = regime_value("volatility", regime_value("market_volatility", 0.5))

    if drawdown <= -0.10 or (risk_on < 0.42 and vol_regime > 0.58):
        branch = 0  # defensive compounder
    elif market_trend > 0.18 and risk_on > 0.55 and vol_regime < 0.62:
        branch = 1  # trend graduation
    elif market_trend < -0.08 or (vol_regime > 0.70 and risk_on < 0.52):
        branch = 2  # panic repair
    else:
        branch = 3  # skeptical transition

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

        liq = liquidity_gate(stock)
        rec = recovery_core(stock)
        trans = transition_core(stock)
        mom = momentum_core(stock)
        qual = quality_core(stock)
        defense = defensive_core(stock)

        deep_drawdown = pct(stock, "from_52w_high_pct", True)
        if deep_drawdown is None:
            deep_drawdown = 0.5
        short_repair = pct(stock, "return_1m_pct", False)
        if short_repair is None:
            short_repair = 0.5
        medium_repair = pct(stock, "return_3m_pct", False)
        if medium_repair is None:
            medium_repair = 0.5
        six_m = pct(stock, "return_6m_pct", False)
        if six_m is None:
            six_m = 0.5
        below_200 = pct(stock, "from_200d_ma_pct", True)
        if below_200 is None:
            below_200 = 0.5
        low_vol = pct(stock, "realized_vol_3m", True)
        if low_vol is None:
            low_vol = 0.5
        cheapish = pct(stock, "forward_pe", True)
        if cheapish is None:
            cheapish = 0.5
        size = pct(stock, "market_cap", False)
        if size is None:
            size = 0.5

        repair_valid = 0.0
        if short_repair > 0.55:
            repair_valid += 0.5
        if medium_repair > 0.52:
            repair_valid += 0.3
        if qual > 0.52:
            repair_valid += 0.2

        trend_clean = 0.0
        if mom > 0.58:
            trend_clean += 0.45
        if low_vol > 0.50:
            trend_clean += 0.20
        if qual > 0.50:
            trend_clean += 0.20
        if liq > 0.45:
            trend_clean += 0.15

        conflict_gap = mom - rec
        conflict_penalty = 0.0
        if conflict_gap > 0.22 and deep_drawdown > 0.72 and short_repair < 0.45:
            conflict_penalty += 0.10
        if conflict_gap < -0.22 and qual < 0.42:
            conflict_penalty += 0.10
        if liq < 0.22:
            conflict_penalty += 0.18

        if branch == 0:
            base = 0.42 * defense + 0.22 * qual + 0.14 * mom + 0.12 * rec + 0.06 * cheapish + 0.04 * size
            if deep_drawdown > 0.78 and repair_valid < 0.55:
                base -= 0.10
            if low_vol > 0.70 and qual > 0.60:
                base += 0.05
        elif branch == 1:
            repaired_leader_bonus = 0.0
            if deep_drawdown > 0.60 and repair_valid > 0.68 and trend_clean > 0.58:
                repaired_leader_bonus = 0.08
            if deep_drawdown < 0.35 and below_200 < 0.35:
                repaired_leader_bonus -= 0.03
            base = 0.38 * mom + 0.24 * qual + 0.18 * trans + 0.10 * rec + 0.05 * low_vol + 0.05 * cheapish + repaired_leader_bonus
            if short_repair < 0.35 and medium_repair < 0.45 and deep_drawdown > 0.70:
                base -= 0.10
        elif branch == 2:
            bounce_cap = 1.0
            if qual < 0.40:
                bounce_cap = 0.88
            if liq < 0.30:
                bounce_cap = 0.82 if bounce_cap > 0.82 else bounce_cap
            base = (0.38 * rec + 0.24 * qual + 0.14 * trans + 0.08 * defense + 0.08 * cheapish + 0.08 * low_vol) * bounce_cap
            if deep_drawdown > 0.80 and repair_valid > 0.70:
                base += 0.07
            if short_repair < 0.30:
                base -= 0.08
        else:
            recovery_vs_trend = rec - mom
            bridge_bonus = 0.0
            if recovery_vs_trend > 0.08 and qual > 0.56:
                bridge_bonus += 0.05
            if recovery_vs_trend < -0.08 and cheapish < 0.35 and qual < 0.50:
                bridge_bonus -= 0.04
            base = 0.30 * trans + 0.26 * qual + 0.18 * rec + 0.14 * mom + 0.06 * cheapish + 0.06 * defense + bridge_bonus
            if deep_drawdown > 0.76 and repair_valid < 0.50:
                base -= 0.08

        score = base - conflict_penalty
        score += 0.05 * liq

        # Small penalty for excessively large, already-crowded names in contrarian sleeves.
        if branch in (2, 3) and size > 0.85 and deep_drawdown < 0.45:
            score -= 0.03

        scores[symbol] = score

    return scores