← back to the dashboard

Methods
& glossary

Every model behind the dashboard, explained in two sentences each, followed by a guide to reading the charts and a plain-English glossary. Nothing here assumes you have done statistics recently.

1 of 11

The models

Building the sentiment number

Polarity score

Each document is scored between −1 and +1 by a lexicon that assigns every known word a valence and sums them. The total is squashed by C = x / √(x² + 15) so long documents cannot run away.

Engagement weight

A post counts as 1 + ln(1 + engagement), so a 10,000-upvote post outweighs a 10-upvote one by about 3.7×, not 1,000×. The logarithm is what stops one viral post dictating the day.

Daily aggregate

The day's mood is the weighted average of every document assigned to that trading session. Anything posted after the 4pm ET close rolls into the next session, so weekend chatter lands on Monday.

Sentiment z-score

The daily mood minus its trailing 10-day mean, divided by its trailing standard deviation. It uses only past data at every point, so it never peeks at the future.

Measuring the price

Return

r = Pₜ / Pₜ₋₁ − 1, the fractional change from one close to the next. Returns multiply rather than add, which is why −50% then +50% leaves you down 25%.

Log return / velocity

ℓ = ln(Pₜ) − ln(Pₜ₋₁), which adds up over time instead of multiplying. We call it velocity because it is the rate of change of price.

Acceleration

The change in velocity from one session to the next. Positive velocity with negative acceleration means still rising but losing steam.

Volatility

The standard deviation of log returns over 10 sessions, multiplied by √252 to put it on a yearly scale. The square root is because variances add over time, not standard deviations.

Linking mood to price

Correlation (r)

How closely two series move together, from −1 to +1, computed as covariance divided by both standard deviations. It only detects straight-line relationships, and r² is the share of variance explained — so r = 0.3 explains 9%.

Spearman (ρ)

The same calculation performed on ranks instead of values, so it catches any consistently-increasing relationship rather than only straight lines. When it disagrees sharply with r, a couple of outliers are driving r.

Cross-correlation by lag

Correlation of today's mood against the return k sessions later, swept across k = −5 to +5. Positive k means mood moved first; negative k means price moved first and the commentary caught up.

Granger causality

Tests whether adding past mood to a model that already knows past returns improves the prediction. It measures predictive precedence, not causation — and we run it in both directions precisely because the reverse is usually stronger.

Deciding whether it is real

p-value

The probability of seeing a result this extreme if there were genuinely no relationship. It is not the probability that the finding is real, and 0.05 is a convention rather than a law.

Multiple comparisons

Testing 11 lags at p<0.05 gives roughly a 43% chance that at least one lights up purely by chance. This is the single most important caveat on the whole dashboard.

False discovery rate (FDR)

Benjamini–Hochberg sorts the p-values and keeps only those below (rank / total) × 0.05, controlling the share of findings that are false. The survives FDR figure is the honest headline count.

Effective sample size

Autocorrelated series carry less information than their length suggests, so 21 sessions can behave like 13. We recompute the p-value at that smaller size.

Block bootstrap

Resamples contiguous blocks of the data thousands of times to build a confidence interval without assuming normality. If the interval crosses zero, the point estimate is not evidence.

Permutation test

Shuffles the pairing between mood and returns thousands of times to see how often chance produces a correlation this large. It assumes nothing about the shape of the data.

Stationarity (ADF)

Checks that a series is not drifting, because correlating two drifting series manufactures strong relationships out of nothing. Returns almost always pass; price levels almost never do, which is why we never correlate levels.

Shuffle baseline

Randomly reassigns every document to a different source and re-scores, to measure how good the best-looking source appears purely by selection. A real source has to beat that line.

Trading measures

Sharpe ratio

Average return divided by its standard deviation, annualised by √252. Its standard error is roughly √(1/n), so on a month of data any Sharpe figure has a confidence interval wide enough to include zero.

Maximum drawdown

The worst peak-to-trough fall in the equity curve over the window. It answers “what was the deepest hole?” rather than “where did it end?”

Hit rate

The share of trades that finished positive. High hit rates with poor returns mean many small wins and a few large losses.

Exposure

The fraction of sessions the rule actually held a position. A rule with 10% exposure took very few bets, so its statistics rest on very few observations.

Lead event

A session where mood spiked and price rose afterwards, excluding cases where price had already been running. Entry is always the next session's close, because a day's mood is not knowable until that day ends.

Source measures

Source concentration (HHI)

The sum of squared publisher shares: near 0 means opinion is spread widely, near 1 means one outlet produced everything. A high value does not make the reading wrong, but it means “the crowd” is a few voices.

Engine agreement

