Back to campaign

SP-500 seasonal trends: recorded proxy strategies

Shared research analysis

Iteration 1 · 4 candidates · 8427 evaluated observations

Exploratory diagnostics. Locked holdout observations are excluded. Missing statistics remain unavailable; this report does not grant official admission.

Candidate metrics

Max drawdown is negative; expected shortfall is positive loss. Download the complete metrics table for dates, sample counts and decimal values.

Candidate CAGR Sharpe Sortino Max drawdown 95% expected shortfall
expanding month · lag 1 6.88% 0.43 0.60 -70.03% 3.28%
documented like four cycle · lag 1 7.00% 0.46 0.63 -71.53% 3.08%
lag and overlay · lag 2 6.35% 0.48 0.68 -52.64% 2.43%
short cycle · lag 1 3.56% 0.27 0.38 -75.79% 3.63%

Compare recorded paths

The first chart point represents initial capital before the first return. It is excluded from numerical metrics.

Analysis modules

Performance — ok

See the candidate comparison above. These metrics use the same recorded returns as the downloads.

Uncertainty — ok

Block count is a dependence proxy, not a count of independent crises; HAC alpha p-values are unadjusted.

candidate status observations block size block count proxy mean excess return per period mean excess ci95 factor alpha per period factor alpha hac pvalue benchmark beta
recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 ok 8427 20 421.35 -0.000131227 [-0.0002972062482660918, 3.491276054503254e-05] -4.2313e-05 0.652725 0.812655
recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 ok 8427 20 421.35 -0.000135988 [-0.0003004639986684744, 2.1359152506980602e-05] -2.68425e-05 0.75216 0.770028
recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 ok 8427 20 421.35 -0.000184717 [-0.0003040278467708018, -6.364202471576285e-05] -2.57923e-05 0.676837 0.665143
recessionalert-sp500-seasonal-short_cycle-lb12-lag1 ok 8427 20 421.35 -0.000220419 [-0.0004932359948421341, 5.680559202681005e-05] 4.90142e-05 0.745414 0.432298
Family — not estimable

Tests mean net return superiority within each family; does not test Sharpe or correct across families.

family status observations limitation
documented_like_four_cycle not_estimable None full successful family search returns and explicit search_complete=true required
expanding_month not_estimable None full successful family search returns and explicit search_complete=true required
lag_and_overlay not_estimable None full successful family search returns and explicit search_complete=true required
short_cycle not_estimable None full successful family search returns and explicit search_complete=true required
Walk Forward — ok

Selects among supplied fixed causal return streams. Does not refit the underlying strategies. Retrospectively designed candidate universes remain exploratory.

highest training Sharpe; ties resolved by candidate ID

