I keep coming back to the same problem when a book gets big enough to have opinions in five different asset classes at once. Each position has its own reason to exist, and each one feels smart in isolation, but the thing that actually moves the whole account on a bad day is one shared variable underneath all of them. When appetite for risk rolls over, crypto and small caps and high yield and emerging market currencies all sell together, and the diversification you thought you had turns out to be one bet wearing five costumes. So I wanted a single number that tells me which side of that regime I'm sitting in, built from prices I can see live rather than from economic data that shows up three weeks late and gets revised anyway.
Why prices beat the economic calendar
The usual risk-appetite dashboards lean on things like PMIs, jobs numbers, and financial conditions indices. Those are fine for a quarterly memo, but they lag, and by the time the data confirms a regime shift the market has usually already traded it. Prices don't lag. A market price is a live vote with real money behind it, and the specific prices I care about are the ones where the risk-on and risk-off crowd are visibly on opposite sides of the same trade.
The trick is picking inputs that each measure risk appetite through a different plumbing. If all five of your signals are really the same signal, you've built a fancy S&P proxy and called it a gauge. Here's the set I keep landing on, and what each one is actually reading:
- AUDJPY. The Aussie is a growth-and-commodity currency, the yen is the classic funding-and-safety currency. When people want to take risk they borrow yen and buy Aussie, so this pair rising is a clean risk-on tell in FX.
- Copper divided by gold. Copper wants a growing economy, gold wants fear. The ratio strips out the general "metals are up" noise and leaves you with a fairly honest growth-versus-hedging read.
- High-yield credit spreads. Junk bond spreads over Treasuries are where risk appetite shows up first and most brutally. Widening spreads mean the market is repricing the odds of not getting paid back. I use this inverted so that tighter spreads push the score toward risk-on.
- VIX. Equity implied volatility. Blunt, well known, and still useful. Also used inverted, since low vol is the risk-on state.
- Stablecoin dominance. The share of total crypto market cap sitting in stablecoins. When that share climbs, crypto capital is hiding in cash equivalents on-chain, which is a risk-off move that the traditional inputs can't see. Used inverted.
Normalizing so the pieces are comparable
You cannot average a currency pair, a ratio, a spread in basis points, a volatility index, and a percentage. They live on wildly different scales, and whichever one happens to have the biggest raw numbers will silently dominate the whole thing. So step one is to put every input on the same footing.
The method I trust most is the rolling z-score. For each input, take a trailing window, compute the mean and standard deviation over that window, and express today's value as the number of standard deviations it sits above or below its own recent normal. Now everything is in the same units, roughly bounded, and centered on zero. A window of about a year of trading days works well as a default. Shorter and the gauge gets twitchy and starts treating every wiggle as a regime. Longer and it goes senile, holding onto a normal from a market that no longer exists.
Two things will bite you here if you're not careful. First, orient every input the same direction before you combine them. Decide that positive always means more risk-on, then flip the sign on VIX, spreads, and stablecoin dominance so a scary reading pushes the score negative like it should. Getting one sign backwards produces a gauge that looks plausible and is quietly worthless. Second, clip the z-scores at something like plus or minus three. A genuine panic will throw a six-sigma print, and if you let that through raw it hijacks the whole composite for a day and then whipsaws you when it mean-reverts.
Weighting and turning it into one number
Once the inputs are all comparable z-scores pointing the same way, combining them is easy and the weighting question is where people overthink it. Equal weight is a completely respectable default, and honestly it's where I'd tell most people to start and maybe stop. You average the five z-scores and that average is your gauge. Positive is risk-on, negative is risk-off, and the magnitude tells you how stretched the regime is.
If you do want to weight, resist the urge to fit weights to past returns. That's just overfitting with extra steps, and the weights it hands you will be beautifully tuned to a market that already happened. Weight by conviction and by non-redundancy instead. Credit spreads and stablecoin dominance each see a corner of the market the others don't, so I'll nudge them up. VIX and equity-driven inputs already overlap with everything, so I'll nudge them down to avoid double-counting equity fear.
A simple sanity check: compute the correlation of each input's z-score to the others over your window. If two inputs are riding above roughly 0.8 correlation, they're basically one input, and you should either drop one or down-weight both. The whole point was five different pieces of plumbing, so police that.
Using the score without fooling yourself
The output I actually use is a gross-exposure throttle, not a market-timing signal. I am not trying to call tops. I'm trying to be smaller when the whole environment is hostile and fuller when it's friendly, across the entire book at once. A rule of thumb that has held up for me: run full intended gross when the gauge is comfortably positive, scale linearly down through the zero line, and cut gross hard once it pushes past roughly minus one and a half. You can map the exact throttle curve to your own tolerance, but keep it monotonic and keep it boring.
The failure mode to respect is acting on tiny moves near zero. A gauge that wanders between plus and minus a quarter is just noise wearing a lab coat, and if you resize on every flicker you'll bleed out on transaction costs and get chopped to pieces. Add a dead band. Ignore the thing until it clears some threshold, then move in steps rather than continuously. I'd rather adjust exposure a handful of times a quarter than fiddle daily.
The other honest caveat is that a price-based gauge tells you about the weather, not about the specific storm coming for your specific positions. It won't catch an idiosyncratic blowup, and it will occasionally flash risk-off right before a face-ripping relief rally, because it's a probabilistic tilt and not a prophecy. Treat it as one input into position sizing, sitting alongside your own read.
If you'd rather not stand up the data plumbing for five cross-asset feeds yourself, this is roughly the kind of cross-market scoring we bake into Blockcircle, since the pieces are already flowing through for other tools. But there's nothing here you can't build in a spreadsheet with five price series, a rolling z-score, and the discipline to leave it alone between signals. The build is a weekend. The discipline is the hard part.