Correlation between different sentiment scorers reading the same documents. Low agreement means “sentiment” is not one measurable quantity and the choice of scorer is doing real work.

Attenuation

Measurement noise in the mood estimate drags every correlation toward zero, by a factor of √(signal / (signal + noise)). So a weak correlation is genuinely ambiguous: it may be a real effect measured badly.

Reading the charts

Every chart uses the same colours: green is positive or bullish, red is negative or bearish, dark blue is price, and grey is neutral or not significant.

The sentiment tape

Bars above the centre line are bullish sessions, bars below are bearish, and bar height is how strong the mood was. The dark line threaded over the top is the closing price, and more opaque bars had more chatter behind them.

bullish sessionbearish sessionclosing priceno chatter that session

Price vs mood (panel 1)

The solid line is price on the left axis; the shaded band is mood on the right axis, green above zero and red below. When the band and the line move together the crowd was tracking the price.

close pricepositive moodnegative mood

Velocity (panel 2)

Bars are the daily percentage price change and the black line is the change in mood. This compares two rates of change, not two levels.

price up that dayprice down that daychange in mood

Chatter volume (panel 3)

Bar height is how many documents mentioned the ticker that session, coloured by that day's mood. Tall red bars usually follow a fall, which is the crowd reacting.

bullish that daybearish that dayneutral

Cross-correlation (panel 4)

Each bar is the correlation between mood and the return k sessions later. Bars right of zero mean mood led price; bars left mean price led, and solid bars clear p<0.05 while faded ones do not.

positive correlationnegative correlationfaded = not significant

Scatter plots

Each dot is one trading session, with mood on the horizontal axis and return on the vertical; bigger dots had more chatter. A round, shapeless cloud means no relationship.

one sessionfitted trend line

Equity curves

Growth of $1 over the window for each trading rule. Green lines use scraped sentiment, the dashed black line is simply holding the stock, and the dotted grey line is a coin flip.

uses sentimentbuy and holdcoin flip

Glossary

Bearish
Expecting the price to fall.
Bullish
Expecting the price to rise.
Buy and hold
Owning the stock for the whole window and doing nothing else. The benchmark every rule must beat.
Chatter
The documents we collected — posts, articles, transcripts, filings.
Correlation (r)
How closely two things move together, from −1 to +1. Under ±0.30 is weak.
Dispersion
How much opinions disagreed. High dispersion before a big move is the classic setup.
Drawdown
How far an equity curve fell from its highest point.
Engagement
Upvotes, likes, comments — how much attention a document got.
Exposure
The share of days a rule actually held a position.
FDR
False discovery rate: the share of your 'findings' expected to be flukes.
Lag (k)
Sessions between mood and price. Positive means mood moved first.
Lead event
A session where mood spiked and price then rose, with price not already running.
Mood / sentiment
The weighted average polarity of everything said that session, −1 to +1.
p-value
How surprising a result would be if nothing real were going on. Lower is more surprising.
Polarity
How positive or negative one document is, from −1 to +1.
Return
Percentage price change.
Session
One trading day.
Sharpe ratio
Return per unit of risk. Meaningless on small samples.
Significance
Conventionally p<0.05 — but see multiple comparisons before believing it.
Stationary
Not drifting over time. A precondition for most of the statistics here.
Velocity
Rate of price change; the daily log return.
Volatility
How much the price swings, annualised.
z-score
How many standard deviations from normal. |z| > 2 is unusual.

Known limits

Small samples

A 90-day window is about 62 trading days. One earnings day can flip the sign of every correlation on the page.

Reverse causality

Chatter volume spikes after big moves. Expect most of the apparent signal to sit at negative lags.

Selection

Scraped commentary is a biased sample of opinion. Reddit is not the marginal buyer, and neither is a newsletter.

Sarcasm

Lexicon scorers read sarcasm literally, which is roughly the native language of retail trading forums.

Backtests

Every strategy figure ignores market impact and assumes you could act on a signal you would only have had after the close.

Not advice

This is a research instrument pointed at a signal near its own noise floor. Nothing here is a recommendation to buy or sell anything.

Important disclosures

Research and information only. Not investment advice, not a recommendation to buy or sell any security, and not an offer or solicitation. Past performance does not indicate future results. Sensaro is not a registered investment adviser or broker-dealer. Nothing here is tailored to your circumstances, and no advisory or fiduciary relationship is created by using this service.

Backtests and the trade calculator show hypothetical results based on trades selected in hindsight. They do not represent actual trading and could not have been achieved in advance. All investing involves risk, including loss of principal.

Read the full disclosures →

← back to the dashboard · generated 2026-08-02T21:01:59+00:00