path status observations start end total return cagr sharpe sortino volatility max drawdown expected shortfall 95 expected shortfall reason
selected ok 7812 1995-02-28 2026-03-13 2.96286 0.0454196 0.32018 0.443566 0.203849 -0.750211 0.033047 None
benchmark ok 7812 1995-02-28 2026-03-13 22.4633 0.107149 0.629721 0.895409 0.190501 -0.551894 0.0285153 None
fold selected train start train end test start test end cagr sharpe max drawdown
0 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 1993-02-01 1995-01-27 1995-02-28 1995-08-25 0.274135 2.9386 -0.0264466
1 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 1993-08-02 1995-07-28 1995-08-28 1996-02-26 0.360804 2.12236 -0.0743598
2 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 1994-01-28 1996-01-26 1996-02-27 1996-08-23 0.0315068 0.286468 -0.092148
3 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 1994-08-01 1996-07-26 1996-08-26 1997-02-24 0.431955 2.03635 -0.0581523
4 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 1995-01-30 1997-01-24 1997-02-25 1997-08-22 0.168324 0.840123 -0.127527
5 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 1995-07-31 1997-07-25 1997-08-25 1998-02-24 0.204113 1.575 -0.0559292
6 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 1996-01-29 1998-01-26 1998-02-25 1998-08-24 -0.100918 -0.825578 -0.104903
7 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 1996-07-29 1998-07-27 1998-08-25 1999-02-24 0.0547386 0.33547 -0.123288
8 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 1997-01-27 1999-01-26 1999-02-25 1999-08-24 0.321812 1.46259 -0.0927723
9 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 1997-07-28 1999-07-27 1999-08-25 2000-02-23 -0.30023 -0.979703 -0.198154
10 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 1998-01-27 2000-01-25 2000-02-24 2000-08-22 -0.27374 -0.955766 -0.19964
11 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 1998-07-28 2000-07-25 2000-08-23 2001-02-22 -0.254249 -0.61712 -0.232083
12 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 1999-01-27 2001-01-24 2001-02-23 2001-08-22 -0.0575822 -0.182716 -0.149217
13 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 1999-07-28 2001-07-25 2001-08-23 2002-02-28 -0.211071 -0.699943 -0.213769
14 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2000-01-26 2002-01-30 2002-03-01 2002-08-28 -0.301766 -0.983437 -0.207761
15 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2000-07-26 2002-07-31 2002-08-29 2003-02-28 -0.018564 0.132831 -0.228828
16 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2001-01-25 2003-01-30 2003-03-03 2003-08-28 0.479426 1.96953 -0.108144
17 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2001-07-26 2003-07-31 2003-08-29 2004-03-01 0.0756585 0.616527 -0.0657998
18 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2002-01-31 2004-01-30 2004-03-02 2004-08-30 0.151836 1.21142 -0.0690812
19 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2002-08-01 2004-08-02 2004-08-31 2005-03-01 0.270567 1.65934 -0.0435206
20 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2003-01-31 2005-01-31 2005-03-02 2005-08-29 0.197076 1.58597 -0.0471549
21 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2003-08-01 2005-08-01 2005-08-30 2006-03-01 0.163745 1.15495 -0.0513701
22 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2004-02-02 2006-01-31 2006-03-02 2006-08-29 -0.0965015 -0.835725 -0.0779184
23 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2004-08-03 2006-08-01 2006-08-30 2007-03-02 -0.0128773 0.00222433 -0.0890824
24 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 2005-02-01 2007-02-01 2007-03-05 2007-08-30 0.0783364 0.665601 -0.0904752
25 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 2005-08-02 2007-08-02 2007-08-31 2008-03-03 -0.296375 -1.15645 -0.242372
26 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2006-02-01 2008-02-01 2008-03-04 2008-08-29 -0.102297 -0.571393 -0.149981
27 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2006-08-02 2008-08-01 2008-09-02 2009-03-03 -0.741189 -2.08187 -0.491265
28 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2007-02-02 2009-02-02 2009-03-04 2009-08-31 0.363829 1.02787 -0.197103
29 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2007-08-03 2009-08-03 2009-09-01 2010-03-03 -0.0656256 -0.240234 -0.130699
30 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2008-02-04 2010-02-02 2010-03-04 2010-08-31 -0.30053 -1.41106 -0.245165
31 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2008-08-04 2010-08-03 2010-09-01 2011-03-02 0.45298 3.27963 -0.0371581
32 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2009-02-03 2011-02-01 2011-03-03 2011-08-30 -0.156565 -0.660903 -0.173081
33 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2009-08-04 2011-08-02 2011-08-31 2012-03-01 0.127036 0.83833 -0.0987333
34 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2010-02-03 2012-02-01 2012-03-02 2012-08-29 -0.0767895 -0.722248 -0.0934804
35 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2010-08-04 2012-08-01 2012-08-30 2013-03-05 0.35358 2.35111 -0.0537911
36 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2011-02-02 2013-02-04 2013-03-06 2013-09-03 0.0614463 0.483047 -0.0878858
37 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2011-08-03 2013-08-05 2013-09-04 2014-03-05 0.0538737 0.480312 -0.0914237
38 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2012-02-02 2014-02-04 2014-03-06 2014-09-03 0.199815 2.5388 -0.0390198
39 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 2012-08-02 2014-08-05 2014-09-04 2015-03-05 0.0460529 0.359521 -0.0777756
40 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2013-02-05 2015-02-04 2015-03-06 2015-09-02 -0.0636578 -0.402209 -0.119103
41 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2013-08-06 2015-08-05 2015-09-03 2016-03-04 -0.125981 -0.75379 -0.157637
42 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2014-02-05 2016-02-04 2016-03-07 2016-09-01 0.122696 1.65676 -0.0280818
43 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2014-08-06 2016-08-04 2016-09-02 2017-03-06 0.277267 2.64932 -0.0268456
44 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2015-02-05 2017-02-03 2017-03-07 2017-09-01 0.0923221 1.07864 -0.0372546
45 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2015-08-06 2017-08-04 2017-09-05 2018-03-06 0.0882358 0.772309 -0.101018
46 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 2016-02-05 2018-02-05 2018-03-07 2018-09-04 0.31794 2.47229 -0.0357283
47 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 2016-08-05 2018-08-06 2018-09-05 2019-03-07 0.272269 1.24778 -0.16121
48 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 2017-02-06 2019-02-06 2019-03-08 2019-09-05 -0.222151 -0.964749 -0.200667
49 recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 2017-08-07 2019-08-07 2019-09-06 2020-03-06 0.0474836 0.372474 -0.135696
50 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2018-02-06 2020-02-06 2020-03-09 2020-09-03 0.986249 3.15481 -0.0698947
51 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2018-08-07 2020-08-06 2020-09-04 2021-03-08 0.280976 1.80075 -0.062128
52 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2019-02-07 2021-02-05 2021-03-09 2021-09-03 0.280224 2.62732 -0.039586
53 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2019-08-08 2021-08-06 2021-09-07 2022-03-07 -0.0826116 -0.573504 -0.116724
54 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2020-02-07 2022-02-04 2022-03-08 2022-09-06 -0.14083 -0.668956 -0.147417
55 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2020-08-07 2022-08-08 2022-09-07 2023-03-08 -0.0386951 -0.0390055 -0.161661
56 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2021-02-08 2023-02-07 2023-03-09 2023-09-07 0.290555 1.52111 -0.0923219
57 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2021-08-09 2023-08-09 2023-09-08 2024-03-08 0.70994 3.36541 -0.0794761
58 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2022-02-07 2024-02-08 2024-03-11 2024-09-09 -0.0954394 -0.410487 -0.155026
59 recessionalert-sp500-seasonal-short_cycle-lb12-lag1 2022-08-09 2024-08-09 2024-09-10 2025-03-12 0.24256 1.38373 -0.108129
60 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 2023-02-08 2025-02-11 2025-03-13 2025-09-11 0.324664 1.3235 -0.120527
61 recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 2023-08-10 2025-08-13 2025-09-12 2026-03-13 0.0576207 0.534455 -0.0503836
Portfolio — ok

