What the Market Mood Index Measures (and Doesn't)
The Market Mood Index in my SIP/FD calculator runs on three inputs and a weighted average. Here is the exact arithmetic, and the four things it cannot see.
Note: Figures quoted here reflect the data snapshot in the repository at the time of writing. The live gauge refreshes daily.
A friend messaged me last month with a screenshot of the gauge on my SIP vs FD calculator. The needle sat at 49. His question was reasonable and completely wrong at the same time: "So does this mean I should wait before starting my SIP?"
No. It does not mean that. It cannot mean that, and the reason it cannot is baked into how the number is constructed.
Before anything else, the boring but necessary part: this is educational only. Nothing here is financial advice, the calculator says so in three separate places, and if you are making an actual allocation decision you should talk to a SEBI-registered advisor, not read a blog post about arithmetic. I built this to make my own assumptions visible, not to tell anyone when to buy.
So, the thesis. A sentiment index like this is useful as a contrarian sanity check and useless as a trading signal, and the difference between using it well and misusing it comes down to knowing what the three inputs are and what got deliberately left out.
The three inputs, and nothing else
The full derivation lives on the methodology page, which is the canonical source and which I would rather you read than take my word for. The short version: the score is a weighted average of three signals, each mapped onto a 0-to-100 scale where 0 is maximum fear and 100 is maximum greed.
NIFTY 50 P/E, weighted 50%. Today's index P/E is converted to a z-score against a ten-year mean and standard deviation, then mapped linearly: a z-score of −2 becomes 0, a z-score of 0 becomes 50, a z-score of +2 becomes 100, and anything beyond that range gets clamped. Expensive market, high score.
India VIX, weighted 30%. Piecewise linear. A VIX at or below 12 maps to 80. A VIX at or above 25 maps to 20. In between it slides linearly between those two points. Calm market, high score.
Advance/decline ratio, weighted 20%. How many NIFTY 50 constituents rose today versus fell. Also piecewise linear, with a deliberate kink at a ratio of 1.0 so that a perfectly split market lands exactly on 50. A ratio of 2 or better maps to 80, a ratio of 0.5 or worse maps to 20.
The 50/30/20 split is not arbitrary, and I will not re-argue it here because the methodology page already explains it: valuation moves slowest so it anchors the score against speculative noise, volatility captures short-term sentiment, and breadth is noisiest so it gets the smallest weight.
The final score maps to one of five labels: 25 or below is Extreme Fear, 26 to 45 is Fear, 46 to 55 is Neutral, 56 to 75 is Greed, and above 75 is Extreme Greed.
That is the entire model. Three numbers in, one out. No machine learning, no proprietary sauce, no secret fourth input.
Working one out by hand
The best way to stop treating a gauge as an oracle is to compute it once yourself. Let's invent a trading day and grind through it.
Suppose the NIFTY 50 is trading at a P/E of 26.5, India VIX closes at 15.5, and 32 of the 50 constituents rose while 20 fell, giving an advance/decline ratio of 1.6.
Step one, the P/E contribution. The stored assumptions put the ten-year mean at 24.0 and the standard deviation at 4.0. So:
z = (26.5 − 24.0) / 4.0 = 0.625
contribution = 50 + (0.625 × 25) = 65.6Step two, the VIX contribution. 15.5 sits between the 12 and 25 anchors, so we interpolate:
contribution = 80 − ((15.5 − 12) / (25 − 12)) × 60
= 80 − (0.269 × 60)
= 63.8Step three, the advance/decline contribution. A ratio of 1.6 is above the kink at 1.0, so we use the upper segment:
contribution = 50 + ((1.6 − 1) / 1) × 30 = 68.0Step four, the composite. Apply the weights:
(0.5 × 65.6) + (0.3 × 63.8) + (0.2 × 68.0)
= 32.8 + 19.2 + 13.6
= 65.6 → rounds to 66 → "Greed"Sixty-six. Greed, but not Extreme Greed. Notice what that took: valuation meaningfully above its long-run mean, a calm volatility reading, and breadth running three-to-two positive. All three signals aligned, and the needle still lands well short of the top band.
That tells you something about the model's dynamic range. Pin VIX and advance/decline at their maximum contribution of 80 and together they still supply only 40 points. To clear 75 and register Extreme Greed, the P/E component alone would have to exceed 70, meaning a z-score above +0.8, meaning a NIFTY P/E above roughly 27.2. The logic reverses at the bottom: even with maximum panic in volatility and breadth, you cannot print Extreme Fear unless P/E falls to about 20.8.
In other words, this index is structurally a valuation index wearing a sentiment costume. The extremes belong to P/E. Volatility and breadth can only nudge.
Checking it against a real day
That worked example was invented, so here is a real one from the repository. The snapshot dated 13 July 2026 recorded a NIFTY P/E of 20.87, an India VIX of 12.25, and an advance/decline ratio of 1.0.
Run it through:
- P/E: z = (20.87 − 24.0) / 4.0 = −0.78, contribution 30.4
- VIX: 80 − ((12.25 − 12) / 13) × 60 = 78.8
- A/D: ratio 1.0, so 50.0
- Composite: (0.5 × 30.4) + (0.3 × 78.8) + (0.2 × 50.0) = 15.2 + 23.7 + 10.0 = 48.9, rounds to 49, "Neutral"
Which is exactly what the gauge showed my friend.
And now the disclosure, because it is the most instructive thing in this post.
That advance/decline ratio of 1.0 was not a measurement. It was a fallback. The NSE endpoint for constituent-level advances and declines returned a 404 on that run, so the script logged a partial failure and substituted a neutral ratio scoring exactly 50 so the rest of the composite could still be computed. Twenty percent of that day's score was a placeholder standing in for data that never arrived.
I did not remember this when I started writing. I found it while checking the snapshot against the build script, which is a decent argument for writing these posts at all.
I still defend the design choice: publishing nothing when one source fails is worse than a logged substitution. But it means the composite alone cannot tell you whether a component is real, which is sharper than any conceptual limitation I had planned to list.
So look at what "Neutral" hid that day. The market was cheap, nearly a full standard deviation below its ten-year mean. Volatility was about as calm as India VIX gets. Two signals telling different stories, a third that was not there at all, flattened into one unremarkable word.
This is the honest case for the whole exercise: the composite is the least interesting number on the page. The components are the point.
The same metadata file also shows the pipeline last ran successfully on 13 July, over a month before this post. The calculator flags that with a red staleness badge, so it is not lying to anyone, but it is a gap I need to fix rather than explain away.
What it does not measure
Now the half of the title that matters.
It has no global context. There is no input for US markets, no dollar index, no crude, no Fed. Foreign institutional flows, which move Indian equities more than most domestic investors admit, enter only implicitly and late, once they have already pushed P/E or volatility around. A night where global risk appetite collapses shows up here tomorrow at the earliest, and only in translation.
It cannot see sector divergence. This is a NIFTY 50-level composite, and one number physically cannot tell you that IT is being sold off while banking is bid. A day where financials rally and technology sells off can produce a balanced advance/decline ratio, an unremarkable index P/E, and a score of 50 that describes nobody's actual portfolio. If your holdings are sector-concentrated, a broad-market reading is close to noise for you.
It is blind to news until price moves. There is no event feed, no policy tracker, no earnings calendar. A budget announcement, an RBI decision, a geopolitical shock: none register directly. They appear only once already priced into valuation, volatility, or breadth. The index reflects what has happened, never what is about to.
It does not tell you when one of its own inputs is missing. As the July snapshot showed, a failed fetch is quietly replaced with a neutral value and the composite still prints a confident-looking number. The partial failure is recorded in the metadata and the staleness badge flags old data, but neither is visible in the score itself.
The baseline it measures against is stale by design. This is the subtle one. The P/E input is fetched daily, but the ten-year mean of 24.0 and standard deviation of 4.0 that convert it into a z-score are stored assumptions revised quarterly, not recomputed live. The methodology page is upfront that these move slowly enough for this to be honest, and I agree, but the yardstick is always slightly behind the thing being measured. Where the market is genuinely re-rating, a fixed baseline reads the new normal as sustained greed until the assumption catches up.
How the CNN index compares
The obvious reference point is CNN's Fear & Greed Index, where most people first meet this idea. Worth naming the differences plainly rather than implying my three-input version is the same thing.
CNN's index runs on seven equally weighted indicators: market momentum, stock price strength, stock price breadth, put and call options, junk bond demand, market volatility, and safe haven demand. Each is scored by how far it has deviated from its own average relative to how much it normally deviates, and the seven are averaged into a 0-to-100 score on the same fear-to-greed scale.
Two differences matter. CNN reaches outside equities entirely: junk bond demand and safe haven demand pick up risk appetite migrating between stocks and bonds, and mine has no such window. CNN also reads the options market through put/call ratios, the closest thing to a forward-looking positioning signal in the set, and mine has nothing equivalent.
CNN's is genuinely broader, and where they overlap the constructions still differ. Mine is simpler, fully documented, built from free public Indian sources, and reproducible by hand in ninety seconds, which was the design goal. Simpler is not equivalent, and I would rather say so than let the resemblance imply more.
The only way I use it
I do not time anything with this. Systematic investing works precisely because it removes the timing decision, and a gauge that reacts to yesterday's closing prices is the worst possible tool for reintroducing it.
What it is genuinely good for is one narrow thing: catching myself. When I notice I am unusually keen to increase an allocation, and the components show valuation stretched above its mean with volatility unusually calm, that is a useful moment of friction. Same in reverse: when I feel like pausing contributions and the P/E component sits at 30, the number is telling me my instinct is running backwards from the arithmetic.
That is a contrarian sanity check, not a signal. It carries no predictive claim, and treating it as one would misuse a deliberately simple model.
The live version sits at the top of the SIP vs FD calculator, and every formula, source, and known limitation is written out on the methodology page. Expand the component breakdown before you look at the headline number. The interesting information was never the needle.
Enjoying this article?
Get posts like this in your inbox. No spam, unsubscribe anytime.
