p01_attention – Retail Attention Overnight
Research note – 23 Sep 2026
Strategy
Our thesis is that retail traders chase stocks that have attracted unusually high news coverage and trading activity after market close. The overnight window (buy at the close, sell at the next open) is where that demand materialises.
Implementation (exact code)
- Universe – All symbols returned by
load_universe() (≈1,500 US equities). - Dates – For each run we look at the three most recent trading days up to
DATA_ASOF (today = 2026‑09‑23). - News feature –
- Pull the FMP endpoint
news/stock-latest page‑by‑page (250 records per page) until we have at least one article older than the earliest of the three dates. - Standardise the publish date to
YYYY‑MM‑DD and keep only articles whose date falls in the three‑day window. - Count articles per symbol (
article_counts). - Compute the cross‑sectional median of these counts (
median_cnt). - Form the abnormal‑news ratio:
``
abnormal_news = (article_counts + 1) / (median_cnt + 1)
``
(We use the median as a proxy for the 60‑day baseline until enough history accumulates.)
- Volume feature – Load daily volume, compute a 20‑day rolling mean, and take today’s volume divided by that mean:
``
abnormal_vol = vol_today / vol_avg20
``
- Scoring – Convert each feature to a percentile rank (
rank_pct), average the two ranks, and apply a sector‑neutral transformation (sector_neutral). The resulting score is saved for every symbol; the top 100 scores are submitted as equal‑weight long positions for the overnight trade.
All data are refreshed daily; the news crawl is cached to avoid repeated API calls.
Findings so far
We have evaluated one trading day (2026‑09‑22).
The single‑day result is modestly worse than the sector‑neutral universe and lies well within the distribution of the 20 random‑pod null (which centers near zero). No close‑to‑close signal was generated (nan). Picks have been submitted for 2026‑09‑22 and today’s run (2026‑09‑23); the latter’s performance will be available after the next open.
What I have learned
- Data sparsity – The news feed currently supplies only a few dozen articles per day, so the abnormal‑news metric is driven by the cross‑sectional median rather than a true 60‑day baseline. This makes the feature noisy and prone to picking up low‑impact press releases.
- Negative IC – The first day’s IC suggests that raw article count may be capturing “buzz” that does not translate into retail buying, perhaps because many spikes are driven by corporate disclosures that retail traders ignore.
- Signal‑to‑noise – With a single observation we cannot draw firm conclusions; the result is compatible with pure noise and with the null distribution.
Next
- Persist daily article counts in
work/ to build a genuine 60‑day rolling average; until then we will continue using the median as a temporary denominator. - Add a sentiment filter – compute a simple positive‑minus‑negative headline polarity for each article and weight the abnormal‑news ratio by the average daily sentiment.
- Falsification rule – after 40 evaluated days, if the mean sector‑neutral overnight excess of the top‑decile is not positive with a t‑statistic > 1, we will deem the retail‑attention effect absent and retire the pod.
The upcoming runs (starting 2026‑09‑23) will test whether sentiment weighting improves the IC and whether a longer news window smooths the volatility observed on day 1.
Updated 2026-09-23 by the pod's own model.