exp_1187

Regime Momentum Contrarian 52W Recovery Quality Hybrid (Arbitrated, v1187)

← All V2 experiments
Relative return
1.265x
Excess vs bench
26.54%
Benchmark
CAPW_UNIV
Rolling windows
179 · monthly
Mean strategy gain
44.73%
Mean benchmark gain
14.08%
Mean excess gain
30.64%
Dispersion (ref)
18.71%
Win-rate vs bench (ref)
100.00%
Worst / best ratio (ref)
1.068x / 1.513x
Logic variants
3
Updated
Jul 21, 2026
Anchored windows (reference — strategy vs benchmark)
Kept from V1 for continuity; the objective ranks on the full rolling set, not these four.
WindowStrategyBenchmarkRatio
2006-07-03 … 2011-06-30 19.26% 2.22% 1.167x
2011-07-01 … 2016-06-30 39.64% 13.74% 1.228x
2016-07-01 … 2021-06-30 77.73% 20.63% 1.473x
2021-07-01 … 2026-06-26 40.50% 15.48% 1.217x
All rolling windows — the objective set (equal-weighted mean ratio)
Strategy Benchmark (CAPW_UNIV) Excess
2006200720082009201020112012201320142015201620172018201920202021 -20%0%20%40%60%80%100%
rolling 5y windows, monthly step — 179 windows · mean ratio 1.265x · beat benchmark in 179/179
#WindowStrategyBenchmarkRatio
1 2006-07-31 … 2011-07-29 18.85% 1.79% 1.168x
2 2006-08-31 … 2011-08-31 19.07% 0.21% 1.188x
3 2006-09-29 … 2011-08-31 19.26% -0.14% 1.194x
4 2006-10-31 … 2011-10-31 16.56% 0.23% 1.163x
5 2006-11-30 … 2011-11-30 15.22% -0.05% 1.153x
6 2006-12-29 … 2011-11-30 14.74% -0.32% 1.151x
7 2007-01-31 … 2012-01-31 14.91% 0.93% 1.138x
8 2007-02-28 … 2012-01-31 13.76% 1.43% 1.122x
9 2007-03-30 … 2012-03-30 17.35% 3.09% 1.138x
10 2007-04-30 … 2012-04-30 15.67% 2.42% 1.129x
11 2007-05-31 … 2012-05-31 13.06% 0.60% 1.124x
12 2007-06-29 … 2012-06-29 13.53% 1.92% 1.114x
13 2007-07-31 … 2012-07-31 14.47% 2.69% 1.115x
14 2007-08-31 … 2012-08-31 14.59% 2.95% 1.113x
15 2007-09-28 … 2012-09-28 13.61% 3.20% 1.101x
16 2007-10-31 … 2012-10-31 14.35% 2.60% 1.115x
17 2007-11-30 … 2012-11-30 16.40% 3.45% 1.125x
18 2007-12-31 … 2012-12-31 17.49% 3.69% 1.133x
19 2008-01-31 … 2013-01-31 23.22% 5.85% 1.164x
20 2008-02-29 … 2013-02-28 21.41% 6.82% 1.137x
21 2008-03-31 … 2013-03-28 22.65% 7.73% 1.138x
22 2008-04-30 … 2013-04-30 21.66% 7.51% 1.132x
23 2008-05-30 … 2013-04-30 21.33% 7.81% 1.125x
24 2008-06-30 … 2013-06-28 30.03% 9.33% 1.189x
25 2008-07-31 … 2013-07-31 33.68% 10.48% 1.210x
26 2008-08-29 … 2013-07-31 35.99% 10.52% 1.231x
27 2008-09-30 … 2013-09-30 43.29% 11.48% 1.285x
28 2008-10-31 … 2013-10-31 47.44% 15.76% 1.274x
29 2008-11-28 … 2013-10-31 49.74% 17.46% 1.275x
30 2008-12-31 … 2013-12-31 51.40% 18.44% 1.278x
31 2009-01-30 … 2013-12-31 54.56% 20.64% 1.281x
32 2009-02-27 … 2014-01-31 56.30% 21.63% 1.285x
33 2009-03-31 … 2014-03-31 58.31% 20.60% 1.313x
34 2009-04-30 … 2014-04-30 55.35% 19.00% 1.305x
35 2009-05-29 … 2014-04-30 56.53% 18.32% 1.323x
36 2009-06-30 … 2014-06-30 59.13% 19.01% 1.337x
37 2009-07-31 … 2014-07-31 55.50% 17.39% 1.325x
38 2009-08-31 … 2014-08-29 54.52% 17.70% 1.313x
39 2009-09-30 … 2014-09-30 51.62% 16.64% 1.300x
40 2009-10-30 … 2014-09-30 58.25% 17.08% 1.352x
41 2009-11-30 … 2014-11-28 53.06% 16.82% 1.310x
42 2009-12-31 … 2014-12-31 48.68% 16.28% 1.279x
43 2010-01-29 … 2014-12-31 50.80% 17.23% 1.286x
44 2010-02-26 … 2015-01-30 48.42% 15.80% 1.282x
45 2010-03-31 … 2015-03-31 45.71% 15.40% 1.263x
46 2010-04-30 … 2015-04-30 42.62% 15.38% 1.236x
47 2010-05-28 … 2015-04-30 43.92% 17.09% 1.229x
48 2010-06-30 … 2015-06-30 50.78% 17.45% 1.284x
49 2010-07-30 … 2015-06-30 50.34% 16.43% 1.291x
50 2010-08-31 … 2015-08-31 48.15% 15.76% 1.280x
51 2010-09-30 … 2015-09-30 44.49% 13.61% 1.272x
52 2010-10-29 … 2015-09-30 43.30% 13.06% 1.267x
53 2010-11-30 … 2015-11-30 42.95% 15.09% 1.242x
54 2010-12-31 … 2015-12-31 42.01% 13.55% 1.251x
55 2011-01-31 … 2016-01-29 39.90% 11.90% 1.250x
56 2011-02-28 … 2016-01-29 38.93% 11.53% 1.246x
57 2011-03-31 … 2016-03-31 39.46% 12.90% 1.235x
58 2011-04-29 … 2016-04-29 37.28% 12.39% 1.221x
59 2011-05-31 … 2016-05-31 37.40% 12.94% 1.217x
60 2011-06-30 … 2016-06-30 39.02% 13.30% 1.227x
61 2011-07-29 … 2016-07-29 41.35% 14.52% 1.234x
62 2011-08-31 … 2016-08-31 41.37% 15.19% 1.227x
63 2011-09-30 … 2016-09-30 44.44% 16.32% 1.242x
64 2011-10-31 … 2016-10-31 40.57% 14.02% 1.233x
65 2011-11-30 … 2016-11-30 43.70% 14.66% 1.253x
66 2011-12-30 … 2016-12-30 40.74% 14.92% 1.225x
67 2012-01-31 … 2017-01-31 40.54% 14.63% 1.226x
68 2012-02-29 … 2017-02-28 40.15% 14.78% 1.221x
69 2012-03-30 … 2017-02-28 39.91% 14.43% 1.223x
70 2012-04-30 … 2017-04-28 39.10% 14.61% 1.214x
71 2012-05-31 … 2017-05-31 40.49% 15.98% 1.211x
72 2012-06-29 … 2017-05-31 41.04% 15.44% 1.222x
73 2012-07-31 … 2017-07-31 40.05% 15.43% 1.213x
74 2012-08-31 … 2017-08-31 39.31% 15.12% 1.210x
75 2012-09-28 … 2017-08-31 39.07% 14.77% 1.212x
76 2012-10-31 … 2017-10-31 37.58% 16.12% 1.185x
77 2012-11-30 … 2017-11-30 40.78% 16.79% 1.205x
78 2012-12-31 … 2017-12-29 39.68% 16.93% 1.195x
79 2013-01-31 … 2018-01-31 38.85% 17.57% 1.181x
80 2013-02-28 … 2018-02-28 42.63% 16.21% 1.227x
81 2013-03-28 … 2018-02-28 42.04% 15.81% 1.226x
82 2013-04-30 … 2018-04-30 38.89% 14.25% 1.216x
83 2013-05-31 … 2018-05-31 32.18% 14.57% 1.154x
84 2013-06-28 … 2018-05-31 32.91% 14.97% 1.156x
85 2013-07-31 … 2018-07-31 30.32% 14.83% 1.135x
86 2013-08-30 … 2018-07-31 30.94% 15.59% 1.133x
87 2013-09-30 … 2018-09-28 31.37% 15.84% 1.134x
88 2013-10-31 … 2018-10-31 25.84% 12.89% 1.115x
89 2013-11-29 … 2018-10-31 25.89% 12.60% 1.118x
90 2013-12-31 … 2018-12-31 21.77% 9.93% 1.108x
91 2014-01-31 … 2019-01-31 22.40% 12.37% 1.089x
92 2014-02-28 … 2019-02-28 21.67% 12.38% 1.083x
93 2014-03-31 … 2019-03-29 22.01% 12.76% 1.082x
94 2014-04-30 … 2019-04-30 23.92% 13.73% 1.090x
95 2014-05-30 … 2019-04-30 22.60% 13.54% 1.080x
96 2014-06-30 … 2019-06-28 22.10% 12.81% 1.082x
97 2014-07-31 … 2019-07-31 23.17% 13.30% 1.087x
98 2014-08-29 … 2019-07-31 22.36% 12.80% 1.085x
99 2014-09-30 … 2019-09-30 20.47% 12.70% 1.069x
100 2014-10-31 … 2019-10-31 20.54% 12.91% 1.068x
101 2014-11-28 … 2019-10-31 20.70% 12.60% 1.072x
102 2014-12-31 … 2019-12-31 23.32% 14.16% 1.080x
103 2015-01-30 … 2019-12-31 23.89% 14.85% 1.079x
104 2015-02-27 … 2020-01-31 23.59% 14.04% 1.084x
105 2015-03-31 … 2020-03-31 20.47% 8.56% 1.110x
106 2015-04-30 … 2020-04-30 26.58% 11.65% 1.134x
107 2015-05-29 … 2020-05-29 28.05% 12.61% 1.137x
108 2015-06-30 … 2020-06-30 27.78% 13.64% 1.124x
109 2015-07-31 … 2020-07-31 30.08% 14.60% 1.135x
110 2015-08-31 … 2020-08-31 34.80% 18.07% 1.142x
111 2015-09-30 … 2020-09-30 34.10% 17.05% 1.146x
112 2015-10-30 … 2020-10-30 31.25% 14.60% 1.145x
113 2015-11-30 … 2020-11-30 38.96% 17.43% 1.183x
114 2015-12-31 … 2020-12-31 40.71% 18.65% 1.186x
115 2016-01-29 … 2021-01-29 77.35% 19.26% 1.487x
116 2016-02-29 … 2021-02-26 80.92% 19.79% 1.510x
117 2016-03-31 … 2021-03-31 78.20% 19.42% 1.492x
118 2016-04-29 … 2021-03-31 80.99% 19.66% 1.513x
119 2016-05-31 … 2021-05-28 80.38% 20.42% 1.498x
120 2016-06-30 … 2021-06-30 78.46% 21.06% 1.474x
121 2016-07-29 … 2021-06-30 77.73% 20.63% 1.473x
122 2016-08-31 … 2021-08-31 74.29% 21.75% 1.432x
123 2016-09-30 … 2021-09-30 74.05% 20.22% 1.448x
124 2016-10-31 … 2021-10-29 78.85% 22.50% 1.460x
125 2016-11-30 … 2021-11-30 75.59% 21.87% 1.441x
126 2016-12-30 … 2021-11-30 79.17% 21.75% 1.472x
127 2017-01-31 … 2022-01-31 70.53% 20.17% 1.419x
128 2017-02-28 … 2022-02-28 67.35% 18.51% 1.412x
129 2017-03-31 … 2022-03-31 66.39% 19.46% 1.393x
130 2017-04-28 … 2022-03-31 68.35% 19.46% 1.409x
131 2017-05-31 … 2022-05-31 65.09% 15.59% 1.428x
132 2017-06-30 … 2022-06-30 62.42% 13.08% 1.436x
133 2017-07-31 … 2022-07-29 62.58% 15.16% 1.412x
134 2017-08-31 … 2022-08-31 62.44% 13.72% 1.428x
135 2017-09-29 … 2022-08-31 63.56% 13.56% 1.440x
136 2017-10-31 … 2022-10-31 63.56% 11.86% 1.462x
137 2017-11-30 … 2022-11-30 61.22% 12.52% 1.433x
138 2017-12-29 … 2022-11-30 62.16% 12.46% 1.442x
139 2018-01-31 … 2023-01-31 56.81% 11.01% 1.413x
140 2018-02-28 … 2023-02-28 53.34% 11.03% 1.381x
141 2018-03-29 … 2023-02-28 54.86% 11.72% 1.386x
142 2018-04-30 … 2023-04-28 52.50% 13.01% 1.349x
143 2018-05-31 … 2023-05-31 55.00% 12.95% 1.372x
144 2018-06-29 … 2023-05-31 56.46% 13.01% 1.384x
145 2018-07-31 … 2023-07-31 61.71% 14.67% 1.410x
146 2018-08-31 … 2023-08-31 56.85% 13.51% 1.382x
147 2018-09-28 … 2023-08-31 57.88% 13.56% 1.390x
148 2018-10-31 … 2023-10-31 55.85% 12.60% 1.384x
149 2018-11-30 … 2023-11-30 57.14% 14.58% 1.371x
150 2018-12-31 … 2023-12-29 64.02% 17.26% 1.399x
151 2019-01-31 … 2024-01-31 63.26% 16.27% 1.404x
152 2019-02-28 … 2024-01-31 61.81% 15.94% 1.396x
153 2019-03-29 … 2024-03-28 68.13% 17.50% 1.431x
154 2019-04-30 … 2024-04-30 64.19% 15.50% 1.422x
155 2019-05-31 … 2024-05-31 70.37% 18.12% 1.442x
156 2019-06-28 … 2024-06-28 68.36% 17.99% 1.427x
157 2019-07-31 … 2024-07-31 63.64% 17.70% 1.390x
158 2019-08-30 … 2024-08-30 62.85% 18.41% 1.375x
159 2019-09-30 … 2024-09-30 69.02% 18.65% 1.425x
160 2019-10-31 … 2024-10-31 69.16% 17.87% 1.435x
161 2019-11-29 … 2024-11-29 74.55% 18.64% 1.471x
162 2019-12-31 … 2024-12-31 68.93% 17.62% 1.436x
163 2020-01-31 … 2025-01-31 71.09% 18.07% 1.449x
164 2020-02-28 … 2025-02-28 67.30% 19.00% 1.406x
165 2020-03-31 … 2025-03-31 66.24% 19.24% 1.394x
166 2020-04-30 … 2025-04-30 63.29% 16.49% 1.402x
167 2020-05-29 … 2025-04-30 60.80% 15.80% 1.389x
168 2020-06-30 … 2025-06-30 61.51% 18.19% 1.367x
169 2020-07-31 … 2025-07-31 60.62% 17.87% 1.363x
170 2020-08-31 … 2025-08-29 60.69% 16.69% 1.377x
171 2020-09-30 … 2025-09-30 62.91% 18.57% 1.374x
172 2020-10-30 … 2025-09-30 64.95% 19.43% 1.381x
173 2020-11-30 … 2025-11-28 57.61% 17.77% 1.338x
174 2020-12-31 … 2025-12-31 56.39% 16.92% 1.338x
175 2021-01-29 … 2025-12-31 31.80% 17.20% 1.125x
176 2021-02-26 … 2026-01-30 33.64% 17.04% 1.142x
177 2021-03-31 … 2026-03-31 31.43% 14.07% 1.152x
178 2021-04-30 … 2026-04-30 37.76% 16.03% 1.187x
179 2021-05-28 … 2026-04-30 38.52% 16.22% 1.192x
Notes
mode=explore; family=regime-momentum-contrarian-52w-recovery-quality-hybrid New hybrid family that fuses the shallow-drawdown recovery sweet spot from contrarian-52w, the regime sleeve discipline from regime-momentum-quality-value, and the conflict arbitration concept from recovery-quality-regime-momentum-hybrid. The design is intentionally not a weighted average: bull regimes prefer repaired leaders that already re-accelerated, transition regimes explicitly arbitrate between momentum leadership and recovery depth using stock-level gates, and risk-off regimes keep only resilient recoveries with quality, valuation, and trading continuity support. Deliberate metric coverage this run: momentum uses 12_1, 6m, and 3m selectively; trend/recovery uses both 200d distance and 52-week-high distance in all branches; volatility is active in every branch; liquidity is active via trading_days_3m and avg_daily_dollar_volume_3m in transition/risk-off while avg_daily_volume_3m is zeroed; income keeps dividend_yield_ttm_pct only in risk-off and zeros dividend_ttm; valuation uses forward_pe and peg outside the bull sleeve while pe is zeroed; growth rotates to forward_eps plus free_cash_flow_growth_pct and operating_income_growth_pct while eps_growth_pct and revenue_growth_pct are zeroed; quality uses free_cash_flow_margin_pct and operating_margin_pct; size uses market_cap only in bull as a mild anti-megacap tilt; remaining raw-level fields are deliberately zeroed.
Lesson notes
#887 · degrade · relative_return Δ -0.1603 · parent exp_758 · Jul 21, 2026 · auto/explore; benchmark CAPW_UNIV
explore/regime-momentum-contrarian-52w-recovery-quality-hybrid: relative_return 1.2654x (delta -0.1603 vs exp_758); win-rate 100.0%, worst-window 1.067594, dispersion 18.7078%.
Monthly picks — top stocks selected each month (whole timeline)
timeline — 240 months · top 15 each
Month 123456789101112131415
2006-07-31 MNST EXPD GRMN TEX FTI DDS LVS STLD R NUE ATI MTW TMO CME ODFL
2006-08-31 ILMN NVDA DDS IVZ MTW ODFL FCX ADM DECK GRMN FIX APH REGN LVS PWR
2006-09-29 ILMN AAPL MU CRM WST COHR NVDA AAL REGN LVS TDY TRMB GRMN MTW GME
2006-10-31 ALGN AKAM COHR CRM ATI AAL VRTX CTSH AAPL TEX HUM EME CMI CSX NUE
2006-11-30 REGN ALGN ILMN AAL AKAM ICE AT KSS MAT BMET APCC CRM ALXN LRCX OMX
2006-12-29 MAY REGN MOS ILMN EQIX ALGN ATI DLR HOG VNO SWKS RL LVS CTRA MKTX
2007-01-31 MAY REGN AT BMET TEX MOS CSCO AAL WST GME TTWO LVLT FFIV HOLX ADS
2007-02-28 WYNN ON KMX CRM ICE ALGN UIS INCY COHR SPG DOC AKAM PSA TEX UAL
2007-03-30 MAY ON CF ICE ALGN WYNN MGM CRM MTCH REGN UIS SPG DE WY FDS
2007-04-30 CF MAY MOS GME SYK ALGN MKTX ICE ATI TTWO RL TPR INCY FDS MTCH
2007-05-31 ON TDG ETR INCY CCU ICE MAT TAP NVR AEP REGN CRM TTWO ALGN TRMB
2007-06-29 CLF AMZN DLX NRG ANDV ON ICE WBD CI OKE RRC CTRA TEX PENN NVDA
2007-07-31 KMG CF AXON BKNG MPWR MOS AMZN AAPL GME DJ EXPE CE MTW CLF WBD
2007-08-31 AXON KMG DECK ALGN FCX LKQ CF AMZN MA CE TDG FAST SWKS ANDW COP
2007-09-28 AXON WYNN VRTX UAA IDXX ALGN UAL FAST PENN MA AOS DJ TEX CIEN ICE
2007-10-31 MPWR EXPE GRMN AMZN FTI NVDA WYNN AXON NOV FLR BIIB LVS CLF MGM MUR
2007-11-30 WYNN FTI CF FCX FLR LVS AMZN NOV FMC GRMN IDXX EXPE CIEN GOOGL GOOG
2007-12-31 MCD ISRG VRSN GOOGL GOOG NEE FMC LKQ PH IDXX CF HPQ UNP NOV EXC
2008-01-31 FSLR MOS ESRX PRGO HUM OXY WDC VRSN CRL JEC MUR XRAY PEG RRC BRK-B
2008-02-29 WDC CF XOM HAL PRGO KO X FSLR MA J RRC MUR INCY FCX BKNG
2008-03-31 MOS CF MO OXY WDC KO BKNG YUM STLD EQT UNP EOG MCD TTWO NFLX
2008-04-30 MOS CF WDC DVN RRC NFLX APA STLD SLB TKO HP OI EOG PH NFX
2008-05-30 CF MOS APA OXY EOG DVN MPWR BBBY FSLR NFLX FTI RRC EQT CTRA FCX
2008-06-30 MOS MA WDC WMT CF OXY TTWO WWY UNP HP BBBY ROST EQT CSX R
2008-07-31 MEE X MOS HP BTUUQ NAV HAL EW CLF NBR VRTX OXY MA FMC NOV
2008-08-29 CF ESV HAS BTUUQ CLF WWY MEE QCOM ILMN HP MCD COHR NAV DNR FSLR
2008-09-30 WMT ROST SWN MCD WWY SRCL WYE WAB STJ RTN BCR HRS ESV SBNY CEPH
2008-10-31 WMT MRSH WWY MCD STE WFC ED ROH TSCO SWN CHD CLX TFC NSC BCR
2008-11-28 WMT GIS SHW WFC ROH TSCO SWN AMGN CLX CHD BBT TFC BRL WRB BCR
2008-12-31 SHW WMT AMGN BMY SO GILD KR ROH BRL WFC CHRW AJG VRTX ACGL HRB
2009-01-30 MCD BMY ORLY SJM GILD NFLX ROH ED AZO MNST LDOS EW SWN DGX PNW
2009-02-27 NFLX VTRS PCG VRTX MNST DLTR AZO ALK ORLY DRI NEM EW AAP LDOS TDG
2009-03-31 ROST MNST SNPS EW AAP ROH NEM TYL DRI TMUS BR BALL BIIB VTRS PCG
2009-04-30 NFLX ROST WDC VTRS BKNG SNPS DRI KSS BR YUM MRVL QCOM IBM V WBD
2009-05-29 WDC NFLX YUM AAPL DRI GPS TJX BKNG QCOM ORLY OXY MS EBAY MRVL WBD
2009-06-30 BKNG MPWR EXPE F NFLX MS ON GPS IDXX WDC AMZN DDS MSI NTAP DXCM
2009-07-31 ULTA MPWR DDS SW ON WHR IDXX STX SMCI CI MCHP EBAY MTG NWL MS
2009-08-31 CAR ISRG F LULU WHR BLDR ULTA GT MHK SPGI NWL CI COF RCL BEN
2009-09-30 FMCC FNMA MTG PALM GNW F ON LEN FITB GPS SSP NVDA WHR GT NFX
2009-10-30 SANM BC SSP BKNG GNW RCL INCY BX PALM HIG WBD STX EXPE FLEX AAPL
2009-11-30 LULU BC STX CRM JBL LVS FLEX CAR BBWI ULTA SANM BEN MAC KMX GNW
2009-12-31 KMG DDS AMZN CI NFLX FCX WBD EXPE LPX RCL CAT BEN SSP BKNG GNW
2010-01-29 BKNG AMD MU CRM KMG LULU BC STX MRVL WDC DDS SSP CAR MTW CLF
2010-02-26 AMD NYT LULU MU MTW ULTA CRM JBL UIS BC MRVL ATI M TER DDS
2010-03-31 F AAL SANM KMG DDR MTW REGN SSP LEN ISRG MAC PODD WSM DXCM AMD
2010-04-30 BBWI LULU NFLX MTG UAL CLF AAL DDS LPX BC KMG F EL SANM DECK
2010-05-28 BBWI BC MTG URI DPZ UAL ZION SSP PVH MBI VIAV LPX LEN F ASH
2010-06-30 WBD ZION NFLX AAPL NTAP SBUX UHS WLL ORLY UAL LVS WYNN MO TSCO LULU
2010-07-30 NFLX LULU AAPL KDP NEM BBWI TMUS SBUX AIG WBD NTAP NKE TSN HSY SWKS
2010-08-31 NTAP AAPL NFLX PEG MCHP UAL VNO TSCO ORLY TMUS CMCSA PRGO CTSH BBWI NKE
2010-09-30 CRM BBWI CCU AAL EXR MBI INTU NFLX CASY WYNN EQR DXCM AN AVB ALK
2010-10-29 CRM MBI AAPL TPL IPGP TMUS LULU QCOM ULTA CCU CMI DPZ DAL EW NEM
2010-11-30 BKNG NTAP RCL SPGI CF UAL INTU WYNN EBAY F MBI MCO EC AAL LVS
2010-12-31 LULU BKNG CMG NFLX UAA VRTS LVS CRM DECK FFIV MBI TPR MGM EBAY KMX
2011-01-31 LULU ETFC RCL WLL CIEN ANF CF DECK TMUS ACAS ON CMG BWA XEC FCX
2011-02-28 LULU MAY URI NVDA ETFC VIAV TEX NFLX VLO ANDV RCL ON ACAS DE WLL
2011-03-31 TER MAY KLAC VIAV CIEN NVDA SWKS TTWO CF BX ON QCOM ETFC TXN AVGO
2011-04-29 REGN VIAV URI UAA NFLX CMG HP CBRE VLO MAY IRM TER DECK VRTS ROK
2011-05-31 LULU BKNG REGN BBWI BIIB VRTX ANDV GT ECHO MOH JOY CHTR JEF RDC PRGO
2011-06-30 REGN MCO BBWI BKNG ANF CHTR DDS TMUS GT VRTX WYNN NFLX CF GME SLG
2011-07-29 REGN WYNN NFLX LULU COG CEPH BBWI EP WCG TSCO UAA ABMD ANF MCO MNST
2011-08-31 WYNN ISRG LULU SBUX BBWI UNH CMG NFLX CF BKNG MTCH SPGI BIIB MSFT ULTA
2011-09-30 AAPL V MA ORLY BBWI ISRG SPG INTC VFC CMG SPGI MTCH UNH SBUX LULU
2011-10-31 KLAC CF BBWI V AAPL MA MCD ORLY LULU UST MCO INTC MNST TGT GME
2011-11-30 KLAC BBWI MA AAPL ISRG V ORLY INTC MCO ULTA CSCO UAA MCD SBUX ORCL
2011-12-30 INTC V KLAC MA ISRG ORLY URI MCD BBWI SBUX VFC MO CSCO AEE WBD
2012-01-31 M JWN DPZ CF GWW MA FICO MHK EP MPWR OKE TIN ED LEN MBI
2012-02-29 REGN MOH TRGP WCG COG LYB MPWR GILD MCO KLAC ABMD GMCR AAL STX BLDR
2012-03-30 PHM MOH DHI DPZ ITT WCG UAA JBL STX COG BLDR BKNG CF ABMD GMCR
2012-04-30 AAPL SBUX CMG GILD QCOM BLDR ULTA FAST CCU KMI KLAC FTNT IVZ ITT UNH
2012-05-31 BKNG STX ORLY GPS LULU AAPL ISRG SBUX GILD EBAY HD WBD MPWR EC URI
2012-06-29 STX ROST GPS VRTX BKNG GILD REGN DAL AAPL ISRG MNST MPWR MA TPL DLTR
2012-07-31 AAL VRTX LEN DG STX PHM DHI BKNG CF BLDR LPX MNST AAPL WBD ALGN
2012-08-31 STX EXPE BLDR MO DG AAL WDC KLAC WOR VZ CMCSA ALGN DPZ UIS KBH
2012-09-28 STX PHM DHI VLO LEN LPX CHTR UAA LKQ STZ CDNS DDS KBH VRTX WOR
2012-10-31 TMUS ALL DHI ANDV EBAY AAL VLO LLY CF MPC DXCM GE VRTX SHW CHTR
2012-11-30 PHM URI GNRC KBH TMUS BLDR SPGI DHI LLY GPS REGN AXON IRM C DVA
2012-12-31 NFLX STX BBBY GNRC REGN KBH GME MTW LULU ALL LLY MS RCL WYNN DHI
2013-01-31 STX LPX RCL BAC REGN AXON PHM ANF AAL RMD F BBBY GM CCI IPGP
2013-02-28 PHM GS CI GNRC KBH DHI MS EXPE STX TEX BAC FLT LYB C CPRT
2013-03-28 VLO APO PHM TEX GS BC BX GNRC FNMA FMCC MS HAL C INCY NXPI
2013-04-30 FMCC FNMA GILD VRTX AMGN MPC MU HRB THC ANDV DXC VLO BMY MTW TMUS
2013-05-31 TSLA GME REGN NFLX PHM KBH KKR WYNN BX MPC VRTS ADBE APO HRL VRTX
2013-06-28 MCO NFLX REGN FSLR GILD ENPH APO BX BIIB MBI MS CAR CPAY VRTX AMAT
2013-07-31 MU WDC STX NFLX DXCM TYL VRTX FSLR SSP MBI BKNG CAR TKO BX MOH
2013-08-30 DAL BBBY MU SVU MTG CHTR LYV MCO GNW REGN SSP TRIP CSGP CBOE CIEN
2013-09-30 GME ENPH MTG BBBY TRIP CI EA APO LNC PKG ILMN WDC FL STX VRTX
2013-10-31 META TSLA NFLX NOW DXCM REGN GT BX FNMA FMCC MGM APO CIEN BSX ENPH
2013-11-29 META FNMA FL FMCC REGN BBY FANG NOW ALGN APO EPAM SW WEN UAA GME
2013-12-31 FNMA FMCC MU DAL META AAL FL BBY AXON MKTX ALK FSLR BIIB BKNG FIX
2014-01-31 FNMA FMCC BKNG STX DAL MA DECK MGM SMCI UAL GT TMUS TSLA V RRD
2014-02-28 STX SMCI MU UAL TKO INCY TPL KATE TMUS AXON PHM RRD CRM MA ENPH
2014-03-31 WYNN FMCC FNMA META ILMN BKNG MTCH PANW DXCM UAA MU TPL INCY AAL ADBE
2014-04-30 FNMA FMCC TSLA WYNN RCL PANW AAL MPWR META TPL VTRS CF EXPE MTCH EOG
2014-05-30 META PANW WYNN FMCC SMCI FNMA TSLA BKNG ILMN STX UAA GNW ADBE EXPE NFLX
2014-06-30 DAL META TRGP TSLA FMCC FNMA VTRS URI INCY ALK WYNN NCC PSX NOW BKNG
2014-07-31 URI MU FNMA TRGP FMCC ENPH HAL NFX AAL DAL RCL SLB FANG AMAT EOG
2014-08-29 MU HAL TRGP SMCI SLB FANG TWX DAL ISRG FSLR NBR ZBRA EOG COP CBRE
2014-09-30 ENPH URI TPL MPWR HPQ AMT ISRG STLD UHS NXPI XRX NFLX THC TRGP TSLA
2014-10-31 ENPH ISRG MPWR URI META NTAP NXPI DXCM UAA STLD MU THC WDAY TSLA FL
2014-11-28 ISRG GILD MMI NOW PODD FL HCA STLD SMCI AMGN BBY NTAP AAPL IDXX BBBY
2014-12-31 AMGN REGN AAPL LRCX ENPH ABBV GD INCY DXCM GHC ANDV AMT PODD LLY FL
2015-01-30 RCL FTNT DAL LEG ROST AAL IDXX UNH NCLH MPWR UAL AMGN BBY RMD EW
2015-02-27 RCL IDXX UAL LUV AXON ALK MAC MMI DXCM ENPH PCG WELL O ED SPG
2015-03-31 NOC LULU ON WHR NXPI AAPL REGN CTAS IDXX MPWR LUV UAL AVGO INCY BIIB
2015-04-30 KSS MAY PAYC NXPI NCLH CNC ON CI AVGO BBWI ROST INCY DRI MPWR UAA
2015-05-29 PAYC BLDR AXON SSP DRI NOC NOW LULU BBWI BMY EXPE FICO PRGO UAA YUM
2015-06-30 PAYC PANW FTNT ANET BX REGN AVGO HUM NXPI ADI BLDR ON MMI LULU KMG
2015-07-31 CI PANW BTUUQ ANET MTCH COTY IBKR CNC PAYC INCY LEG MPC HAS AVGO AET
2015-08-31 HAS ORLY SBUX META REGN EXPE DRI PANW HD V PSA MHK FTNT SYK VLO
2015-09-30 HAS V SO ORLY EXPE BKNG MA NFLX META PANW RCL SBUX SYK VLO TKO
2015-10-30 MO HAS VLO INTC ORLY SBUX ED PAYC META SO V INCY REGN HRL NKE
2015-11-30 EXPE MO KLAC BKNG ORLY REGN RCL META PGR AEE CDW PAYC FSLR PLD ACGL
2015-12-31 SBUX LUV ORLY VRSN MCD REGN META NKE MPWR MAS HD HRL SO GOOGL EXPE
2016-01-29 MCD NVDA HD ORLY MO TXN ADBE NKE HRL GE VLO GOOGL TSS MSFT META
2016-02-29 MCD META MO GOOGL ORLY VZ DAL NVDA MSFT HRL WMT TXN POOL TAP MAA
2016-03-31 MPWR EMR ETN WYNN FSLR ARG FIX LUV ATVI SMCI WHR HRL KLAC BKNG GDDY
2016-04-29 AMD CPB ANF FAST O EMR AEE AMAT MAT ETN WHR DG HRL LNT AVGO
2016-05-31 NEM MTW CLF EW CHTR FAST TSN O MCD BAX CPB LULU MAT ABBV WYNN
2016-06-30 AMD MTW ALB PAYC DXC STJ QLGC SANM STLD EW J AMCR NDSN DNR AXON
2016-07-29 OKE DXC DLR CCI CZR MTW SYK NUE SWN DNR MBI SANM TPL AMAT HAL
2016-08-31 CLF NEM ULTA GRMN LULU DXC WOR IRM VTR OKE AXON DLR CNX ALB O
2016-09-30 AMD URI CLF CTAS NEM DHR PODD GRMN DVN PAYC WYNN MU MSCI AMGN NOW
2016-10-31 ETSY IDXX WB LITE TPL HPQ LRCX CTAS CHTR AOS STX AMD NBR GNW AMZN
2016-11-30 CLF WOR MTCH LITE FCX WB ETSY GRMN SPGI JOY DHR ADSK MLM GPS ON
2016-12-30 BBY CLF FL FMCC FNMA KSS NVDA FCX AMD STLD DPZ DRI COHR UIS MU
2017-01-31 AMD UAL BBY GS NBR FMCC ANET UIS CLF FL NVDA STLD KMG FNMA MBI
2017-02-28 ON CLF NVDA COHR MU LITE NRG ARES MTG TPL KMG VIAV TRGP TSLA BBY
2017-03-31 URI INCY STX LUV COHR CSX BAC HII GS UNM NVDA MS JPM DXC MRVL
2017-04-28 KLAC AMD URI NTAP ON VIAV SSP INCY STX ADI NVDA BAC JEF AMP MS
2017-05-31 WB SEDG XRX GEN STX INCY LRCX BKNG PAYC KLAC NTAP AMD TER BLDR ADBE
2017-06-30 LRCX PAYC ANET AMAT REGN IDXX WB BBY FL NVDA MAR CDNS TTWO ADSK VEEV
2017-07-31 ANET AMAT LRCX VRTX REGN FL LITE MAR HAS ETSY WYNN MTD PENN MU TSLA
2017-08-31 SEDG REGN NFLX FCX TSLA NYT FSLR EXPE LITE BKNG MPWR MAR BBY KBH URI
2017-09-29 VRTX WB KMG ETSY AMT RCL PODD FSLR KSS SBAC BBY CHTR AAPL TSLA ADBE
2017-10-31 ENPH ABBV WB GM VRTX ETSY PODD AON FMCC SPGI NRG VST FNMA LITE BMY
2017-11-30 SEDG LRCX MU ON BBBY XYZ AMAT MPWR ENPH IPGP TER NVDA ANET COHR TTWO
2017-12-29 ENPH SEDG NTAP XYZ BBBY MU ANF PYPL ALGN CDNS IPGP TER LRCX ADBE ETSY
2018-01-31 ENPH ANF SEDG BBBY KSS WYNN TXN BBY ABBV ETSY GPS BLK DHI FSLR FL
2018-02-28 ANET BBBY WYNN ANF URI TXN EC NTAP CAT ON BBY MAY FL DG DE
2018-03-29 ANET MU SEDG ON BA XYZ ENPH PAYC ADBE NFLX WYNN NOW NKTR URI NTAP
2018-04-30 MU SEDG MPC WYNN ANET NKTR STX TGT XYZ BA EL NOW ISRG KSS NOC
2018-05-31 SEDG ANF MU PAYC STX MTCH ENPH NTAP NKTR ON EC TWTR SW ABMD ANET
2018-06-29 VLO SEDG FTNT ADBE MU KSS M ENPH NOW JWN ANF PSX THC NFLX MPWR
2018-07-31 ENPH TTD SEDG ETSY FTNT NTAP INTU MU LULU DPZ ADBE NFLX MA CRM ISRG
2018-08-31 M CMG JWN ENPH NFLX KKR AXON KDP REGN THC CLF WBD TRIP UAA MRO
2018-09-28 CVNA DRI CMG AMD CTAS PAYC AXON EHC WDAY KSS M MPC VLO LUMN NFLX
2018-10-31 TTD ORLY LULU PAYC XYZ PFE AAPL UAL VZ ETSY MTCH TGT FTNT MOH ABMD
2018-11-30 VZ TTD CMCSA PAYC WBD LULU DG ULTA KDP ORLY SBUX LW VRTX PFE V
2018-12-31 VZ SBUX MCD PFE HRL AMT MKC TTD SPG KO UAL KDP PAYC CMCSA TMO
2019-01-31 PAYC TTD LULU VZ MTCH SBUX MCD AMD PFE HRL PG MRK MA REGN SCG
2019-02-28 FTNT FNMA FMCC MTCH CLF AMD LULU HRL ORLY XYZ ELV PFE WCG ROST ETSY
2019-03-29 ETSY TTD SSP FNMA FMCC CIEN CVNA RHT FTNT CPRT EBAY BA AMD MTCH LRCX
2019-04-30 ETSY AMD INTU KEYS SMCI ZBRA FNMA FMCC ORLY ALGN META ANET CMG AES ON
2019-05-31 CDNS SNPS MTCH TTD LULU DIS TER META MCO CMCSA SBUX MA PYPL ORLY QCOM
2019-06-28 MTCH TTD QCOM AMD CVNA MKTX FDS VEEV ARES AMT WDAY LHX FMCC FNMA NOW
2019-07-31 ERIE TTD MKTX NOW AMD DG SBUX VEEV ETSY PYPL LIN XRAY ADI CF EL
2019-08-30 ENPH MTCH TTD SEDG TER HAS CDNS AZO AMAT QCOM MRVL ERIE DIS TMO NOW
2019-09-30 ENPH MTCH SEDG SPGI SBUX SNPS BX CCI AMT MCO SBAC COST MKTX HAS BALL
2019-10-31 SEDG NWL PODD NOC FNMA MKTX TGT PHM MTCH SNPS LMT FMCC CCI NVR WHR
2019-11-29 KLAC TER LRCX AMAT LEG SEDG QCOM ENPH AMD KBH TTD DG T MU REGN
2019-12-31 ENPH MTCH LEG PAYC TTD CVNA XRX PHM QCOM MRNA REGN MKTX PODD PSX DHI
2020-01-31 TER SEDG BMY THC ENPH SWKS AMD TGT MRNA KLAC QRVO NXPI CDAY AMAT ANSS
2020-02-28 MSFT MCO LRCX VRTX NEE TSLA ENPH SPGI AAPL FTNT TER PAYC INTC BMY CHTR
2020-03-31 MSFT NEM ENPH GILD TSLA ABBV TMUS NVDA VRTX AAPL NOW ADBE NEE GEN CCI
2020-04-30 REGN VRTX NEM ENPH SEDG SPGI LLY TGT CHTR WMT ABBV TMUS AAPL NVDA MSFT
2020-05-29 NEM GILD ENPH LLY GOOGL REGN INTC NFLX QCOM MCO VRTX MSFT ANET DXCM TER
2020-06-30 ENPH NEM SEDG META EBAY TMUS MSFT LEN SPGI PAYC INTC GOOGL REGN V TGT
2020-07-31 EBAY MRNA ENPH TSLA ABBV VRTX NFLX URI DPZ ADBE FTNT PENN AMGN MKTX MTCH
2020-08-31 ETSY EBAY MPWR BBBY TER BBY MRNA KLAC FL LRCX DHI MTCH LEN REGN RRC
2020-09-30 ETSY AAPL CDNS CRM META MRNA LULU CMG URI TSLA FL EBAY ADBE TSCO AMD
2020-10-30 ENPH GME SEDG ETSY CRWD PENN TTD TSLA URI CRM LOW BBY WHR CVNA PBI
2020-11-30 MPWR SEDG GPS DDOG TMO DHR PENN POOL GNRC CDNS PBI VRTS URI WOR UAA
2020-12-31 ETSY TTD GME LRCX BBWI CRWD URI MRNA ANF GPS GM XYZ PENN PBI CVNA
2021-01-29 ENPH TTD TER ETSY KLAC LRCX PBI FCX BBWI SEDG AMAT CLF URI ON MPWR
2021-02-26 ENPH CRWD MRNA PBI DDS TUP ETSY KLAC TER CLF FCX AXON TSLA SEDG COHR
2021-03-31 M JWN MRO ETSY MRNA OXY NBR DVN FCX ANF SPG APA GPS FANG TRIP
2021-04-30 AMAT VIAC ANF KSS DISCA DISCK MRO M TRIP LRCX JWN TPL KLAC DVN SSP
2021-05-28 GME MHK M JWN GPS TPL STX MAC LPX DDS KSS TDC PHM CLF MTW
2021-06-30 MRO STX FCX BBBY JWN M MAC NUE CAR NBR F GPS LPX GME SLB
2021-07-30 MRO DVN ANF F TRGP MUR RRC SPG MHK FCX GNRC URI NUE STX BBT
2021-08-31 MRNA GME MRO DDS JWN M TGT CLF MAC RRC NUE DVN TRGP STLD MBI
2021-09-30 MRNA BX JWN M INTU XEC MPWR BBWI GOOGL SIVB EXR FTNT NUE DHR NAVI
2021-10-29 MRNA JWN M RRC OXY APA CF MAC NTAP SIVB NUE MUR SLB ASO DRE
2021-11-30 JWN M DDS SPG CAR RRC MRNA MRO KKR APA DDOG ETSY COP INTU CF
2021-12-31 JWN M AMD DDS SPG TSLA DDOG INTU KKR BX APA TTD NVDA BBWI CAR
2022-01-31 ON PFE PLD SPG AVGO NVDA STX HPQ EXR ORLY QCOM LOW F ANET UNH
2022-02-28 ON QCOM CVS UNH VRTX WFC WY PG SLB AVGO ORLY MCD HPQ WBA REGN
2022-03-31 MOS MRO CF SLB LMT NOC TSLA ON ABBV COP OXY PFE FCX REGN XOM
2022-04-29 ABBV MOS REGN CF VRTX MRO FCX LMT CVX NOC PLD UNH OXY SLB MCK
2022-05-31 MOS REGN CF ABBV VRTX PFE LMT SRE UNH WY ON MRO GD TRGP NUE
2022-06-30 MRO ABBV XOM LMT CF MPC EOG PFE VLO ED OXY CPB UNH AMGN VRTX
2022-07-29 MRO ON CF XOM ABBV MPC MOS OXY PFE ORLY CVX LMT VLO UPS EOG
2022-08-31 VRTX CF ON ORLY MPC MRO SNPS MOS UNH XOM CDNS VICI UPS ENPH DG
2022-09-30 VRTX MRO MPC ON GIS CF ORLY K ENPH XOM OXY REGN MCK CDNS CI
2022-10-31 CF VRTX ORLY ON ABBV GIS MRO AMGN VLO SLB REGN DE K TE MOS
2022-11-30 ABBV SLB CF COP UNM APA H MUR NOV HRB HAL ISRG DDS SCHW NUE
2022-12-30 MPC APA HAL TPL SMCI SANM COP ENPH AXON STLD SPG PSX EOG KLAC FSLR
2023-01-31 MPC GILD FCX BKNG ODP MRNA ABMD SMCI SANM CLF VLO BBWI ORLY ANF ETSY
2023-02-28 UCL LEN PHM DHI CAT SLB MPC DYN ON ROST GILD HES CLF ADI MCHP
2023-03-31 URI UCL TEX PH ON MTW STLD H FTI ANF KLAC ATI UAL GILD VLO
2023-04-28 MPWR ADI MTW AMD ANET COTY SMCI KLAC ON TTD AXON FSLR UCL MCHP URI
2023-05-31 PHM BKNG SYK VRTX LEN ORLY ORCL GIS DHI WST TTD YUM NVDA LIN V
2023-06-30 PLTR ORCL COIN MRVL URI AMD SNPS CRM ABNB H DDOG GOOGL AMZN CRWD GT
2023-07-31 NFLX ORCL ISRG AMD MSFT COIN HUBB AN MTW TEX UAL VNT LEN CPRT CMG
2023-08-31 CCL PLTR GP COIN TTD SMCI RCL META LEN BBBY ON DHI NFLX DAL ABNB
2023-09-29 SLB MAR PLTR HAL SMCI LRCX PH AVGO ADBE NVDA META CAT CVNA PHM GOOGL
2023-10-31 CSCO MSFT SNPS AVGO HAL ETN SLB META NVDA MAR NFLX LRCX ADBE PH PSX
2023-11-30 FNMA PLTR FMCC SMCI AVGO MPWR CCL FTI META JBL MPC APP ACGL ABNB STLD
2023-12-29 ANF ADBE COIN CVNA PANW SNPS PLTR FNMA FMCC DECK VNO CEG SLG APP KSS
2024-01-31 COIN GPS KLAC AVGO DHI FMCC FNMA LULU AMD X SPG STX FICO MPWR WSM
2024-02-29 NOW SMCI FNMA FMCC PANW BKNG GPS CVNA VRTX DHI MAC EXPE LULU MPWR BBBY
2024-03-28 ANF META PLTR FNMA FMCC SMCI AVGO ADCT AMD MPWR UBER COIN ANET DELL NOW
2024-04-30 ANF GPS COIN PLTR HOOD SMCI META NVDA FNMA FMCC URI ADCT LRCX MPWR CAT
2024-05-31 ANF DELL CVNA COIN FNMA FMCC URI META CEG DYN VRT MPC CAT SMCI VST
2024-06-28 ANF QCOM NVDA AVGO DELL VST CMG FSLR VRT CEG MU GE PANW FMCC ETN
2024-07-31 ANF NVDA KLAC NTAP AVGO HOOD TER GPS COIN VST QCOM AMAT ANET COHR PLTR
2024-08-30 NVDA LUMN AVGO KLAC NTAP CVNA LU ANF HOOD VST TER GLW CEG ATI BKNG
2024-09-30 NVDA AVGO UHS TRGP TPL GDDY DYN NTAP FSLR KLAC VRT PANW MO AMT MCO
2024-10-31 PLTR NVDA HOOD CEG LUMN IBM COHR VST ORCL UIS MMM ECHO ANET AVGO LU
2024-11-29 LUMN FMCC FNMA NVDA TPL VNO COHR CEG VRT GILD ECHO GM ANET GME COIN
2024-12-31 GME TPL RCL APP BKNG CVNA HOOD MRVL PLTR TTD VST TSLA TMUS TRGP AXON
2025-01-31 TSLA FNMA MRVL AVGO FMCC CEG TPL BKNG EXPE VST COIN NOW LITE ANET CIEN
2025-02-28 PLTR HOOD META AVGO NFLX APP FMCC UAL FNMA LU RCL CRWD BKNG CIEN IBKR
2025-03-31 PLTR NFLX ABT TMUS HOOD FTNT V RCL MO PAYC TPR TPL META WFC T
2025-04-30 TMUS YUM GILD ABT MO FTNT T UBER PAYC RCL WMT V TPR GME NEM
2025-05-30 GILD UBER RCL TSLA NEM ORLY CHTR META MO NFLX APP TMUS WMT AMT TKO
2025-06-30 PLTR EBAY FNMA PAYC CEG CF APP FTNT VRT IBKR ADCT COIN WBD CAR FFIV
2025-07-31 RCL FNMA BKNG CAR HOOD FMCC UBER NFLX COIN CNXT IDXX KLAC CRWD APP ATI
2025-08-29 PLTR COIN CAR HOOD SSP EBAY UCL LRCX ORCL AMD CDNS SNPS CNXT MSFT DG
2025-09-30 AVGO TE FNMA RCL FMCC EXPE ORCL EBAY UAL IDXX SEDG COIN ECHO CCL CAR
2025-10-31 NEM TE FMCC MPWR IDXX SEDG FNMA MRVL ETSY APP ECHO WYNN ORCL PSKY MBI
2025-11-28 MPWR LRCX AMD LUMN HOOD SEDG TE STX MU NEM PLTR WDC DDOG MRVL EXPE
2025-12-31 WDC KSS AMD STX LUMN AVGO KLAC IDXX SSP CAT MPWR M AMAT NEM INTC
2026-01-30 KLAC WDC NEM EXPE LRCX STX KSS SSP WBD AMAT REGN M ECHO TE ALB
2026-02-27 KLAC LRCX TE WDC MPWR STX TER AMAT MU WBD SSP GOOGL LUV ECHO IPGP
2026-03-31 MU WDC STX LRCX NEM GILD TER GOOGL ADI KLAC RTX PH LMT AMAT KO
2026-04-30 TER KLAC CF LRCX APA SEDG AMAT OXY NEM MRNA IPGP XOM COHR WBD CVX
2026-05-29 APA CF TER LITE MPWR OXY ON HAL NBR MCHP VRT INTC VIAV CAT NVDA
2026-06-26 WDC ON STX KLAC ENPH NTAP LRCX DDOG MRVL MU TER ADI MPWR AMAT SEDG
Scoring script (python)
FORMULA_NAME = "Regime Momentum Contrarian 52W Recovery Quality Hybrid (Arbitrated, v1187)"
LOGIC_VARIANT_COUNT = 3
NOTES = """mode=explore; family=regime-momentum-contrarian-52w-recovery-quality-hybrid
New hybrid family that fuses the shallow-drawdown recovery sweet spot from contrarian-52w, the regime sleeve discipline from regime-momentum-quality-value, and the conflict arbitration concept from recovery-quality-regime-momentum-hybrid. The design is intentionally not a weighted average: bull regimes prefer repaired leaders that already re-accelerated, transition regimes explicitly arbitrate between momentum leadership and recovery depth using stock-level gates, and risk-off regimes keep only resilient recoveries with quality, valuation, and trading continuity support.
Deliberate metric coverage this run: momentum uses 12_1, 6m, and 3m selectively; trend/recovery uses both 200d distance and 52-week-high distance in all branches; volatility is active in every branch; liquidity is active via trading_days_3m and avg_daily_dollar_volume_3m in transition/risk-off while avg_daily_volume_3m is zeroed; income keeps dividend_yield_ttm_pct only in risk-off and zeros dividend_ttm; valuation uses forward_pe and peg outside the bull sleeve while pe is zeroed; growth rotates to forward_eps plus free_cash_flow_growth_pct and operating_income_growth_pct while eps_growth_pct and revenue_growth_pct are zeroed; quality uses free_cash_flow_margin_pct and operating_margin_pct; size uses market_cap only in bull as a mild anti-megacap tilt; remaining raw-level fields are deliberately zeroed."""

