Market-Stress Exposure Scaling

Test the idea. Follow the evidence.

Can daily market-stress signals improve a long-only momentum strategy by scaling its exposure? I compared LightGBM and logistic-regression overlays with simple rules, and a simple drawdown rule beat the models.

At a glance

  • Rule > MLA simple drawdown rule beat LightGBM and logistic regression
  • 0.93 → 1.20Sharpe; threshold picked on the same window
  • −21.6% → −9.1%Max drawdown
  • 609Tickers, 2015–2025
  • 0.59–0.60Model AUC, above chance but noisy
  • Cash when SPY is 10% below its high.
  • More model complexity didn't mean a better strategy.
Market-Stress Exposure Scaling · Scale exposure, not selection
  1. Liquid-stock universe
  2. Momentum baseline — inverse-volatility weights
  3. Stress features — SPY trend, volatility, drawdown
  4. SPY drawdown rule — cash at 10% below the high
  5. Walk-forward model — LightGBM · logistic regression
  6. Exposure — applied the next day
  7. Evaluation — Sharpe · drawdown · turnover
Equity in the evaluation windowFour series from the final report figure
Equity in the evaluation window: growth of 1.0 for Baseline, no overlay, SPY drawdown rule (10%), LightGBM, Logistic regression, 2020-04-23 to 2024-04-24.Rule in cash0.91.11.31.51.71.9Apr 20202021202220232024
  • Baseline, no overlay
  • LightGBM
  • Logistic regression
  • SPY drawdown rule (10%)

The story

The result

A simple rule won. Moving to cash when SPY is 10% or more below its trailing high raised the Sharpe ratio from 0.93 to 1.20 and cut max drawdown from −21.6% to −9.1% over the April 2020 to April 2024 window, where the 10% threshold was also picked. The learned models didn't beat it.

What I learned

My starting assumption was that a learned model would beat a simple rule. It didn't, and that turned out to be the most useful result: more model complexity doesn't guarantee a better strategy. The evidence decides.

Data and baseline

The data is daily yfinance bars from 2015 through 2025 for 609 downloaded tickers. The baseline holds the top decile of liquid S&P 500 names by momentum, weighted by inverse volatility, and the overlay only decides how much of it to hold.

Timing and splits

Every signal is applied the next trading day, so it never earns a return it already saw. Train, validation and test splits are chronological, with a five-day embargo because the labels overlap. A bad window is a five-day return in the bottom 20% of recent outcomes.

Why the rule won

LightGBM raised Sharpe slightly but left the drawdown almost unchanged; logistic regression cut drawdown but gave up too much return. Their AUCs of 0.59 and 0.60 were above chance but too noisy for a stable daily exposure policy. The drawdown rule waits until stress is visible, which discards some information but also removes estimation error and turnover.

Limitations

The main limits are data quality and execution realism: yfinance has coverage gaps, and costs are simplified. The 10% threshold was the best in the tested grid, not a universal cutoff, and it was chosen on the same window the chart shows, so that curve is not an out-of-sample result.

The code is private. I'm happy to walk through it.