← Results index

Replicate RecessionAlert indicator: Analyzing SP-500 Seasonal Trends | RecessionAlert

2026-09-01T00:00:00Z Experiment completed Completed a best-effort exploratory replication of the SHA-verified RecessionAlert seasonal-trends article: four inferred/proxy variants ran on the longest checked-in ^GSPC history with actual SPY overlays, and the public Other/Research campaign records rules, provenance, causal lag, equity results, diagnostics, and explicit native-fidelity gaps without changing the source spec or canonical databases.
1352 recessionalert seasonal_trends research_campaign best_effort proxy_based fidelity_mismatch data_limited

Source report: research/findings/1352.md

Objective

Independently replicate the distinct RecessionAlert row Analyzing SP-500 Seasonal Trends | RecessionAlert from the checked-in canonical snapshot, then follow the trusted reopen instruction to perform best-effort public-proxy exploration rather than stop at the prior source-fidelity gap report.

Source and provenance

The canonical source is the redacted page https://recessionalert.com/analyzing-sp-500-seasonal-trends/ in read-only data/recessionalert.sqlite. The inventory identifies the row at research/findings/recessionalert_inventory.md:30; the manifest-selected page body is HTTP 200, 94,333 bytes, fetched 2026-08-22T23:47:00Z, and hashes to sha256:7e34ccc16114249e7652c0bf1080f6df0f14b49e48d1009f05f9b8a33fb369cd. The article is dated 2019-12-27; the generic STM workbook hash sha256:c01364504b43f157c9fd58752b2c8c9774318f04542f736198ce74cf4d0350d4 remains an unambiguous-linkage gap and is not merged or republished.

The source claims SP500 monthly closing-price history since 1957, with annual, bi-annual, tri-annual, and quadrennial cycle sample sets of 63, 32, 21, and 15. It exposes no source-linked numeric observation table or target signal series.

Disclosed rule and explicit inference boundary

The article names monthly mean percentage gain, percentage of positive months, and positive-total-gains divided by negative-total-losses. It ranks 120 readings as (121-rank)/120, averages the three characteristic scores, and combines four cycle scores. Its action text says short when the signal is <37, long when >=37 and <=74, and 2x above 74; cash may replace short exposure and leverage may be omitted.

The fractional examples (0.758, 0.85, 0.8, 0.802) do not define the conversion to 37/74. Release timing, timezone, vintages, revision rules, target instrument, sizing, holding period, rebalance, costs, slippage, exits, reversals, and re-entry are also undisclosed. The original source-fidelity spec at research/findings/specs/recessionalert-sp500-seasonal-trends.json remains unchanged.

Best-effort proxy protocol

The campaign uses checked-in Yahoo ^GSPC close-only bars as the longest direct SP500 price proxy (1927-12-30/2026-07-24, 24,757 rows) and actual SPY close-only bars for the requested overlay (1993-01-29/2026-07-24, 8,428 rows). Monthly prices use the last available close; scores are computed strictly from prior months; month-end states are forward-filled to daily SPY bars. Lag 1 is the causal primary, lag 0 is research-only/lookahead sensitivity, and lag 2 is conservative. Cash is the primary risk-off sleeve; short and unlevered overlays are labeled sensitivities.

Four executable inferred/proxy variants were run on 1,147 scored months and 8,428 SPY overlay days:

VariantParametersEnd equityCAGRSharpeMax drawdown
Expanding month37/74, cash, lag 19.25x6.87%0.434-70.0%
Four-cycle37/74, cash, lag 19.62x7.00%0.455-71.5%
Four-cycle sensitivity35/75, unlevered, lag 27.83x6.34%0.482-52.6%
Short-cycle40/70, short, lag 13.22x3.55%0.266-75.8%

Actual SPY over the same window ended at 30.64x, with 10.76% CAGR and -55.2% maximum drawdown. All full-window proxy variants therefore trail SPY CAGR. The four-cycle lag-2 cash timing sensitivity ended at 7.52x (6.21% CAGR); lag 0 ended at 9.21x (6.86% CAGR), and is not causal evidence. Regime diagnostics show weak proxy performance in 1993–2012, mixed performance in 2013–2022, and positive relative performance in 2023–2026; this heterogeneity is not confirmation.

Validation and public artifacts

tests/test_recessionalert_sp500_seasonal_campaign.py passes seven focused offline tests for valid specs, read-only loading, future-observation isolation, source-like boundaries, available-bar lag, end-to-end overlay, and long-history spans. Browser coverage passes for the target seasonal lab plus existing ADL, Berg, and ALIX labs. python3 -m research.artifacts check --mode full --offline and python3 research/scripts/check_static_reports.py docs pass.

The public campaign is generated at docs/research/recessionalert-sp500-seasonal-1352.html with payload docs/site-data/research/recessionalert-sp500-seasonal-1352.json; the executed notebook is research/experiments/1352.ipynb with canonical HTML at docs/experiments/1352-analysis.html. Durable derived trial, diagnostics, and synthesis records are under research/findings/1352-seasonal-*.json. Outputs contain summaries, derived proxy scores/equity, metrics, hashes, and limitations only—not cached HTML/media/workbook bytes, credentials, cookies, private account data, or a claimed native signal.

Decision

Publish as exploratory Other / Research evidence with fidelity_mismatch, data_limited, parameter_sensitive, regime_dependent, predictive_not_tradable, and interesting_negative_result context. Do not admit a native RecessionAlert indicator to the registry. A future authorized refresh should provide source-linked observations, exact scale/phase/release semantics, and execution metadata before any fidelity or promotion review.

Source artifact: research/results/1352.md