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.
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.
← back to the dashboard · generated 2026-08-02T21:01:59+00:00