BULL = {
    "from_52w_high_pct": (0.24, -1),
    "from_200d_ma_pct": (0.18, +1),
    "momentum_12_1_pct": (0.17, +1),
    "return_6m_pct": (0.13, +1),
    "return_3m_pct": (0.09, +1),
    "realized_vol_3m": (0.07, -1),
    "free_cash_flow_margin_pct": (0.07, +1),
    "forward_eps": (0.05, +1),
    "market_cap": (0.05, -1),
}

TRANSITION = {
    "from_52w_high_pct": (0.16, -1),
    "from_200d_ma_pct": (0.16, +1),
    "momentum_12_1_pct": (0.12, +1),
    "return_6m_pct": (0.10, +1),
    "return_3m_pct": (0.08, +1),
    "realized_vol_3m": (0.10, -1),
    "trading_days_3m": (0.06, +1),
    "avg_daily_dollar_volume_3m": (0.05, +1),
    "operating_margin_pct": (0.07, +1),
    "free_cash_flow_growth_pct": (0.05, +1),
    "forward_pe": (0.05, -1),
}

RISK_OFF = {
    "from_52w_high_pct": (0.10, -1),
    "from_200d_ma_pct": (0.18, +1),
    "realized_vol_3m": (0.16, -1),
    "operating_margin_pct": (0.13, +1),
    "free_cash_flow_margin_pct": (0.09, +1),
    "operating_income_growth_pct": (0.07, +1),
    "trading_days_3m": (0.07, +1),
    "avg_daily_dollar_volume_3m": (0.05, +1),
    "peg": (0.07, -1),
    "forward_pe": (0.04, -1),
    "dividend_yield_ttm_pct": (0.04, +1),
}

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

    def _num(x):
        try:
            if x is None:
                return None
            v = float(x)
            if v != v:
                return None
            return v
        except Exception:
            return None

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

    def _regime_name(r):
        for key in (
            "regime", "name", "label", "state", "market_regime", "trend_regime",
            "primary", "phase"
        ):
            val = _get(r, key, None)
            if val is not None:
                s = str(val).strip().lower()
                if s:
                    return s
        return ""

    def _is_true(r, key):
        val = _get(r, key, None)
        if isinstance(val, bool):
            return val
        if isinstance(val, (int, float)):
            return val > 0
        if isinstance(val, str):
            return val.strip().lower() in ("1", "true", "yes", "on", "bull", "risk_on")
        return False

    def _pick_branch(r):
        name = _regime_name(r)
        if (
            "risk" in name or "bear" in name or "defensive" in name or
            "off" in name or "down" in name or _is_true(r, "risk_off") or
            _is_true(r, "is_risk_off") or _is_true(r, "bear")
        ):
            return "risk_off"
        if (
            "bull" in name or "up" in name or "on" in name or "strong" in name or
            _is_true(r, "bull") or _is_true(r, "is_bull") or _is_true(r, "risk_on")
        ):
            return "bull"
        return "transition"

    def _rank_scores(spec):
        scores = {}
        for symbol in symbols:
            scores[symbol] = 0.0

        for metric, (weight, direction) in spec.items():
            vals = []
            for symbol, stock in items:
                v = _num(_get(stock, metric, None))
                if v is not None:
                    vals.append((symbol, v))
            n = len(vals)
            if n == 0:
                continue
            vals.sort(key=lambda x: x[1])
            if n == 1:
                symbol = vals[0][0]
                scores[symbol] += weight * 0.5
                continue
            for idx, (symbol, _) in enumerate(vals):
                pct = idx / (n - 1)
                if direction < 0:
                    pct = 1.0 - pct
                scores[symbol] += weight * pct
        return scores

    def _recovery_profile(stock):
        d52 = _num(_get(stock, "from_52w_high_pct", None))
        d200 = _num(_get(stock, "from_200d_ma_pct", None))
        vol = _num(_get(stock, "realized_vol_3m", None))
        qual = _num(_get(stock, "free_cash_flow_margin_pct", None))
        if d52 is None or d200 is None:
            return 0.0

        score = 0.0

        # Prefer stocks meaningfully off highs, but not total breakdowns.
        if d52 <= -8.0 and d52 >= -32.0:
            score += 1.0
        elif d52 <= -5.0 and d52 > -8.0:
            score += 0.65
        elif d52 < -32.0 and d52 >= -45.0:
            score += 0.45
        elif d52 > -5.0:
            score -= 0.35
        else:
            score -= 0.15

        # Recovery must already be repaired above/near long trend.
        if d200 >= 12.0:
            score += 0.95
        elif d200 >= 4.0:
            score += 0.65
        elif d200 >= -2.0:
            score += 0.25
        else:
            score -= 0.75

        if vol is not None:
            if vol <= 28.0:
                score += 0.25
            elif vol >= 45.0:
                score -= 0.30

        if qual is not None:
            if qual >= 8.0:
                score += 0.20
            elif qual < 0.0:
                score -= 0.20

        return score

    def _momentum_profile(stock):
        m12 = _num(_get(stock, "momentum_12_1_pct", None))
        r6 = _num(_get(stock, "return_6m_pct", None))
        r3 = _num(_get(stock, "return_3m_pct", None))
        d200 = _num(_get(stock, "from_200d_ma_pct", None))
        vol = _num(_get(stock, "realized_vol_3m", None))

        score = 0.0
        seen = 0.0

        if m12 is not None:
            seen += 1.0
            if m12 >= 12.0:
                score += 1.0
            elif m12 >= 4.0:
                score += 0.6
            elif m12 < -8.0:
                score -= 0.8

        if r6 is not None:
            seen += 1.0
            if r6 >= 10.0:
                score += 0.85
            elif r6 >= 3.0:
                score += 0.45
            elif r6 < -10.0:
                score -= 0.75

        if r3 is not None:
            seen += 1.0
            if r3 >= 4.0:
                score += 0.55
            elif r3 < -6.0:
                score -= 0.55

        if d200 is not None:
            seen += 1.0
            if d200 >= 8.0:
                score += 0.55
            elif d200 < -4.0:
                score -= 0.55

        if vol is not None:
            seen += 1.0
            if vol >= 42.0:
                score -= 0.35
            elif vol <= 24.0:
                score += 0.10

        if seen == 0.0:
            return 0.0
        return score / seen

    def _defensive_profile(stock):
        vol = _num(_get(stock, "realized_vol_3m", None))
        opm = _num(_get(stock, "operating_margin_pct", None))
        fcfm = _num(_get(stock, "free_cash_flow_margin_pct", None))
        peg = _num(_get(stock, "peg", None))
        fpe = _num(_get(stock, "forward_pe", None))
        liq = _num(_get(stock, "trading_days_3m", None))
        ddv = _num(_get(stock, "avg_daily_dollar_volume_3m", None))
        dy = _num(_get(stock, "dividend_yield_ttm_pct", None))
        d200 = _num(_get(stock, "from_200d_ma_pct", None))

        score = 0.0
        seen = 0.0

        if vol is not None:
            seen += 1.0
            if vol <= 24.0:
                score += 1.0
            elif vol <= 32.0:
                score += 0.55
            elif vol >= 42.0:
                score -= 0.85

        if opm is not None:
            seen += 1.0
            if opm >= 12.0:
                score += 0.8
            elif opm < 0.0:
                score -= 0.7

        if fcfm is not None:
            seen += 1.0
            if fcfm >= 6.0:
                score += 0.7
            elif fcfm < 0.0:
                score -= 0.6

        if peg is not None:
            seen += 1.0
            if peg <= 1.8:
                score += 0.45
            elif peg >= 3.5:
                score -= 0.45
        elif fpe is not None:
            seen += 1.0
            if fpe <= 22.0:
                score += 0.30
            elif fpe >= 38.0:
                score -= 0.30

        if liq is not None:
            seen += 1.0
            if liq >= 58.0:
                score += 0.25
            elif liq < 45.0:
                score -= 0.25

        if ddv is not None:
            seen += 1.0
            if ddv > 0.0:
                score += 0.15

        if dy is not None:
            seen += 1.0
            if dy >= 0.8:
                score += 0.15

        if d200 is not None:
            seen += 1.0
            if d200 >= 0.0:
                score += 0.25
            elif d200 < -6.0:
                score -= 0.35

        if seen == 0.0:
            return 0.0
        return score / seen

    branch = _pick_branch(regime)
    if branch == "bull":
        spec = BULL
    elif branch == "risk_off":
        spec = RISK_OFF
    else:
        spec = TRANSITION

    if isinstance(stocks, dict):
        items = list(stocks.items())
    else:
        items = []
        for stock in stocks:
            symbol = _get(stock, "symbol", None)
            if symbol is not None:
                items.append((symbol, stock))

    symbols = [symbol for symbol, _ in items]
    base_scores = _rank_scores(spec)
    final_scores = {}

    for symbol, stock in items:
        base = base_scores.get(symbol, 0.0)
        recovery = _recovery_profile(stock)
        momentum = _momentum_profile(stock)
        defensive = _defensive_profile(stock)
        d52 = _num(_get(stock, "from_52w_high_pct", None))
        d200 = _num(_get(stock, "from_200d_ma_pct", None))

        score = base

        if branch == "bull":
            # In bull tapes, prefer repaired recoveries that have already graduated into momentum.
            if recovery > 0.45 and momentum > 0.18:
                score += 0.22 * _clamp(recovery, -1.5, 1.5)
                score += 0.18 * _clamp(momentum, -1.5, 1.5)
            elif recovery > 0.55 and momentum <= 0.0:
                score += 0.08 * _clamp(recovery, -1.5, 1.5)
                score -= 0.10
            elif momentum > 0.35 and recovery <= 0.0:
                score += 0.12 * _clamp(momentum, -1.5, 1.5)
                score -= 0.06

            if d52 is not None and d52 > -4.0:
                score -= 0.08
            if d52 is not None and d52 < -38.0:
                score -= 0.10

        elif branch == "transition":
            # Explicit conflict arbitration: choose the sleeve based on whether recovery is repaired.
            if recovery >= 0.55 and momentum >= 0.05:
                score += 0.18 * _clamp(recovery, -1.5, 1.5)
                score += 0.10 * _clamp(momentum, -1.5, 1.5)
            elif momentum >= 0.35 and recovery < 0.25:
                score += 0.16 * _clamp(momentum, -1.5, 1.5)
                score -= 0.05
            elif recovery >= 0.35 and momentum < -0.05:
                score += 0.12 * _clamp(recovery, -1.5, 1.5)
                score -= 0.08
            else:
                score += 0.08 * _clamp(recovery, -1.5, 1.5)
                score += 0.08 * _clamp(momentum, -1.5, 1.5)

            score += 0.10 * _clamp(defensive, -1.5, 1.5)

            if d200 is not None and d200 < -5.0:
                score -= 0.10

        else:
            # In risk-off, only keep recoveries that are already durable and fundamentally supported.
            if recovery > 0.25 and defensive > 0.20:
                score += 0.10 * _clamp(recovery, -1.5, 1.5)
                score += 0.22 * _clamp(defensive, -1.5, 1.5)
            else:
                score += 0.28 * _clamp(defensive, -1.5, 1.5)
                if recovery < -0.10:
                    score -= 0.06

            if momentum < -0.20:
                score -= 0.06
            if d200 is not None and d200 < -8.0:
                score -= 0.10

        final_scores[symbol] = score

    return final_scores