exp_1150

Contrarian 52-Week Recovery with Quality Conflict Arbitration (v1150)

← All V2 experiments
Relative return
1.144x
Excess vs bench
14.36%
Benchmark
CAPW_UNIV
Rolling windows
179 · monthly
Mean strategy gain
30.74%
Mean benchmark gain
14.08%
Mean excess gain
16.66%
Dispersion (ref)
15.67%
Win-rate vs bench (ref)
97.21%
Worst / best ratio (ref)
0.991x / 1.507x
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 12.62% 2.22% 1.102x
2011-07-01 … 2016-06-30 24.77% 13.74% 1.097x
2016-07-01 … 2021-06-30 37.83% 20.63% 1.143x
2021-07-01 … 2026-06-26 78.44% 15.48% 1.545x
All rolling windows — the objective set (equal-weighted mean ratio)
Strategy Benchmark (CAPW_UNIV) Excess
2006200720082009201020112012201320142015201620172018201920202021 -20%0%20%40%60%80%
rolling 5y windows, monthly step — 179 windows · mean ratio 1.144x · beat benchmark in 174/179
#WindowStrategyBenchmarkRatio
1 2006-07-31 … 2011-07-29 11.96% 1.79% 1.100x
2 2006-08-31 … 2011-08-31 12.19% 0.21% 1.120x
3 2006-09-29 … 2011-08-31 11.42% -0.14% 1.116x
4 2006-10-31 … 2011-10-31 10.31% 0.23% 1.101x
5 2006-11-30 … 2011-11-30 9.58% -0.05% 1.096x
6 2006-12-29 … 2011-11-30 8.85% -0.32% 1.092x
7 2007-01-31 … 2012-01-31 5.43% 0.93% 1.045x
8 2007-02-28 … 2012-01-31 4.48% 1.43% 1.030x
9 2007-03-30 … 2012-03-30 5.94% 3.09% 1.028x
10 2007-04-30 … 2012-04-30 4.23% 2.42% 1.018x
11 2007-05-31 … 2012-05-31 2.29% 0.60% 1.017x
12 2007-06-29 … 2012-06-29 1.85% 1.92% 0.999x
13 2007-07-31 … 2012-07-31 2.36% 2.69% 0.997x
14 2007-08-31 … 2012-08-31 2.56% 2.95% 0.996x
15 2007-09-28 … 2012-09-28 2.25% 3.20% 0.991x
16 2007-10-31 … 2012-10-31 2.56% 2.60% 1.000x
17 2007-11-30 … 2012-11-30 4.28% 3.45% 1.008x
18 2007-12-31 … 2012-12-31 5.68% 3.69% 1.019x
19 2008-01-31 … 2013-01-31 10.29% 5.85% 1.042x
20 2008-02-29 … 2013-02-28 9.35% 6.82% 1.024x
21 2008-03-31 … 2013-03-28 11.83% 7.73% 1.038x
22 2008-04-30 … 2013-04-30 10.20% 7.51% 1.025x
23 2008-05-30 … 2013-04-30 9.52% 7.81% 1.016x
24 2008-06-30 … 2013-06-28 14.18% 9.33% 1.044x
25 2008-07-31 … 2013-07-31 17.70% 10.48% 1.065x
26 2008-08-29 … 2013-07-31 19.38% 10.52% 1.080x
27 2008-09-30 … 2013-09-30 23.30% 11.48% 1.106x
28 2008-10-31 … 2013-10-31 30.59% 15.76% 1.128x
29 2008-11-28 … 2013-10-31 34.02% 17.46% 1.141x
30 2008-12-31 … 2013-12-31 36.34% 18.44% 1.151x
31 2009-01-30 … 2013-12-31 39.31% 20.64% 1.155x
32 2009-02-27 … 2014-01-31 43.01% 21.63% 1.176x
33 2009-03-31 … 2014-03-31 43.66% 20.60% 1.191x
34 2009-04-30 … 2014-04-30 40.13% 19.00% 1.177x
35 2009-05-29 … 2014-04-30 39.43% 18.32% 1.178x
36 2009-06-30 … 2014-06-30 39.61% 19.01% 1.173x
37 2009-07-31 … 2014-07-31 35.62% 17.39% 1.155x
38 2009-08-31 … 2014-08-29 33.01% 17.70% 1.130x
39 2009-09-30 … 2014-09-30 31.68% 16.64% 1.129x
40 2009-10-30 … 2014-09-30 36.69% 17.08% 1.168x
41 2009-11-30 … 2014-11-28 35.93% 16.82% 1.164x
42 2009-12-31 … 2014-12-31 34.48% 16.28% 1.156x
43 2010-01-29 … 2014-12-31 36.46% 17.23% 1.164x
44 2010-02-26 … 2015-01-30 35.79% 15.80% 1.173x
45 2010-03-31 … 2015-03-31 34.20% 15.40% 1.163x
46 2010-04-30 … 2015-04-30 31.05% 15.38% 1.136x
47 2010-05-28 … 2015-04-30 33.30% 17.09% 1.138x
48 2010-06-30 … 2015-06-30 39.20% 17.45% 1.185x
49 2010-07-30 … 2015-06-30 37.71% 16.43% 1.183x
50 2010-08-31 … 2015-08-31 33.82% 15.76% 1.156x
51 2010-09-30 … 2015-09-30 30.35% 13.61% 1.147x
52 2010-10-29 … 2015-09-30 29.17% 13.06% 1.142x
53 2010-11-30 … 2015-11-30 28.94% 15.09% 1.120x
54 2010-12-31 … 2015-12-31 26.59% 13.55% 1.115x
55 2011-01-31 … 2016-01-29 24.25% 11.90% 1.110x
56 2011-02-28 … 2016-01-29 23.04% 11.53% 1.103x
57 2011-03-31 … 2016-03-31 24.13% 12.90% 1.099x
58 2011-04-29 … 2016-04-29 22.54% 12.39% 1.090x
59 2011-05-31 … 2016-05-31 22.33% 12.94% 1.083x
60 2011-06-30 … 2016-06-30 24.12% 13.30% 1.096x
61 2011-07-29 … 2016-07-29 25.57% 14.52% 1.097x
62 2011-08-31 … 2016-08-31 26.68% 15.19% 1.100x
63 2011-09-30 … 2016-09-30 30.15% 16.32% 1.119x
64 2011-10-31 … 2016-10-31 25.38% 14.02% 1.100x
65 2011-11-30 … 2016-11-30 28.90% 14.66% 1.124x
66 2011-12-30 … 2016-12-30 28.92% 14.92% 1.122x
67 2012-01-31 … 2017-01-31 29.87% 14.63% 1.133x
68 2012-02-29 … 2017-02-28 28.54% 14.78% 1.120x
69 2012-03-30 … 2017-02-28 28.66% 14.43% 1.124x
70 2012-04-30 … 2017-04-28 28.18% 14.61% 1.118x
71 2012-05-31 … 2017-05-31 31.60% 15.98% 1.135x
72 2012-06-29 … 2017-05-31 31.86% 15.44% 1.142x
73 2012-07-31 … 2017-07-31 31.70% 15.43% 1.141x
74 2012-08-31 … 2017-08-31 31.44% 15.12% 1.142x
75 2012-09-28 … 2017-08-31 30.75% 14.77% 1.139x
76 2012-10-31 … 2017-10-31 32.10% 16.12% 1.138x
77 2012-11-30 … 2017-11-30 32.72% 16.79% 1.136x
78 2012-12-31 … 2017-12-29 31.54% 16.93% 1.125x
79 2013-01-31 … 2018-01-31 33.35% 17.57% 1.134x
80 2013-02-28 … 2018-02-28 32.29% 16.21% 1.138x
81 2013-03-28 … 2018-02-28 30.81% 15.81% 1.130x
82 2013-04-30 … 2018-04-30 28.12% 14.25% 1.121x
83 2013-05-31 … 2018-05-31 22.69% 14.57% 1.071x
84 2013-06-28 … 2018-05-31 26.01% 14.97% 1.096x
85 2013-07-31 … 2018-07-31 23.90% 14.83% 1.079x
86 2013-08-30 … 2018-07-31 26.17% 15.59% 1.092x
87 2013-09-30 … 2018-09-28 29.09% 15.84% 1.114x
88 2013-10-31 … 2018-10-31 22.52% 12.89% 1.085x
89 2013-11-29 … 2018-10-31 21.48% 12.60% 1.079x
90 2013-12-31 … 2018-12-31 16.91% 9.93% 1.063x
91 2014-01-31 … 2019-01-31 16.56% 12.37% 1.037x
92 2014-02-28 … 2019-02-28 14.75% 12.38% 1.021x
93 2014-03-31 … 2019-03-29 15.88% 12.76% 1.028x
94 2014-04-30 … 2019-04-30 17.20% 13.73% 1.031x
95 2014-05-30 … 2019-04-30 16.67% 13.54% 1.028x
96 2014-06-30 … 2019-06-28 18.26% 12.81% 1.048x
97 2014-07-31 … 2019-07-31 18.60% 13.30% 1.047x
98 2014-08-29 … 2019-07-31 17.85% 12.80% 1.045x
99 2014-09-30 … 2019-09-30 17.74% 12.70% 1.045x
100 2014-10-31 … 2019-10-31 18.10% 12.91% 1.046x
101 2014-11-28 … 2019-10-31 17.49% 12.60% 1.043x
102 2014-12-31 … 2019-12-31 20.25% 14.16% 1.053x
103 2015-01-30 … 2019-12-31 19.49% 14.85% 1.040x
104 2015-02-27 … 2020-01-31 18.43% 14.04% 1.038x
105 2015-03-31 … 2020-03-31 8.89% 8.56% 1.003x
106 2015-04-30 … 2020-04-30 14.23% 11.65% 1.023x
107 2015-05-29 … 2020-05-29 13.93% 12.61% 1.012x
108 2015-06-30 … 2020-06-30 16.59% 13.64% 1.026x
109 2015-07-31 … 2020-07-31 21.39% 14.60% 1.059x
110 2015-08-31 … 2020-08-31 27.45% 18.07% 1.080x
111 2015-09-30 … 2020-09-30 27.08% 17.05% 1.086x
112 2015-10-30 … 2020-10-30 23.38% 14.60% 1.077x
113 2015-11-30 … 2020-11-30 30.32% 17.43% 1.110x
114 2015-12-31 … 2020-12-31 30.90% 18.65% 1.103x
115 2016-01-29 … 2021-01-29 36.91% 19.26% 1.148x
116 2016-02-29 … 2021-02-26 38.09% 19.79% 1.153x
117 2016-03-31 … 2021-03-31 37.15% 19.42% 1.148x
118 2016-04-29 … 2021-03-31 38.42% 19.66% 1.157x
119 2016-05-31 … 2021-05-28 38.43% 20.42% 1.150x
120 2016-06-30 … 2021-06-30 38.23% 21.06% 1.142x
121 2016-07-29 … 2021-06-30 37.83% 20.63% 1.143x
122 2016-08-31 … 2021-08-31 38.24% 21.75% 1.135x
123 2016-09-30 … 2021-09-30 37.09% 20.22% 1.140x
124 2016-10-31 … 2021-10-29 40.21% 22.50% 1.145x
125 2016-11-30 … 2021-11-30 37.57% 21.87% 1.129x
126 2016-12-30 … 2021-11-30 39.25% 21.75% 1.144x
127 2017-01-31 … 2022-01-31 32.37% 20.17% 1.101x
128 2017-02-28 … 2022-02-28 32.98% 18.51% 1.122x
129 2017-03-31 … 2022-03-31 36.20% 19.46% 1.140x
130 2017-04-28 … 2022-03-31 36.61% 19.46% 1.144x
131 2017-05-31 … 2022-05-31 33.58% 15.59% 1.156x
132 2017-06-30 … 2022-06-30 28.56% 13.08% 1.137x
133 2017-07-31 … 2022-07-29 29.93% 15.16% 1.128x
134 2017-08-31 … 2022-08-31 31.04% 13.72% 1.152x
135 2017-09-29 … 2022-08-31 30.65% 13.56% 1.150x
136 2017-10-31 … 2022-10-31 31.07% 11.86% 1.172x
137 2017-11-30 … 2022-11-30 30.01% 12.52% 1.155x
138 2017-12-29 … 2022-11-30 30.36% 12.46% 1.159x
139 2018-01-31 … 2023-01-31 27.13% 11.01% 1.145x
140 2018-02-28 … 2023-02-28 27.26% 11.03% 1.146x
141 2018-03-29 … 2023-02-28 28.15% 11.72% 1.147x
142 2018-04-30 … 2023-04-28 26.79% 13.01% 1.122x
143 2018-05-31 … 2023-05-31 28.11% 12.95% 1.134x
144 2018-06-29 … 2023-05-31 29.36% 13.01% 1.145x
145 2018-07-31 … 2023-07-31 34.52% 14.67% 1.173x
146 2018-08-31 … 2023-08-31 31.35% 13.51% 1.157x
147 2018-09-28 … 2023-08-31 31.54% 13.56% 1.158x
148 2018-10-31 … 2023-10-31 28.07% 12.60% 1.137x
149 2018-11-30 … 2023-11-30 29.96% 14.58% 1.134x
150 2018-12-31 … 2023-12-29 37.46% 17.26% 1.172x
151 2019-01-31 … 2024-01-31 39.49% 16.27% 1.200x
152 2019-02-28 … 2024-01-31 39.07% 15.94% 1.200x
153 2019-03-29 … 2024-03-28 48.03% 17.50% 1.260x
154 2019-04-30 … 2024-04-30 46.55% 15.50% 1.269x
155 2019-05-31 … 2024-05-31 50.55% 18.12% 1.275x
156 2019-06-28 … 2024-06-28 48.33% 17.99% 1.257x
157 2019-07-31 … 2024-07-31 45.29% 17.70% 1.234x
158 2019-08-30 … 2024-08-30 46.80% 18.41% 1.240x
159 2019-09-30 … 2024-09-30 51.85% 18.65% 1.280x
160 2019-10-31 … 2024-10-31 53.26% 17.87% 1.300x
161 2019-11-29 … 2024-11-29 58.44% 18.64% 1.335x
162 2019-12-31 … 2024-12-31 53.57% 17.62% 1.306x
163 2020-01-31 … 2025-01-31 57.92% 18.07% 1.338x
164 2020-02-28 … 2025-02-28 57.81% 19.00% 1.326x
165 2020-03-31 … 2025-03-31 59.68% 19.24% 1.339x
166 2020-04-30 … 2025-04-30 57.72% 16.49% 1.354x
167 2020-05-29 … 2025-04-30 56.99% 15.80% 1.356x
168 2020-06-30 … 2025-06-30 64.55% 18.19% 1.392x
169 2020-07-31 … 2025-07-31 63.04% 17.87% 1.383x
170 2020-08-31 … 2025-08-29 60.28% 16.69% 1.374x
171 2020-09-30 … 2025-09-30 64.81% 18.57% 1.390x
172 2020-10-30 … 2025-09-30 68.38% 19.43% 1.410x
173 2020-11-30 … 2025-11-28 63.83% 17.77% 1.391x
174 2020-12-31 … 2025-12-31 66.89% 16.92% 1.427x
175 2021-01-29 … 2025-12-31 64.30% 17.20% 1.402x
176 2021-02-26 … 2026-01-30 66.82% 17.04% 1.425x
177 2021-03-31 … 2026-03-31 65.27% 14.07% 1.449x
178 2021-04-30 … 2026-04-30 73.59% 16.03% 1.496x
179 2021-05-28 … 2026-04-30 75.12% 16.22% 1.507x
Notes
mode=explore; family=contrarian-52w-recovery-quality-hybrid New hybrid family that fuses a deep-contrarian 52-week drawdown sleeve with a recovery-quality durability sleeve, but only after an explicit conflict check: violent rebounds without enough balance-sheet/earnings/liquidity support get capped, while high-quality businesses with only partial repair can still win in stressed tapes if their tradability and volatility profile are strong. The structure is intentionally not a flat average: each regime branch changes both the sleeve mix and the arbitration rule. Deliberate metric coverage: actively use a recovery/trend cluster (from_52w_high_pct, from_200d_ma_pct), a momentum cluster (return_3m_pct, return_6m_pct, momentum_12_1_pct, return_12m_pct), a volatility check (realized_vol_3m), a liquidity cluster (avg_daily_dollar_volume_3m, avg_daily_volume_3m, trading_days_3m), an income cluster (dividend_yield_ttm_pct, dividend_ttm), a valuation cluster (peg, forward_pe), a growth cluster (revenue_growth_pct, eps_growth_pct, forward_eps), a quality cluster (free_cash_flow_ttm, operating_income_ttm), and a size tilt (market_cap). Deliberately weight return_1m_pct, pe, shares_outstanding, close, adj_close, high_52w, ma_200d, eps_ttm, and revenue_ttm at zero this run so the backtest can test a different orthogonal mix instead of collapsing into the recent parents. Sparse fundamentals are normalized by present weight before the final arbitration.
Lesson notes
#857 · degrade · relative_return Δ -0.2258 · parent exp_1104 · Jul 21, 2026 · auto/explore; benchmark CAPW_UNIV
explore/contrarian-52w-recovery-quality-hybrid: relative_return 1.1436x (delta -0.2258 vs exp_1104); win-rate 97.2067%, worst-window 0.990773, dispersion 15.6651%.
Monthly picks — top stocks selected each month (whole timeline)
timeline — 240 months · top 15 each
Month 123456789101112131415
2006-07-31 ATI MNST EXPD GRMN FTI LVS STLD NUE ADM TEX MRK CMI MTW CNX CME
2006-08-31 ILMN ICE NVDA MRK GRMN ADM MTW AKAM LVS GEN CRM CTSH DDS ATI STLD
2006-09-29 ILMN NVDA AAPL MRK KSS CRM GEN HUM ICE ANF AKAM ORCL TJX T HOG
2006-10-31 AKAM ATI KSS BKNG ICE ANF CRM ALGN MRK CTSH ILMN TEX ORCL AIV AAPL
2006-11-30 ICE AKAM ILMN ALGN UAL BKNG AT MA LRCX AAL LVS HOG UAA KSS REGN
2006-12-29 ICE ATI MA NVDA LVS ILMN MTCH WYNN AKAM MAY HOG TEX GME EOP SWKS
2007-01-31 ICE UAL LVS MGM MAY MTCH TEX BKNG AT GT TWX PCAR CF AKAM KMX
2007-02-28 ICE WYNN ON AKAM TEX GT KMX ATI CRM MAT TPR BXP STLD MGM CBRE
2007-03-30 ICE ON CF MGM BKNG MAT FSLR MA MAY NRG WYNN GT PCAR DE MTCH
2007-04-30 CF ICE MOS CMI GT ATI ON FSLR MAT GME PCAR ETR PEG BKNG TPR
2007-05-31 ICE CMI BKNG ON STLD GME ANDV CF ETR FSLR AMZN PCAR PWR PEG EIX
2007-06-29 CLF ICE ANDV NRG AMZN NOV MGM ON CMI GT GME PENN NVDA MA PCAR
2007-07-31 CF AXON ICE BKNG AMZN CLF KMG AAPL CE GME MA VRSN MOS MTW MGM
2007-08-31 AXON FSLR DECK MA FCX CF AMZN CE CMI ALGN CMG PCAR ICE CLF NOV
2007-09-28 GME AXON CMI NOV LVS UAA WYNN BIIB GRMN BKNG ISRG CMG MA NVDA FLR
2007-10-31 GRMN NOV LVS BIIB FTI FLR NVDA AMZN CLF WYNN CMI BKNG EXPE GME ISRG
2007-11-30 FTI GRMN NOV FLR GOOG CF LVS BIIB CMG WYNN AMZN GME CIEN FCX CLF
2007-12-31 ISRG CF GOOG FSLR BKNG CMG FLR DECK NOV MA VRSN GRMN FTI CNX J
2008-01-31 FSLR MOS ESRX CF BKNG ISRG CMG WDC DECK J VRSN PRGO FLS ADM MA
2008-02-29 FSLR CF BKNG MOS J WDC MA ESRX CNX FLR BG NDAQ FTI CSX CLF
2008-03-31 CF BKNG MOS WDC FSLR CNX BIIB CSX CLF WHR HAL ESRX FLR MA FTI
2008-04-30 CF MOS BKNG WDC JCI HAL FSLR DECK CLF RRC STLD CNX CTRA CSX MA
2008-05-30 CF MA FSLR BKNG MOS CLF CNX HAL FTI APA OXY CSX FLR WDC STLD
2008-06-30 CF MA MOS WDC FSLR BKNG HP CNX CSX CLF BBBY HAL OXY FLR CTRA
2008-07-31 CF MEE CLF MOS HP MA BTUUQ X BKNG ESV HAL CSX NOV FSLR WDC
2008-08-29 CF CLF MBI ESV FFIV FSLR BTUUQ HP APOL BCR MEE CEPH JBL HAS ATGE
2008-09-30 MBI COF BCR PHM APOL MCD CEPH MRSH ESV NSC SCHW NFLX ATGE HAS PNC
2008-10-31 MBI UAL MRSH ABT MCD AON DAL TFC USB NSC ED BCR BAX KR PNC
2008-11-28 DAL AON MCD KR TFC ABT UAL DLTR ED SHW MRSH USB FHN HBAN PHM
2008-12-31 AON MCD ABT DLTR SHW BMY FHN KR DAL CHRW MRK AMGN WM GILD CL
2009-01-30 ANDV ABT MCD DLTR ADM BMY DRI MDLZ MNST HUM XOM CL GILD BAX PCG
2009-02-27 BKNG DRI ANDV ABT VTRS MCD AON BIIB GOOG PCG ADM NFLX BMY DLTR CAG
2009-03-31 BKNG CF AKAM MU GOOG DRI VTRS MS BMY MRVL ADM DLTR NFLX BIIB MNST
2009-04-30 BKNG MRVL EBAY CF AKAM GLW DRI ICE NFLX MS CIEN CTSH MU WDC NFX
2009-05-29 EBAY GNW BKNG CF STLD MOS PRU ASH CNX MS MU FSLR GT GLW CIEN
2009-06-30 GNW PRU MSI BKNG GT STLD IP CBRE MTG THC EBAY STT AAPL HST F
2009-07-31 FITB GNW PRU COF BKNG LNC LVS IP DD EBAY PFG MTG MOS CBRE MSI
2009-08-31 FITB LVS FNMA HIG COF FMCC GNW BKNG PRU AIG LNC IP SLG DD MAC
2009-09-30 FMCC FNMA GNW LVS FITB MTG MGM HIG COF UAL BKNG AIG MU TXT LNC
2009-10-30 GNW HIG FMCC LVS FNMA BKNG FLEX BC CAR PSKY INCY SANM BX WSM THC
2009-11-30 LVS GNW HIG FLEX PSKY BKNG JBL DD CAR MAC BC TT AMD SLG CTSH
2009-12-31 BKNG GNW DD MAC AMD KMG DDS IP SLG TT LVS CLF JBL F CTSH
2010-01-29 BKNG AMD MU CLF DD MTW SLG CAR LVS JBL ATI F TXT DDS UAL
2010-02-26 AMD MU NYT MTW JBL BKNG LVS ATI DD DAL MTG HUM F INCY HBAN
2010-03-31 F AAL LVS UAL CLF SANM ZION DDR BKNG HBAN MTW WSM ATI FFIV MGM
2010-04-30 CLF MTG UAL LVS BKNG VIAV AAL DECK HBAN GNW LPX ZION F MBI DDR
2010-05-28 MTG ZION UAL BC CLF VIAV MBI MGM HBAN RF PVH HST LVS LPX F
2010-06-30 ZION LVS HBAN AIG DDS AIV CMI AKAM WLL VIAV EQR HST DECK BBWI KEY
2010-07-30 AKAM CLF AIG LVS DECK ZION KDP MBI BC MTG HBAN SWKS BBWI VIAV EQR
2010-08-31 CLF LVS CTSH BKNG CMI AKAM FFIV NTAP NFLX SWKS BWA MBI BBWI AIV NEM
2010-09-30 LVS AKAM CLF MBI BKNG NFLX CTSH NTAP CMI FFIV SWKS VIAV EQR BBWI CBRE
2010-10-29 MBI AKAM CMI LYB CTSH LVS FTNT EMN BKNG NFLX AAPL WLL WSM FCX CLF
2010-11-30 LVS NTAP BKNG WLL MBI F FFIV URI NOV AIG SWKS EBAY FCX FTNT UAL
2010-12-31 LVS DECK FFIV MGM AIG MBI TPR URI SWKS FTNT CIEN EW BKNG VRTS ILMN
2011-01-31 CIEN WLL DECK LVS CLF BWA ETFC FCX AIG XEC VIAV CXO PXD ALXN JOY
2011-02-28 VIAV NVDA ANDV TEX URI MAY ETFC WLL NOV FLR JBL LVS SWKS CXO PXD
2011-03-31 VIAV CIEN PSKY SWKS NOV ANDV MAY NVDA CBRE DECK BKR NXPI TTWO LYB TEX
2011-04-29 VIAV ANDV BIIB PSKY MTW CIEN CBRE DECK IRM HP NBR NOV NXPI BWA HUM
2011-05-31 BIIB ANDV GT VIAV BKNG BBWI CXO PXD GR LYB CIEN BKR FDO ARG MJN
2011-06-30 GT DDS BIIB BBWI BKNG EA AET ANF IPGP HUM ELV WYNN ANDV BKR PSKY
2011-07-29 CEPH PSKY MNST WCG ADS GR BIIB COG KSU EA EP ABMD GMCR AET ACN
2011-08-31 BIIB CF BKNG AAPL MNST CEPH CTRA EQT LVS VFC PSKY WCG WYNN BBWI RRC
2011-09-30 CTRA AAPL MNST VFC BIIB EQT RRC TJX DECK DLTR CF BBWI RL EA CL
2011-10-31 MNST CF RRC KLAC DECK DLTR BIIB CTRA AAPL VFC EA RL TJX MAY EQT
2011-11-30 DECK BIIB KLAC VFC RRC CTRA MNST ULTA DLTR WMB INTC TJX BBWI EQT ADS
2011-12-30 CTRA KLAC PM AKAM TJX PSKY M FTI WMB BIIB HUM MA GWW DLTR OKE
2012-01-31 MNST WCG ADS GR COG AKAM WMB CF KSU M KLAC HD TJX AAPL MBI
2012-02-29 LYB TEX AAPL SWKS WCG BKNG MTW ADS GR STX GRMN TJX AKAM MOH KSU
2012-03-30 BKNG AAPL LYB LVS RF STX CPRI MOH ADS MTG JBL TEX SWKS GR EQIX
2012-04-30 AAPL TJX BKNG EQIX PSKY TT MNST TFC SHW KMI RF LVS EBAY HOG ULTA
2012-05-31 STX BKNG AAPL WMB EBAY MNST ORLY TJX EC PSKY EQIX SHW HOG USB TFC
2012-06-29 MNST STX BKNG AAPL SHW EBAY TJX DAL DLTR CF KBH SBAC ROST TDC GPS
2012-07-31 MNST AAPL STX EBAY MRK EW EQIX TJX LEN SHW LPX BKNG KMB STZ BIIB
2012-08-31 STX KBH MRK WDC EBAY AAPL CMCSA EW RF TJX SHW ALL SBAC TWX BLDR
2012-09-28 STX LPX VLO KBH EBAY STZ CPRI LYB PHM DHI AAPL LEN TEX MAS RF
2012-10-31 ANDV KBH LYB ALL EBAY SHW STZ TWX VLO MAS DHI MPC MRK HCA LEN
2012-11-30 KBH FSLR GNRC META HCA PHM LYB ALL ANDV EBAY BAX LEN DVA LPX CMCSA
2012-12-31 KBH FSLR GNRC GNW STX EBAY STZ THC PVH MTW PHM GILD BBBY LEN BAX
2013-01-31 META LPX STX PPG APTV HCA DXC DAL PHM TEX STT GNW WDC FSLR EMN
2013-02-28 LYB KBH DAL HCA TEX PHM GS THC LPX MAS STT BSX MPC PSKY TSN
2013-03-28 FNMA FMCC VLO TEX MPC KBH CTRA ANDV DAL STT BX DXC KKR STX APO
2013-04-30 FNMA FMCC HRB ANDV MTG MPC CTRA THC COR TWX BIIB GILD DXC KR GNW
2013-05-31 FNMA FMCC KBH MTG BX MBI FSLR ANDV KR MPC PHM THC ALK KKR PSKY
2013-06-28 FNMA FSLR FMCC BIIB MBI BX APO CAR MTG BSX CPAY WDC GILD STZ REGN
2013-07-31 FNMA FMCC FSLR MBI WDC BKNG GNW DXCM BX CME STX APTV CAR MET BSX
2013-08-30 MTG GNW TRIP TSN BSX DAL FNMA CIEN PRU MET BKNG LYV SVU BBBY FMCC
2013-09-30 MTG TRIP EA BSX GT FNMA CIEN LNC FMCC BKNG DD FANG DAL FL CPRI
2013-10-31 FNMA FMCC MGM GT BKNG BX BSX INCY META DXCM CIEN LVS ADS FSLR FLT
2013-11-29 FNMA FMCC FSLR PBI INCY ALGN META FANG AXON WEN BKNG BA DAL APO GNW
2013-12-31 FNMA FMCC PBI DECK BKNG MCK DAL FSLR INCY BIIB IBKR META MU FANG ALGN
2014-01-31 FNMA FMCC MGM DECK DAL BKNG GT SMCI STZ BX ADS LVS MU CAR PXD
2014-02-28 INCY ILMN SMCI BKNG MGM MU TKO BIIB META ADSK VTRS ADS FLT FSLR AXON
2014-03-31 FNMA ILMN FMCC VTRS MGM INCY DXCM FSLR BIIB FRX BX META WYNN CPRI TKO
2014-04-30 FNMA FMCC VTRS FSLR ILMN MGM GLW HP TSN CPRI NXPI FRX SWKS TKO EOG
2014-05-30 FNMA ILMN FMCC TSN DD LYB BKR HP DAL META GLW VLO GNW MGM URI
2014-06-30 DAL SWKS EA FNMA META TRGP FANG LYB URI FMCC VTRS WMB SMCI CNX FRX
2014-07-31 FNMA NFX MU EA FANG SWKS ILMN FMCC TRGP TAP WMB WLL CAR DAL URI
2014-08-29 TWX MU FANG FSLR CAR TRGP MNST SMCI DAL NBR GILD HAL LUV STLD ILMN
2014-09-30 TWX STLD NXPI HCA UHS LYB GILD TPL WMB THC ANDV LUV URI ELV KMI
2014-10-31 GILD HCA SIAL MU NXPI SWKS STLD LUV WMB DXCM ILMN ANET MNST TAP TWX
2014-11-28 CSX SWKS ANDV UNP SMCI TWX NXPI EA DXCM IRM HCA TTWO AAPL ELV BDX
2014-12-31 EW INCY ANDV MNST ZTS SWKS EA IRM DXCM AMGN SMCI CNC WELL CSX NAVI
2015-01-30 EW DAL KR RCL ZTS SWKS MNST KMX ALK MAC WELL LUV EA PCG AXON
2015-02-27 KR AXON ALK ANDV SWKS EA LUV SHW MAC DXCM RMD WELL UAL AAPL PCG
2015-03-31 BIIB SWKS DLTR INCY EW ANDV NXPI KR MNST ELV AAPL ALK AET HUM EA
2015-04-30 SWKS CNC INCY NXPI HUM DLTR KR VTRS ANDV PRGO MNST PAYC KMX CI KSS
2015-05-29 AXON VTRS PRGO BLDR KR COR PAYC SWKS EA NFX HSP MNST BIIB BX KMX
2015-06-30 HUM VTRS SWKS BX ZTS AET CNXT GILD AXON PRGO INCY BIIB ELV EA BRCM
2015-07-31 HUM CNC AET EA BTUUQ COTY SWKS IBKR INCY VLO CI ANDV HCA ILMN EW
2015-08-31 EA ANDV AET MDLZ VLO MNST HCA SBUX IBKR HUM CI EW ALK GOOG ORLY
2015-09-30 DXCM INCY ANDV BLDR MDLZ EA VLO BKNG HUM SBUX TKO GOOG MNST ORLY HIG
2015-10-30 INCY DXCM BKNG GOOG VLO MDLZ SBUX EA ANDV MAS AET COTY EQIX STZ ACN
2015-11-30 GOOG VLO ANDV AMZN TAP MAS GOOGL GPN META DD SBUX ORLY LUV EQIX STZ
2015-12-31 GOOG DD GPN VLO VRSN AMZN ARG ANDV MAS GOOGL TSN KR META HD FSLR
2016-01-29 GOOG TSN ARG ABMD FSLR VLO TAP AMZN GOOGL SEDG ATVI STZ EQIX MCD KMB
2016-02-29 TSN GOOG T KMB MAT VZ EW MCD PM XEL PPL DLR KR BKNG AWK
2016-03-31 TSN T PM CPRI AWK MAT LUMN VZ TPR FSLR NDAQ PSKY LVS DD GOOG
2016-04-29 CNX RRC TSN MAT EW CPRI MUR GPN HPE DD PSKY CLF CMI AMZN OKE
2016-05-31 CNX RRC CLF EW DLR MUR NRG DXC ULTA STLD ALB TSN NXPI MTW EQIX
2016-06-30 ALB DXC STJ EW CNX STLD WCG TRGP RRC MUR DLR SIVB EVRG ABMD MTW
2016-07-29 DLR DXC OKE ALB CLF NFX WB GEN AMAT CNP AWK BSX STLD DXCM MLM
2016-08-31 CLF WMB ULTA OKE KMI CNX GRMN ALB DXC VTR NFX EW HPE DLR IRM
2016-09-30 CLF WMB KMI DHR GEN WB TRGP GRMN HPE AMAT GNW AMZN CNX URI PODD
2016-10-31 WB LITE WMB GEN CLF HPE NXPI GNW TPL CNX AMZN AMAT DHR NBR LRCX
2016-11-30 CLF WB WOR LITE DXC BBY STLD KEY GEN NVDA TWX BKNG LVS FITB KLAC
2016-12-30 CLF FNMA FMCC STLD NUE BBY CSX NVDA RF BKR CFG MET FITB NBR MS
2017-01-31 CLF CSX STLD FMCC NBR FNMA FITB KEY CFG HBAN RF ZION NVDA BBY XYZ
2017-02-28 CLF NRG RF HWM NVDA LITE CFG XYZ SLM CSX MTG XRX DXC COHR LNC
2017-03-31 INCY CSX TTD HWM RF CFG DXC KEY PNC HBAN COHR URI PRU LNC GS
2017-04-28 TTD INCY DXC HWM KLAC CSX AMAT FMC CFG SWKS VIAV LRCX NVDA KEY BBY
2017-05-31 WB ADSK TTWO VEEV LRCX DXC BBY CSX LITE BKNG GOOG EA KLAC INCY APO
2017-06-30 WB ADSK TTD XYZ TTWO EA LRCX VEEV LITE NVDA AMAT BCR BBY DXC CSX
2017-07-31 LITE XYZ WB TTD CVNA LRCX AMAT ALGN ADSK VEEV TTWO BBY NVDA MU NRG
2017-08-31 XYZ NRG LRCX ALGN BA FSLR LITE CVNA MU META NVDA EA AMAT WB TTWO
2017-09-29 WB NRG NVDA APTV FSLR BA TTWO ADSK EA LRCX FMC ALGN ABMD MU VRTX
2017-10-31 WB ABBV NRG GM CNC AMAT AET BA MU TROW FMC FSLR LRCX XYZ DELL
2017-11-30 XYZ BBBY MU LRCX TTWO WB NRG IPGP NVDA AMAT ALGN ON ANET INTC COHR
2017-12-29 XYZ BBBY ALGN MU WB IPGP TTWO FSLR NRG IBKR LRCX NVDA ELV ANET ON
2018-01-31 BBBY XYZ FSLR WB ALGN TROW KBH MU KSS ABBV ELV EC CPRI IPGP BBY
2018-02-28 BBBY XYZ FSLR ANET EC WB MU CPRI WYNN ALGN TXN TROW LOW LRCX RL
2018-03-29 XYZ MU WB ANET ALGN NKTR BA NFLX HPE LRCX ON IBKR WYNN DECK CAT
2018-04-30 XYZ NKTR MU MPC CVNA ANET VLO KSS WYNN HPE NFLX FSLR PSX GWW ABMD
2018-05-31 MU NKTR VLO PSX ABMD MPC XYZ NRG M ANDV CPRT BKNG COP GWW EC
2018-06-29 XYZ MU VLO ALGN ANDV THC M CPRT NKTR DECK PSX KSS RL AXON TRIP
2018-07-31 XYZ MU ALGN DXCM CVNA AXON KDP GDDY CNC DECK TKO CPRT KSS TRIP VLO
2018-08-31 KDP M XYZ CSX WSM LUMN CLF GWW CNC KR CPRT TJX ABMD KSS VFC
2018-09-28 CVNA LUMN DXCM XYZ KDP ANDV CLF MOH AMZN ABMD NSC TJX CSX WSM CNC
2018-10-31 XYZ ABMD MOH CVNA DXCM CLF VEEV TKO TJX ESRX BSX LUMN PFE MRK HCA
2018-11-30 ABMD MRK XYZ DXCM KDP CVNA ESRX MKC BSX VZ DELL ULTA HCA AES LW
2018-12-31 MRK ESRX MKC PFE DXCM NRG KDP VZ BALL CME LW HCA AES AAP SBUX
2019-01-31 NRG XYZ CIEN DXCM AVGO MRK SBUX SCG EW CHD RHT TKO BALL ESRX WELL
2019-02-28 XYZ FNMA FMCC CLF CIEN AES BALL AVGO VEEV KEYS NRG SBUX DXCM ELV WELL
2019-03-29 CVNA FNMA FMCC KMI BALL AES NYT VEEV KLAC KEYS CIEN LRCX SSP XLNX XYZ
2019-04-30 KEYS ALGN SMCI FNMA VEEV ZBRA META GRMN CSCO FMCC NYT NSC HET ULTA XLNX
2019-05-31 CVNA BALL TSN HET MDLZ TT MSFT APD DIS MSCI COTY CSGP QCOM NSC PAYX
2019-06-28 CVNA VEEV MKTX LHX MSFT MTCH QCOM FNMA HSY FDS GPN TSN MDLZ FMCC MSCI
2019-07-31 VEEV MKTX ERIE XYZ CSGP CVNA GPN BBBY BALL SBUX FIS HSY KLAC EW MSI
2019-08-30 QCOM FISV CSGP HSY ZTS VEEV EW FIS HET SBUX MKTX BALL TSN KEYS KLAC
2019-09-30 HSY TSN BALL KLAC FISV CVNA CSGP MKTX FNMA LRCX ZTS WEC SBAC CPRT QCOM
2019-10-31 PODD KLAC MKTX CVNA FNMA LRCX SHW KBH HET CVS TGT PHM EW BIIB QCOM
2019-11-29 KLAC WU LRCX QCOM KBH LUMN BIIB CPRT HET AMAT SWKS CDW TER BMY TGT
2019-12-31 CVNA DXCM WU QRVO SWKS QCOM HWM HET LRCX BIIB PODD JBL APO MU KLAC
2020-01-31 SWKS QRVO THC ANSS APO LITE BMY HET CDAY MSFT AAPL CPRT KSU INTC TIF
2020-02-28 SWKS PCG PENN TSLA MSFT LITE HET CPRT CVNA AAPL QRVO APO BMY LDOS LRCX
2020-03-31 CRWD TSLA GEN DXCM NEM MSFT KR BIIB MCK GOOG ABBV LDOS CSGP LRCX SWKS
2020-04-30 CRWD KR NEM DXCM GEN DLR LLY CNC MSFT CLX UIS ABBV BIIB LDOS RRC
2020-05-29 DXCM BBBY NEM CNX CRWD KR CLX PENN LLY CVNA EQT AMZN SWKS MSFT GEN
2020-06-30 PENN DXCM CVNA NEM XYZ RRC AMZN SWKS CNX EBAY AAPL MSFT LOW VEEV EQT
2020-07-31 PENN XYZ DXCM EBAY CVNA TSLA NFLX DDOG AMZN ADSK QCOM LOW MSFT BBBY ADBE
2020-08-31 BBBY PENN CVNA RRC META XYZ CAR DXCM ETSY LOW EBAY PBI NFLX BBY DHI
2020-09-30 BBBY CZR XYZ RRC AAPL PENN META PBI CVNA FDX FSLR LOW AMD AMZN TSLA
2020-10-30 PENN CVNA XYZ BBBY FDX CZR ENPH PBI VIAC CAR TSLA LOW PSKY ETSY AAPL
2020-11-30 BBBY PENN XYZ FDX VIAC CARR PSKY MGM COTY GNRC PCG LRCX ENPH ALGN SEDG
2020-12-31 XYZ PENN CVNA PLTR FSLR MRNA LRCX ETSY FDX PD COTY ENPH CAR PBI CARR
2021-01-29 CLF PBI CVNA PSKY BBBY XYZ ALB LRCX ENPH APTV CPRI WSM AMAT KLAC CZR
2021-02-26 CLF PENN PBI TDC XYZ ALB ENPH COHR AXON GNRC DDS TUP TSLA PSKY PD
2021-03-31 DVN PENN FANG TRIP TPR CPRI CZR GNRC MGM NBR TDC PBI PSKY VIAC MUR
2021-04-30 TRIP CLF VIAC DVN WSM DISCA CZR DISCK TPL MGM LPX AMAT GT TDC LRCX
2021-05-28 CLF MAC TPL LPX WSM NUE DVN TDC TPR STLD FANG COTY DDS CPRI COF
2021-06-30 NUE CLF BBBY MAC COF LPX CAR STLD TRGP DVN CZR FCX BX XEC NBR
2021-07-30 NUE TRGP DVN RRC ASO GNRC BX MUR GOOG MAC COF TGT GS CLF STLD
2021-08-31 MRNA CLF NUE MAC RRC TRGP COF DDS STLD BX SIVB GNRC KKR CARR DVN
2021-09-30 MRNA BX NUE SIVB ALB SBNY PKI NAVI GOOG XEC KSU GOOGL EPAM COF PXD
2021-10-29 MRNA RRC NUE BX SIVB SBNY FANG DVN MAC CAR ASO APO CLF OXY DASH
2021-11-30 CAR RRC MRNA DDS APP DVN DXCM KKR JWN BX FANG LYV APO APA COIN
2021-12-31 CAR DDS APP DVN BX AMD M TSLA KLAC PFE KKR NVDA JWN ALB FANG
2022-01-31 CAR BLDR DDS DVN PFE F ON M BX CVX LYV KLAC DLTR HPQ WFC
2022-02-28 CAR DVN RRC BLDR CVX WFC EXC EOG XOM DDS M BX OXY MCK FANG
2022-03-31 CAR CVX COP DVN XOM OXY BKR EOG FANG NUE DDS FCX CTRA ADM MOS
2022-04-29 CAR BKR CLF EQT CVX NUE KR MOS OXY ABBV DVN COP ADM EXC RRC
2022-05-31 MOS NUE CF CVX KR XOM BKR APA ADM OXY CTRA DVN CLF MRK EOG
2022-06-30 EQT CTRA DVN VLO MPC XOM APA EOG OXY COP CVX PSX MRK ABBV MRO
2022-07-29 DVN VLO MPC CTRA XOM EQT OXY COP APA PSX CVX EOG MRO MOS EXE
2022-08-31 VLO DVN MPC CF COP XOM OXY APA VICI CVX ON PSX MOS EOG MCK
2022-09-30 DVN EQT VLO COP MPC OXY XOM CF SMCI CTRA EOG PSX MRO ON CVX
2022-10-31 DVN COP VLO APA MPC PSX OXY CAH PCG XOM EOG CAR CVX TE CF
2022-11-30 MPC COP MRNA XOM PSX VLO MRK APA EOG DXCM TJX FSLR SLB CAH SMCI
2022-12-30 MPC FSLR APA SMCI MRNA PSX COP STLD XOM MRK VLO PCG ABMD CVX EOG
2023-01-31 CLF BKNG MPC VLO FCX ABMD FSLR SMCI MRNA STLD XYZ NFLX CAT HES FLEX
2023-02-28 CLF BKNG UCL MPC ALGN LVS STLD CAR XYZ VLO RE CAT FSLR NUE SMCI
2023-03-31 BKNG STLD UCL LVS SMCI VLO FTI MPC ALGN FSLR TEX NUE ON URI ANET
2023-04-28 FSLR BKNG SMCI ANET ALGN LVS COTY FDX BSX MTW DECK BLDR FTI MPC AVGO
2023-05-31 BKNG FSLR SMCI LVS BLDR KLAC LEN ANET PHM MDLZ APP BSX AVGO CPRT CMG
2023-06-30 CVNA SMCI BKNG AVGO BLDR LRCX NFLX ORCL PHM TSLA APP META LEN KLAC EQT
2023-07-31 CVNA SMCI BKNG NFLX DAL AVGO ORCL BLDR FSLR VRT LRCX META TSLA JBL KLAC
2023-08-31 SMCI CVNA BKNG DASH GP BBBY BLDR CARR META MPC NFLX RCL DAL FNMA KLAC
2023-09-29 CVNA SMCI BKNG CPRI FNMA DASH VRT BLDR DELL APP GOOG MPC CARR PSX AVGO
2023-10-31 SMCI CVNA APP CPRI BKNG DELL VRT JBL MPC GOOG PSX KLAC APO VST FNMA
2023-11-30 SMCI CVNA FNMA VRT BKNG FTI DASH META VST DELL FMCC JBL NOW APP KLAC
2023-12-29 CVNA VRT XYZ SMCI DASH DECK BKNG KEY AVGO FNMA BLDR WSM CLF TFC NOW
2024-01-31 CVNA FNMA DASH BKNG FMCC IBM SMCI AVGO FICO WSM ANET NVDA KEY NOW DELL
2024-02-29 SMCI CVNA FNMA DASH APP FMCC ANET HOOD UBER NOW BKNG VRT IBM AVGO PCAR
2024-03-28 SMCI DELL CVNA FNMA APP FMCC VRT VST META DASH NVDA COHR ADCT ANET DECK
2024-04-30 SMCI HOOD CVNA APP FNMA DELL NVDA WSM FMCC DASH COHR DECK META VRT ADCT
2024-05-31 DELL CVNA SMCI VRT VST HOOD FNMA WSM APP NRG NVDA COIN FMCC ANF DYN
2024-06-28 DELL VST VRT FSLR SMCI HOOD NVDA NRG CVNA DECK AVGO HWM APP QCOM IP
2024-07-31 HOOD VST CVNA NVDA APP COHR FSLR AVGO ANF GLW ANET VRT NRG KLAC COIN
2024-08-30 LUMN CVNA VST NVDA HOOD FICO IRM COHR AVGO GLW ANET PBI HWM VRT WELL
2024-09-30 VRT LUMN HOOD CVNA FSLR NVDA COHR VST TRGP PM APP WELL PGR PBI KKR
2024-10-31 VST HOOD LUMN COHR NVDA VRT APP CVNA ECHO BKNG ANET IRM HWM UIS AXON
2024-11-29 LUMN VRT VST HOOD FNMA FMCC GEV COHR TPL NFLX TRGP CVNA WMB BKNG KMI
2024-12-31 APP CVNA HOOD VST TPL VRT AXON TRGP LUMN APO COHR WMB OKE BKNG NFLX
2025-01-31 VST FNMA APP GEV TPL FMCC HOOD VRT KMI LITE CIEN TRGP TSLA AXON COIN
2025-02-28 HOOD APP GEV FNMA IBKR CVNA FMCC VST NFLX CIEN PLTR DASH TPR META LU
2025-03-31 HOOD APP TPR CVNA FNMA GEV FMCC DASH TPL NFLX PLTR PM HWM BSX IBKR
2025-04-30 HOOD APP TPR GEV FNMA CVNA BKNG PM DASH NFLX FMCC LU VST WELL KR
2025-05-30 APP VST HOOD GEV NFLX PM UBER CVNA IBKR NEM BKNG TPR NRG GILD TSLA
2025-06-30 APP SMCI VRT HOOD FNMA CVNA PM VST NFLX IBKR NRG GEV BKNG DASH TPR
2025-07-31 APP HOOD FNMA CAR VRT HWM FMCC SMCI NFLX CVNA TPR JCI GEV RCL FLEX
2025-08-29 HOOD CAR GEV APP VST TPR VRT CVNA COIN DASH IBKR SSP JBL NVDA LRCX
2025-09-30 FNMA ECHO GEV TE AVGO GOOG LITE FMCC HOOD CVNA PSKY APP TPR COIN NEM
2025-10-31 APP TE FMCC NEM ECHO HOOD FNMA LITE PSKY KLAC LRCX VRT GLW AVGO GOOG
2025-11-28 APP HOOD LUMN TE VRT ECHO GLW GOOG LRCX KLAC MU NEM CLF CIEN AMD
2025-12-31 LUMN LITE VRT CVNA CLF COHR WDC GOOG GLW AMD HOOD LRCX SSP KLAC AVGO
2026-01-30 ECHO ALB KLAC NEM TE WDC LRCX SSP COHR MU GLW LITE CVNA CIEN LUMN
2026-02-27 TE ECHO GLW KLAC LITE ALB COHR LRCX MU VRT WDC GOOG CIEN BWA GEV
2026-03-31 COHR GLW LITE MU CIEN LRCX VRT KLAC WDC NEM ECHO ATI DELL IPGP GEV
2026-04-30 CAR COHR GLW KLAC GEV ECHO LYB DELL MU APA LRCX LITE ALB NEM VRT
2026-05-29 LITE VRT GLW COHR CAR VIAV GEV APA ECHO LYB FIX DOW KLAC SMCI CIEN
2026-06-26 HPE DELL LITE TE CIEN VRT COHR FLEX VIAV WDC MU KLAC GLW LRCX SANM
Scoring script (python)
FORMULA_NAME = "Contrarian 52-Week Recovery with Quality Conflict Arbitration (v1150)"
LOGIC_VARIANT_COUNT = 4
NOTES = """mode=explore; family=contrarian-52w-recovery-quality-hybrid
New hybrid family that fuses a deep-contrarian 52-week drawdown sleeve with a recovery-quality durability sleeve, but only after an explicit conflict check: violent rebounds without enough balance-sheet/earnings/liquidity support get capped, while high-quality businesses with only partial repair can still win in stressed tapes if their tradability and volatility profile are strong. The structure is intentionally not a flat average: each regime branch changes both the sleeve mix and the arbitration rule.
Deliberate metric coverage: actively use a recovery/trend cluster (from_52w_high_pct, from_200d_ma_pct), a momentum cluster (return_3m_pct, return_6m_pct, momentum_12_1_pct, return_12m_pct), a volatility check (realized_vol_3m), a liquidity cluster (avg_daily_dollar_volume_3m, avg_daily_volume_3m, trading_days_3m), an income cluster (dividend_yield_ttm_pct, dividend_ttm), a valuation cluster (peg, forward_pe), a growth cluster (revenue_growth_pct, eps_growth_pct, forward_eps), a quality cluster (free_cash_flow_ttm, operating_income_ttm), and a size tilt (market_cap). Deliberately weight return_1m_pct, pe, shares_outstanding, close, adj_close, high_52w, ma_200d, eps_ttm, and revenue_ttm at zero this run so the backtest can test a different orthogonal mix instead of collapsing into the recent parents. Sparse fundamentals are normalized by present weight before the final arbitration."""

