← Back
Website · Market instrument

Be aggressive, or play defense?

A dashboard that grades the S&P 500, Dow, Nasdaq, and Russell 2000 from 0 to 100 every trading day. Valuation, sentiment, and trend go in. One number comes out: how much risk to take right now.

Open the live dashboard ↗
4
Indexes
0–100
Signal range
5pm ET
Refresh
100500
59Neutral · lean neutral

One number, three postures.

The score answers one question: how much risk the market is paying you to take today. Where it lands sets the posture.

100 · CONSERVATIVE50 · NEUTRAL0 · AGGRESSIVE
Conservative

Expensive and euphoric. Trim back before the crowd does.

Neutral

Fairly valued. Hold the line; no edge in either direction.

Aggressive

Cheap and unloved. Time to add risk while everyone else is scared.

How the score is built.

01
Valuation

How stretched price is against its long-run average: the premium over the 50-month moving average, ranked as a historical percentile.

w 0.65
02
Sentiment

CNN's Fear & Greed Index, smoothed over 30 days, so a single panicky or euphoric session doesn't swing the call.

w 0.35
03
Trend

Where price sits against its moving averages, a check that the tape agrees with the valuation read.

w context
score = 0.65 · premium_percentile + 0.35 · fear_greed_30d

higher = richer + greedier = more conservative

The live instrument.

Each index gets its own page: the gauge, the score and price history, and a log of every signal crossing. It recomputes on its own every weekday after the close.

spx-valuation-dashboard · S&P 500
The live Market Timing Dashboard: allocation gauge, score and price charts, and signal-crossing history for the S&P 500

Under the hood.

A Python job pulls the prices and sentiment and recomputes the scores on a schedule (GitHub Actions, weekdays at 5pm ET). The front end just reads the saved history and draws it. No server to babysit.

ReactViteLightweight ChartsPythonGitHub ActionsClaude Code