Blog Open Cheruvo
Build log

My blog said 30 data points minimum. My product was showing five.

Cheruvo blog · 11 August 2026 · 6 minute read

I build Cheruvo alone. It reads financial news, scores the sentiment, and shows it next to the price. It is free, it has almost no users, and this week it got its first one who actually pushed on it.

He registered, tested the stocks section, and asked a specific question: why did this one article about NVDA score −0.9? That answer turned out to be long, and while I was digging for it I found something worse that had nothing to do with his question.

The number that was not a measurement

One panel showed the correlation between daily sentiment and price. For NVDA it read −0.712. Three decimals, large type, red, with the words Strong negative underneath.

I went to count how many days it was computed on. Five.

So I ran the obvious check, dropping one day at a time:

Leave-one-out on the five days: with all five r is -0.737, without 3 August it becomes +0.244

Removing a single day out of five, 3 August, takes the correlation from −0.74 to +0.24. It changes sign. One observation was carrying the entire result.

Then I checked how easy that number is to get by accident. I generated 200,000 pairs of random series of length five and computed r for each. An absolute value of 0.737 or higher came up in 15.5% of them. You do not need a relationship to exist to see that number on your screen. You need to be unlucky about one day in seven.

The width of the 95% band around r = 0 is ± 0.88 at five pairs, ± 0.63 at ten, ± 0.44 at twenty, ± 0.36 at thirty. Below twenty pairs the band is wider than any effect between news sentiment and price that would be worth claiming. Whatever you print in there is noise wearing a lab coat.

The part that stings

A month earlier I had published an article on this same blog explaining how to measure the sentiment/price relationship yourself. It contains this sentence:

With fewer than 30 data points, any r is more noise than signal.

And a few lines above, about high values: above 0.6 it is strong, and suspicious: check how many days it is computed on.

I wrote that. Then I shipped a component that printed r at n = 5 and labelled it Strong negative. The minimum threshold in the code was five pairs, and I had typed it myself months earlier without thinking about it for even a second.

Knowing the rule and enforcing the rule turn out to be entirely different pieces of work, and only one of them is in the repository.

Looking for the same disease elsewhere

Once you find one, you go looking. The correlation formula turned out to be written in three different files with three different minimum thresholds: 5, 5 and 10. Three copies of the same mistake, so removing it from one would have left it in the other two.

Then there were two more panels, and one of them had been behind what used to be the paid plan. They said average return after bullish days and the same for bearish days, coloured green or red. They read like a trading rule.

I measured them across six tickers:

Seven average returns with their 95% bands, all crossing zero

Seven computable averages out of seven include zero. Not one of them distinguishes an effect from chance. And two of the numbers on screen were not averages at all: NVDA bearish was a single day, MSFT bullish was a single day. One trading session, printed with a plus sign and a colour, described as an average.

What I removed

The result is that the product now shows less than it did, and in several places says I do not know.

Why bother, at 14 sessions

I should be honest about the scale here, because it is the part people usually leave out. Over the four days I have been counting, the site had 14 sessions. One of them was a real engaged user. Some of the rest were me.

So this was not a decision taken under pressure from a user base. It was taken because that same user offered to discuss the project publicly, and if I leave a number that does not hold, the first person who checks takes it apart. At that point nothing I got right counts for anything.

The thing I want to remember: that five-pair threshold was never covered by a test, and there was a reason. It was not a computation, it was a display choice. Formulas get tested. Presentation does not. And the lie was entirely in the presentation, because the arithmetic behind −0.712 was perfectly correct.

The correlation now lives in one file, with the measurement table written in the comment above the threshold, so that the next person who wants to lower it has to read why it is there first. That person is probably me.

See it for yourself

Cheruvo is free, no card, no locked features. On most tickers the correlation panel currently says there is not enough data yet, which is the point.

Open Cheruvo →

This article is for information and education only and is not financial advice. Past performance and historical correlations do not guarantee future results.