def _get(obj, key, default=None):
    if isinstance(obj, dict):
        return obj.get(key, default)
    return getattr(obj, key, default)


def _to_num(value):
    if value is None:
        return None
    if isinstance(value, bool):
        return 1.0 if value else 0.0
    try:
        x = float(value)
    except Exception:
        return None
    if x != x:
        return None
    return x


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


def _percentile_maps(rows, metrics):
    maps = {}
    for metric in metrics:
        vals = []
        for row in rows:
            v = _to_num(_get(row, metric))
            if v is not None:
                vals.append(v)
        if not vals:
            maps[metric] = None
            continue
        vals.sort()
        n = len(vals)
        denom = n - 1 if n > 1 else 1
        metric_map = {}
        for i, v in enumerate(vals):
            metric_map[v] = i / denom
        maps[metric] = metric_map
    return maps


def _rank(row, metric, maps, invert=False):
    metric_map = maps.get(metric)
    if not metric_map:
        return None
    v = _to_num(_get(row, metric))
    if v is None:
        return None
    r = metric_map.get(v)
    if r is None:
        return None
    return 1.0 - r if invert else r


def _blend(parts):
    total_w = 0.0
    total = 0.0
    for value, weight in parts:
        if value is None or weight <= 0:
            continue
        total += value * weight
        total_w += weight
    if total_w <= 0:
        return None
    return total / total_w


