Market risk & sentiment gauge
One number for how hot or washed-out risk appetite looks, built from public price, trend, volatility, credit-spread, sentiment and attention data, a seasonality read on the calendar month, plus a light touch of the Adirindin cycle calendars. Higher means hotter and more risk-on; lower means fear and washout. Scrub the history to see how past moods read.
Theoretical estimation and study aid only. Not a signal, not a timing model, and not financial advice (NFA). Past readings and past performance do not predict future results.
Loading risk & sentiment inputs…
How this is built
Each input is turned into a 0–100 sub-score where higher = hotter. The composite is the weighted average of the sub-scores that have data on that day; missing inputs are dropped and the other weights re-scale to 100%. No gaps are filled with made-up values. If less than 40% of the weight has data, no score is shown.
Equity price risk leans on URTH (iShares MSCI World ETF proxy for developed markets) rather than the US alone — the same series as global equities and seasonality, not the licensed MSCI index. Each price measure is a pair: with both series available, URTH takes 80% of the pair and the S&P 500 20% as a cross-check (all-time-high distance 14.4% + 3.6%, weekly RSI 8.64% + 2.16%, daily RSI 5.76% + 1.44%, 200-day trend 8% + 2%). On any day one series has no data (including before URTH history ~Jan 2012), the other takes the pair's full share (18% / 10.8% / 7.2% / 10%), so the price-risk block stays at 36% and trend at 10%.
Seasonality (8%). Some calendar months have historically been stronger than others. For each date the gauge takes that calendar month's average return and green-month odds on the same equity base — URTH monthly returns where URTH has them (from Feb 2012), the S&P 500 before that, back to 1950 — using only months completed before the date, so history is never scored with hindsight. Each figure is compared with the average across all prior months and measured in standard errors, so a thin or noisy record counts for less: 50 is an average month, and each half (return, odds) moves 12.5 points per standard error, capped 0–100. A month needs at least 10 prior years before it is scored. The tag next to the score reads Seasonal tailwind at 60+, Seasonal headwind at 40 or below, and seasonally neutral in between, with the points it adds or takes away vs an average month. Seasonal tendencies are averages across many years and any single month can buck them.
Credit spreads (10%). The extra yield investors demand to hold Moody's Baa-rated corporate bonds over the 10-year Treasury (FRED BAA10Y) tends to widen when stress builds and narrow when risk appetite is strong. For each date the gauge takes the previous session's spread and ranks two things against every month completed before the date: the spread's level, and its change over the last three months. The sub-score is 100 minus the average of those two percentiles, so wide or widening spreads read cold and tight or tightening spreads read hot. Before daily data starts (Jan 1986) the ranking history uses monthly Moody's BAA minus long-term Treasury yields back to 1925. Nothing after the date is ever used.
Trend (10%). Half the sub-score is how far price sits from its 200-day simple moving average (−10% or lower → 0, on the average → 50, +10% or higher → 100) and half is that average's slope over the last 21 sessions (−2% or worse → 0, flat → 50, +2% or more → 100). URTH leads with the S&P 500 as the paired cross-check, like the other price inputs.
Weight history. Seasonality came in at 10% with every other weight scaled by 0.9. Credit spreads and trend then came in at 10% each, with every earlier weight (seasonality included) scaled by 0.8, so the older inputs keep the same ratios to each other. In an Adirindin backtest against the Dow (weights set on pre-2000 data, tested on 2000–2026), the two additions modestly improved how well low readings lined up with larger drawdowns and higher volatility ahead. They did not make the gauge any better at calling returns. It remains a mood and risk-backdrop reading, not a timing model.
Base chart. The line under the score history is a price overlay you can switch between the S&P 500 (default), the Nasdaq Composite and URTH. Each is drawn on its own log scale for visual context. Switching it does not change the score or the weights above — the composite always uses the URTH / S&P 500 pair as described.
Smoothing. The daily composite can jump a few points on one-day moves (a VIX pop, a Fear & Greed swing), which made the mood zones twitchy. By default the score line, big number, zone and mood arc show a 10-trading-day exponential moving average (EMA) of the daily composite: recent days count most and older days fade out. 5- and 21-day versions are there too, and Raw shows each day exactly as computed. Over the last ten years the 10-day average cuts zone changes by roughly two-thirds and trails real turns by about three sessions. Smoothing is display-only — it does not change any input, weight or the day's raw blend, which the breakdown table always shows.
score = Σ (weightᵢ × subᵢ) ÷ Σ weightᵢ (over inputs with data)
| Input | Group | Weight | Sub-score rule |
|---|---|---|---|
| URTH distance from all-time high | Price risk | 14.4%18% if alone | 100 at a fresh all-time high, falling in a straight line to 0 at −30% or worse (URTH adjusted close vs running high). Primary equity input — iShares MSCI World ETF as a developed-markets proxy (not the licensed MSCI index series). |
| URTH weekly RSI (14) | Price risk | 8.64%10.8% if alone | Wilder 14-week RSI on URTH weekly adjusted closes; the current week uses the latest daily close. Used as-is (0–100). |
| URTH daily RSI (14) | Price risk | 5.76%7.2% if alone | Wilder 14-day RSI on URTH daily adjusted closes. Used as-is (0–100). |
| S&P 500 distance from all-time high (confirmation) | Price risk | 3.6%18% if alone | Same rule as URTH (0% → 100, −30% or worse → 0) on the S&P 500 daily close. Secondary check; takes the full 18% on any day URTH has no data (including before URTH history ~Jan 2012). |
| S&P 500 weekly RSI (14) (confirmation) | Price risk | 2.16%10.8% if alone | Wilder 14-week RSI on S&P 500 weekly closes. Secondary check; takes the full 10.8% on any day URTH has no data. |
| S&P 500 daily RSI (14) (confirmation) | Price risk | 1.44%7.2% if alone | Wilder 14-day RSI on S&P 500 daily closes. Secondary check; takes the full 7.2% on any day URTH has no data. |
| URTH 200-day trend | Trend | 8%10% if alone | Half from distance to the 200-day simple moving average (−10% → 0, at the average → 50, +10% → 100) and half from that average's slope over the last 21 sessions (−2% → 0, flat → 50, +2% a month → 100), each capped 0–100. URTH adjusted close; takes the full 10% on any day the S&P 500 has no data. |
| S&P 500 200-day trend (confirmation) | Trend | 2%10% if alone | Same rule as URTH on the S&P 500 daily close. Secondary check; takes the full 10% on any day URTH has no data (including before URTH history ~Jan 2012). |
| VIX calm (inverse 5-year percentile) | Volatility | 10.8% | 100 − the VIX close's percentile against the prior 5 years of closes. Low vol = hotter, vol spike = colder. |
| Credit spreads (Moody's BAA − 10-year Treasury) | Credit | 10% | FRED BAA10Y, previous session's value. Two percentiles, each against every prior completed month (expanding window, no look-ahead; monthly BAA − long Treasury history from 1925 before daily data starts in 1986): the spread's level and its 3-month change. Sub-score = 100 − their average, so wide or widening spreads read cold and tight or tightening spreads read hot. |
| US stocks Fear & Greed (FearGreedChart.com) | Sentiment | 7.2% | Independent daily US stock Fear & Greed score, used as-is (0–100). Not CNN's index. |
| Crypto Fear & Greed (Alternative.me) | Sentiment | 7.2% | Alternative.me daily crypto Fear & Greed score, used as-is (0–100). |
| Google Trends "bitcoin" attention | Attention | 3.6% | Percentile of last completed month's worldwide search interest vs the prior 60 months. Applied to the following month (no look-ahead). |
| BTC 4-year cycle theory position (calendar) | Cycle calendar | 3.6% | Height of the date on the Adirindin BTC 4y theory silhouette (trough 0 → theory peak 100). Calendar framework only — no price. |
| Real estate 18-year cycle position (calendar) | Cycle calendar | 3.6% | Height of the date on the Adirindin real estate (Anderson-style) silhouette (low 0 → major peak 100). Calendar framework only. |
| Seasonality (calendar month, URTH / S&P 500 history) | Seasonality | 8% | This calendar month's average return and green-month odds on the gauge's equity base (URTH adjusted-close monthly returns from Feb 2012, S&P 500 before that, back to 1950), using only months completed before the date. Each is compared with the all-month average in standard errors (so thin or noisy records count less): 50 = an average month, ±12.5 points per standard error on each half, capped 0–100. Needs at least 10 prior years of that month. |
Group totals: price risk 36% (URTH 28.8% · S&P 500 7.2%) · trend 10% (URTH 8% · S&P 500 2%) · volatility 10.8% · credit 10% · sentiment 14.4% · attention 3.6% · cycle calendar 7.2% · seasonality 8%. Cycle calendars are kept light on purpose — frameworks, not measurements.
Zones
Washout
0–20
Deep drawdown, stretched-low momentum, vol spiking, fear readings pinned low.
Repair
20–40
Still bruised. Readings off the floor but well below average.
Neutral
40–60
Mixed inputs. Nothing stretched either way.
Hot market
60–80
Near highs, firm momentum, calm vol, greedy sentiment.
Euphoria-leaning
80–100
Most inputs stretched hot at once. Historically uncommon.
Mood arc
The arc is an Adirindin sketch of how crowd mood tends to loop: washout, repair, a grind higher, a hot market, euphoria-leaning, then cracks, cooling and an unwind. The dot's height is the score; it sits on the rising side when the score is at or above its level about three months earlier and on the falling side when below. It describes where readings are, not where they go next.
Sources & coverage
URTH drawdown, daily + weekly RSI (primary) · from Jan 2012 (URTH listing)
Yahoo Finance URTH adjusted close — the iShares MSCI World ETF, used as a developed-markets proxy (same pattern as global equities / seasonality). Not the licensed MSCI index series. Dividends reinvested, after ETF fees.
S&P 500 drawdown, daily + weekly RSI (confirmation) · from Jan 1990 (history from Jan 1985 for warm-up)
Yahoo Finance ^GSPC daily close (delayed, third-party). Price index — no dividends. Steps up to the full equity weight on any day URTH has no data (including before URTH history ~Jan 2012).
Nasdaq Composite (base chart only) · from Jan 1990
Yahoo Finance ^IXIC daily close (delayed, third-party). Price index — no dividends. Drawn as an optional base chart under the score; not an input to the score.
200-day trend (URTH, S&P 500 confirmation) · from Jan 1990 (URTH from late 2012)
Same Yahoo Finance URTH adjusted close and ^GSPC daily close as the price inputs above: distance to the 200-day simple moving average and that average's 21-session slope. Needs 200 + 21 sessions of history, so URTH's trend starts about Nov 2012 and the S&P 500 carries it before then.
VIX 5-year percentile · from Jan 1990
Cboe VIX close via FRED VIXCLS. First 5 years use the history available so far.
Credit spreads (Moody's BAA − 10-year Treasury) · from Jan 1990 (daily from Jan 1986, monthly history from Jan 1925)
Moody's Seasoned Baa Corporate Bond Yield relative to the 10-year Treasury, daily via FRED BAA10Y (Federal Reserve Bank of St. Louis; source Moody's). The percentile history before 1986 uses monthly Moody's BAA minus long-term Treasury yields via FRED (BAA; LTGOVTBD to Mar 1953, GS10 after). Each date uses the previous session's spread and only months completed before it.
US stocks Fear & Greed · from Jan 2016
FearGreedChart.com public API — independent methodology, not CNN's index.
Crypto Fear & Greed · from Feb 2018
Alternative.me public API.
Google Trends "bitcoin" · from Jan 2013
Monthly, worldwide. Dated snapshot (unofficial endpoint, refreshed by hand — never scraped from production).
BTC 4y + real estate 18y calendar · from Jan 2013
Positions on the Adirindin theory silhouettes (Market cycles). Calendar frameworks, not data.
Seasonality (calendar month) · from Jan 1990 (month history from Jan 1950)
Derived from the equity base above — URTH adjusted-close monthly returns from Feb 2012, S&P 500 (^GSPC) before that. S&P month-ends before 1985 come from the Seasonality page's dataset (Yahoo ^GSPC from Dec 1949). Expanding window: each date only sees months completed before it.
Live feeds are cached for about an hour. Each feed falls back on its own to a dated snapshot bundled with the site; the chips under the chart show which is in use and how current it is. FRED data courtesy of the Federal Reserve Bank of St. Louis; Moody's Baa yield © Moody's, used via FRED.
Considered and left out
Google Trends "stock market"
Tested. It spikes in crashes (2008, Mar 2020) as well as booms, so its direction is ambiguous — left out rather than forced.
Reddit / X (Twitter) chatter
Firehose access needs keys or paid APIs. Not scraped.
CNN Fear & Greed
No documented public feed. The independent FearGreedChart.com series is used instead.
US 10-year bond secular regime
A ~40-year regime is effectively constant across any window shown here, so it would only add a flat offset. Kept as context on Market cycles, not in the blend.
Known gaps: the blend has fewer inputs before 2016 (and before 2013 it is price, trend, VIX, credit spreads and seasonality only), so older readings are not like-for-like with recent ones. Before URTH (~Jan 2012) the equity block is S&P-only via the pair logic. URTH is a developed-markets ETF proxy (no emerging markets; after fees, dividends reinvested) — not the licensed MSCI index series. VIX and the US Fear & Greed score are still US-centric. Trends data is monthly and lags by up to a month. Seasonality is mostly S&P 500 history (URTH only covers 2012 on), so it is US-leaning too, and credit spreads are US corporate bonds (Moody's Baa) only.
Educational content only · not financial advice (NFA) · @Dirindin533 / Adirindin Finance.