Research note
Does sentiment lead prices?
We turned news tone and prediction-market odds into price-like series and tested whether they tell you what tech stocks do next, using only what was known at the time.
The idea
Traders talk about sentiment as if it were a price: it rises, falls, trends and spikes. We built it that way. Every story about a stock gets a tone from −1 to +1. Those tones feed a running line that decays over hours, with bad news fading more slowly than good news, and more weight on widely reported stories. From that line we take the same things a chart reader takes from price: the level, its change over an hour and a day, a fast-minus-slow trend, how spread out the opinions are, how busy the news is against the usual for that time of day, and where today sits against the stock's own last 60 days.
Prediction markets get the same treatment. A Kalshi question such as next month's CPI is a ladder of contracts ("above 0.2%", "above 0.3%"…). Their prices are a probability distribution, so each day gives one expected value, and its daily change can be scored against its own history.
Then the only question that matters: does any of it tell you what price does next?
News sentiment
News tone tracks the price move it describes. It does not tell us where price goes next.
Each trading day at 3:30 PM ET we rank the nine stocks by their sentiment reading and compare that ranking with each stock's return against QQQ. The same-day match is strong and steady in both halves of the period (best: Level vs own 60 days, t +6.9). The next-day and next-week match is flat: the largest lead anywhere, daily or intraday, is t -1.6, which is noise. Put simply, stories are written about moves that already happened.
Bars show the average rank correlation per day across nine stocks (−1 to +1). Labels give the t-statistic; we call a result clear at |t| ≥ 3 with both halves agreeing, weak at |t| ≥ 2.
Sorted into fifths by "level vs own 60 days"
The most negative fifth fell -47 bp against QQQ that day and the most positive rose +86 bp. The next day shows no ordering: +16 bp, +6 bp, +19 bp, -3 bp, +25 bp from most negative to most positive.
Inside the day (15-minute readings, next hour)
| Reading | Test | Avg corr | t | Times | Result |
|---|---|---|---|---|---|
| Sentiment level | leads next hour | -0.004 | -0.7 | 7,566 | none |
| Sentiment level | follows past hour | -0.005 | -0.8 | 7,569 | none |
| Level vs own 60 days | leads next hour | -0.010 | -1.5 | 7,535 | none |
| Level vs own 60 days | follows past hour | -0.008 | -1.3 | 7,535 | none |
| 1-hour change | leads next hour | +0.001 | +0.1 | 7,561 | none |
| 1-hour change | follows past hour | -0.003 | -0.4 | 7,563 | none |
| New-story tone this bar | leads next hour | +0.002 | +0.3 | 2,229 | none |
| New-story tone this bar | follows past hour | +0.002 | +0.3 | 2,127 | none |
| News volume vs usual | leads next hour | +0.002 | +0.4 | 7,447 | none |
| News volume vs usual | follows past hour | +0.005 | +1.1 | 7,447 | none |
Nothing leads the next hour. The readings also fail to follow the past hour, because historical stories are only counted an hour after publication, so a story about the last hour's move usually lands in the next hour.
Events
Analyst upgrades keep working after the open. Earnings beats and positive news bursts fade.
Each dot is the average move against QQQ in the event's own direction, from the first 15-minute bar after the event was public; for after-hours news that means the next open, so the overnight gap is excluded. Lines are 95% intervals. A dot above zero means price kept going the way the event pointed; below zero means it reversed.
Next day -18 bp in the event's direction, right 46% of the time.
Next day -27 bp in the event's direction, right 51% of the time.
Next day +104 bp in the event's direction, right 60% of the time.
Next day -125 bp in the event's direction, right 33% of the time.
Next day -130 bp in the event's direction, right 46% of the time.
Next day +105 bp in the event's direction, right 50% of the time.
Scheduled macro days (CPI, jobs, Fed): QQQ moved 0.92% on average across 57 macro days and 0.85% on 289 other days (t +0.6). They were not noticeably bigger days.
Prediction markets
The odds form clean expected-value lines. Day to day they do not lead the market. Sharp moves in some lines are worth testing on new data.
Each Kalshi question is a ladder of contracts ("CPI above 0.3%", "above 0.4%"…). Their prices form a probability distribution, so each day gives one expected value. The line follows the next unresolved event and its daily change is scored against its own last 60 changes (z). Snapshots are taken before 3 PM ET; returns start at the 4 PM close. On days when expected inflation, unemployment or recession odds fell sharply, QQQ tended to rise the next day. Each of these groups holds 13 to 24 days and we looked at 24 groups, so one or two would clear the bar by chance alone. Treat this as a hypothesis for out-of-sample testing, not a result.
- Moves with QQQ same day
- t +0.3
- Leads QQQ next day
- t -1.4
- QQQ next day, bpdaysavg95% range
- after sharp rise18-60-111 to -8
- after sharp fall21+45-5 to +95
- any day+16
- Moves with QQQ same day
- t -1.4
- Leads QQQ next day
- t -0.8
- QQQ next day, bpdaysavg95% range
- after sharp rise23-19-64 to +21
- after sharp fall20+12-39 to +68
- any day+9
- Moves with QQQ same day
- t -1.1
- Leads QQQ next day
- t -1.6
- QQQ next day, bpdaysavg95% range
- after sharp rise17-10-63 to +39
- after sharp fall19+61+20 to +106
- any day+10
- Moves with QQQ same day
- t +2.0
- Leads QQQ next day
- t -0.4
- QQQ next day, bpdaysavg95% range
- after sharp rise19+3-68 to +81
- after sharp fall17+20-35 to +74
- any day+9
- Moves with QQQ same day
- t -0.8
- Leads QQQ next day
- t -0.9
- QQQ next day, bpdaysavg95% range
- after sharp rise15-23-68 to +19
- after sharp fall13+102+27 to +177
- any day+7
- Moves with QQQ same day
- t -2.4
- Leads QQQ next day
- t +1.3
- QQQ next day, bpdaysavg95% range
- after sharp rise24-23-100 to +43
- after sharp fall19+65+21 to +110
- any day+10
Tweets
Not testable yet.
Tweet tone is scored with a locally run language model, and recording has only just started. Unlike news, tweets cannot be reliably backfilled, so the same tests need a few months of live history. A sizeable share of stock-tagged posts are templated promotion (group invitations, "follow this trader"), so filtering them out comes before any measurement.
Takeaways
- Sentiment measured this way is a good description of what just happened and a poor forecast of what happens next. Using it as a buy or sell signal on its own would mostly mean chasing moves that are already in the price.
- It is more useful as context. Knowing that a move came with a burst of positive coverage, and that such moves tended to give a little back, is information a price chart alone does not carry.
- The event patterns (upgrade drift, earnings-beat fade) are consistent with well-known effects, but on a few dozen cases each they need fresh data before anyone should trust them.
- Most published sentiment "signals" are tested in ways that quietly use information from after the fact. Being strict about timing removed almost all of the apparent edge here, which is the result worth taking away.
Data and method
Universe. Nine large technology stocks (AAPL, AMD, AMZN, GOOGL, META, MSFT, MU, NVDA, TSLA) and QQQ. Stock results are measured against QQQ so that market-wide moves cancel out.
News. 346 trading days (2025-06-02 to 2026-10-15), with tone tags from Polygon.io. Each story counts only from the moment it was public; for historical stories that is one hour after publication. Daily readings are taken at 3:30 PM ET and compared with returns that start at the 4 PM close. Intraday readings (8,949 fifteen-minute points) are compared with the following hour within the same session.
Events. 809 signed events: analyst upgrades and downgrades, earnings results against estimates, and news bursts (at least three times the usual coverage from several publishers, with one-sided tone). Returns start at the first fifteen-minute bar after the event was public, so after-hours news is measured from the next open and the overnight gap is excluded.
Prediction markets. Kalshi hourly prices since 2024 for the Fed rate and decision, CPI, payrolls, unemployment and recession questions, sampled before 3 PM ET on trading days. The line follows the next unresolved event, and changes are never taken across a switch from one event to the next.
Statistics. Spearman rank correlations, Newey-West standard errors where return windows overlap, and 2,000-draw bootstrap intervals for events. A result counts as clear at |t| ≥ 3 with both halves of the sample agreeing. No trading costs are included. Many tests were run, so isolated results near the threshold should be expected by chance.