def _mul_gate(a, b):
    if a is None or b is None:
        return None
    return (a * b) ** 0.5


def _regime_branch(regime):
    name = str(
        _get(regime, "name",
        _get(regime, "regime",
        _get(regime, "state",
        _get(regime, "label", regime))))
    ).lower()

    trend_6m = _to_num(_get(regime, "market_return_6m_pct"))
    trend_3m = _to_num(_get(regime, "market_return_3m_pct"))
    vol = _to_num(_get(regime, "market_realized_vol_3m"))
    drawdown = _to_num(_get(regime, "market_from_52w_high_pct"))

    bullish = False
    stressed = False

    if "bull" in name or "risk_on" in name or "uptrend" in name:
        bullish = True
    if "bear" in name or "stress" in name or "volatile" in name or "correction" in name:
        stressed = True

    if trend_6m is not None and trend_6m > 6:
        bullish = True
    if trend_3m is not None and trend_3m > 3:
        bullish = True
    if vol is not None and vol > 38:
        stressed = True
    if drawdown is not None and drawdown < -12:
        stressed = True

    if bullish and stressed:
        return "stressed_bull"
    if bullish:
        return "calm_bull"
    if stressed:
        return "defensive"
    return "transition"


def score_universe(stocks, regime, ctx):
    rows = []
    if isinstance(stocks, dict):
        for symbol, stock in stocks.items():
            if isinstance(stock, dict):
                row = dict(stock)
                row.setdefault("symbol", symbol)
            else:
                row = stock
            rows.append(row)
    else:
        for stock in stocks:
            rows.append(stock)

    metrics = [
        "from_52w_high_pct",
        "from_200d_ma_pct",
        "return_3m_pct",
        "return_6m_pct",
        "return_12m_pct",
        "momentum_12_1_pct",
        "realized_vol_3m",
        "avg_daily_dollar_volume_3m",
        "avg_daily_volume_3m",
        "trading_days_3m",
        "dividend_yield_ttm_pct",
        "dividend_ttm",
        "peg",
        "forward_pe",
        "revenue_growth_pct",
        "eps_growth_pct",
        "forward_eps",
        "free_cash_flow_ttm",
        "operating_income_ttm",
        "market_cap",
    ]
    ranks = _percentile_maps(rows, metrics)
    branch = _regime_branch(regime)
    scores = {}

    for row in rows:
        symbol = _get(row, "symbol")
        if symbol is None:
            continue

        deep_discount = _rank(row, "from_52w_high_pct", ranks, invert=True)
        repaired_trend = _rank(row, "from_200d_ma_pct", ranks)
        mom_3m = _rank(row, "return_3m_pct", ranks)
        mom_6m = _rank(row, "return_6m_pct", ranks)
        mom_12_1 = _rank(row, "momentum_12_1_pct", ranks)
        ret_12m = _rank(row, "return_12m_pct", ranks)

        low_vol = _rank(row, "realized_vol_3m", ranks, invert=True)
        liq_dollar = _rank(row, "avg_daily_dollar_volume_3m", ranks)
        liq_share = _rank(row, "avg_daily_volume_3m", ranks)
        liq_days = _rank(row, "trading_days_3m", ranks)

        inc_yield = _rank(row, "dividend_yield_ttm_pct", ranks)
        inc_cash = _rank(row, "dividend_ttm", ranks)

        cheap_peg = _rank(row, "peg", ranks, invert=True)
        cheap_fpe = _rank(row, "forward_pe", ranks, invert=True)

        grow_rev = _rank(row, "revenue_growth_pct", ranks)
        grow_eps = _rank(row, "eps_growth_pct", ranks)
        grow_fwd = _rank(row, "forward_eps", ranks)

        qual_fcf = _rank(row, "free_cash_flow_ttm", ranks)
        qual_oi = _rank(row, "operating_income_ttm", ranks)

        small_cap = _rank(row, "market_cap", ranks, invert=True)
        large_cap = _rank(row, "market_cap", ranks)

        repair_sleeve = _blend([
            (deep_discount, 0.30),
            (repaired_trend, 0.26),
            (mom_3m, 0.14),
            (mom_6m, 0.10),
            (mom_12_1, 0.12),
            (ret_12m, 0.08),
        ])

        durability_sleeve = _blend([
            (qual_fcf, 0.24),
            (qual_oi, 0.22),
            (grow_rev, 0.12),
            (grow_eps, 0.10),
            (grow_fwd, 0.08),
            (cheap_peg, 0.10),
            (cheap_fpe, 0.06),
            (inc_yield, 0.04),
            (inc_cash, 0.04),
        ])

        tradability_sleeve = _blend([
            (liq_dollar, 0.45),
            (liq_share, 0.25),
            (liq_days, 0.15),
            (low_vol, 0.15),
        ])

        balanced_risk = _blend([
            (low_vol, 0.40),
            (liq_dollar, 0.30),
            (liq_days, 0.10),
            (large_cap, 0.10),
            (inc_yield, 0.10),
        ])

        score = 0.0

        if branch == "calm_bull":
            core = _blend([
                (repair_sleeve, 0.58),
                (durability_sleeve, 0.24),
                (tradability_sleeve, 0.10),
                (small_cap, 0.08),
            ])
            gate = _mul_gate(repaired_trend, tradability_sleeve)
            if core is None:
                core = 0.0
            if gate is not None:
                core = 0.85 * core + 0.15 * gate
            if repair_sleeve is not None and durability_sleeve is not None:
                if repair_sleeve > 0.72 and durability_sleeve < 0.34:
                    core *= 0.78
                elif durability_sleeve > 0.72 and repair_sleeve < 0.44:
                    core *= 0.92
            score = core

        elif branch == "stressed_bull":
            core = _blend([
                (repair_sleeve, 0.40),
                (durability_sleeve, 0.34),
                (tradability_sleeve, 0.18),
                (balanced_risk, 0.08),
            ])
            gate = _mul_gate(durability_sleeve, tradability_sleeve)
            if core is None:
                core = 0.0
            if gate is not None:
                core = 0.78 * core + 0.22 * gate
            if repair_sleeve is not None and durability_sleeve is not None:
                if repair_sleeve > 0.72 and durability_sleeve < 0.42:
                    core *= 0.68
                elif durability_sleeve > 0.70 and repair_sleeve < 0.36:
                    core *= 1.06
            score = core

        elif branch == "defensive":
            controlled_repair = _blend([
                (repaired_trend, 0.42),
                (mom_3m, 0.18),
                (mom_6m, 0.12),
                (deep_discount, 0.10),
                (ret_12m, 0.18),
            ])
            core = _blend([
                (durability_sleeve, 0.40),
                (balanced_risk, 0.28),
                (tradability_sleeve, 0.18),
                (controlled_repair, 0.14),
            ])
            gate = _mul_gate(durability_sleeve, low_vol)
            if core is None:
                core = 0.0
            if gate is not None:
                core = 0.82 * core + 0.18 * gate
            if repair_sleeve is not None and durability_sleeve is not None:
                if repair_sleeve > 0.78 and durability_sleeve < 0.46:
                    core *= 0.62
                elif durability_sleeve > 0.76 and repaired_trend is not None and repaired_trend > 0.45:
                    core *= 1.05
            score = core

        else:  # transition
            early_repair = _blend([
                (deep_discount, 0.24),
                (repaired_trend, 0.24),
                (mom_3m, 0.18),
                (mom_12_1, 0.12),
                (cheap_peg, 0.10),
                (grow_rev, 0.12),
            ])
            core = _blend([
                (early_repair, 0.42),
                (durability_sleeve, 0.28),
                (tradability_sleeve, 0.14),
                (low_vol, 0.08),
                (small_cap, 0.08),
            ])
            gate = _mul_gate(repaired_trend, durability_sleeve)
            if core is None:
                core = 0.0
            if gate is not None:
                core = 0.80 * core + 0.20 * gate
            if early_repair is not None and durability_sleeve is not None:
                if early_repair > 0.68 and durability_sleeve < 0.32:
                    core *= 0.74
                elif durability_sleeve > 0.72 and early_repair < 0.38:
                    core *= 0.97
            score = core

        scores[symbol] = _clamp(score if score is not None else 0.0, 0.0, 1.0)

    return scores