Constant weights rebalanced every observation; sleeve returns include their declared costs, but additional portfolio rebalancing costs are excluded. Exploratory common-window comparison.

candidate weight delta cagr delta sharpe delta max drawdown delta expected shortfall 95 correlation downside correlation co crash rate given benchmark tail drawdown overlap fraction reason
recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1 0.1 -0.0030517 -0.00748815 2.48654e-06 -0.000270599 0.756117 0.645769 0.632701 0.876824 None
recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1 0.1 -0.00301081 -0.00515679 -0.00038525 -0.000422322 0.7626 0.658929 0.677725 0.880503 None
recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2 0.1 -0.00393759 -0.00438673 0.0113439 -0.000775125 0.815323 0.730026 0.722749 0.871129 None
recessionalert-sp500-seasonal-short_cycle-lb12-lag1 0.1 -0.0043332 0.00164696 0.0194676 -0.00133294 0.333256 0.258565 0.473934 0.890708 None
Events — ok

Episode counts are descriptive; independence requires economic justification. Leave-one-out averages event effects, not a fabricated continuous equity curve.

recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1

event status observations strategy return benchmark return excess return
global-financial-crisis ok 356 -0.573905 -0.547674 -0.026231
covid-crash ok 24 -0.0820838 -0.334004 0.25192
inflation-bear ok 196 -0.28466 -0.240592 -0.0440679

Leave one episode out

removed remaining events mean event excess return
global-financial-crisis 2 0.103926
covid-crash 2 -0.0351495
inflation-bear 2 0.112844

recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1

event status observations strategy return benchmark return excess return
global-financial-crisis ok 356 -0.577571 -0.547674 -0.0298968
covid-crash ok 24 -0.0820838 -0.334004 0.25192
inflation-bear ok 196 -0.245188 -0.240592 -0.00459558

Leave one episode out

removed remaining events mean event excess return
global-financial-crisis 2 0.123662
covid-crash 2 -0.0172462
inflation-bear 2 0.111012

recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2

event status observations strategy return benchmark return excess return
global-financial-crisis ok 356 -0.444902 -0.547674 0.102772
covid-crash ok 24 -0.108366 -0.334004 0.225638
inflation-bear ok 196 -0.209494 -0.240592 0.0310982

Leave one episode out

removed remaining events mean event excess return
global-financial-crisis 2 0.128368
covid-crash 2 0.0669351
inflation-bear 2 0.164205

recessionalert-sp500-seasonal-short_cycle-lb12-lag1

event status observations strategy return benchmark return excess return
global-financial-crisis ok 356 -0.443081 -0.547674 0.104593
covid-crash ok 24 -0.214367 -0.334004 0.119637
inflation-bear ok 196 0.0694233 -0.240592 0.310016

Leave one episode out

removed remaining events mean event excess return
global-financial-crisis 2 0.214826
covid-crash 2 0.207304
inflation-bear 2 0.112115
Scenarios — not estimable

provide recorded engine reruns for cost, lag, financing, margin or family-removal scenarios

Assumptions

Provenance and software versions
{
  "input_hash": "841384cea28bcddd943af2e8ec2111c9da5564520442e0827bc7a6f3280da1f9",
  "provenance": {
    "analysis_rows": 8427,
    "analysis_settings": "Illustrative diagnostic configuration selected after viewing published campaign results; not preregistered confirmation.",
    "as_of": "2026-07-24",
    "code_revision": "Historical producer revision not recorded in this export; source bytes are SHA-256 bound.",
    "costs": "Uses costs already embedded by the historical producer; completeness is not independently verified.",
    "excluded_holdout_rows": 0,
    "execution": "Uses recorded campaign equity paths without rerunning or altering their execution assumptions.",
    "manifest_sha256": "f82c6e291fb444017b9feee28e470723cdb38fc1f3f9b0a8e88d544bc0a622ec",
    "missing_observations": {
      "benchmark": 0,
      "recessionalert-sp500-seasonal-expanding_month-lbexpanding-lag1": 0,
      "recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag1": 0,
      "recessionalert-sp500-seasonal-four_cycle-lbexpanding-lag2": 0,
      "recessionalert-sp500-seasonal-short_cycle-lb12-lag1": 0
    },
    "raw_rows": 8427,
    "recorded_provenance": {
      "common_overlay_span": "1993-01-29/2026-07-24",
      "market_cache": "data/market.sqlite (read-only)",
      "native_fidelity": 0,
      "native_spans": {
        "SPY": "1993-01-29/2026-07-24",
        "^GSPC": "1927-12-30/2026-07-24"
      },
      "normalization": "Asset and SPY display levels are divided by first available SPY close; score/weight/equity arrays are derived and preserve null warmup values.",
      "proxy_series": [
        "^GSPC",
        "SPY"
      ],
      "redistribution": "Derived prices, scores, weights, and metrics only; no cached HTML/media/workbook bytes, credentials, cookies, or private account data.",
      "source_page_fetched_at": "2026-08-22T23:47:00Z",
      "source_page_sha256": "sha256:7e34ccc16114249e7652c0bf1080f6df0f14b49e48d1009f05f9b8a33fb369cd",
      "source_page_url": "https://recessionalert.com/analyzing-sp-500-seasonal-trends/"
    },
    "returns_sha256": "c6dd76d5dd416b315347f46e9eafd938d010c1e480b4b6d953bb9c2e48513c4d",
    "search_history": "Export contains retained recorded paths only. Original trial history may be larger; SPA remains unavailable.",
    "source": "research/campaigns/recessionalert-sp500-seasonal-1352/lab-series.json",
    "source_sha256": "6e087febf6655c367dde52481766eb5be374b0649b2cfad2ab5ea55b82b3d324"
  },
  "trial_accounting": {
    "candidate_return_columns": 4,
    "effective_independent_trials": null,
    "recorded_trials": 4,
    "search_complete": false
  },
  "versions": {
    "arch": "8.0.0",
    "numpy": "2.3.5",
    "pandas": "2.2.3",
    "plotly": "7.0.0",
    "quantstats": "0.0.81",
    "skfolio": "0.20.2",
    "statsmodels": "0.14.6"
  }
}