fix: stop boosting names because a headline already reported the move
Three independent tests over 2026-08-01+, all negative:
premarket news, any window 7.9% vs 8.6% ran >=50%
...controlling for PM range 11.3% vs 21.0% ran >=50%
intraday arrival, hour-matched 16.8% vs 24.6% ran >=10% forward
The feed explains it. Of 1,621 headlines delivered for screened names during
sessions: 61.7% reactive roundups ("Why X Shares Are Trading Higher", "20
Stocks Moving In..."), 2.7% law-firm spam, and 0.9% genuine catalyst PRs. The
wire reports the move after it happens, so a boost on "has a headline" buys the
late stage of a run. 11 of the 14 biggest runners (up to +912%) had no coverage
at all.
Set NEWS_RANK_BOOST to 1.0 (neutral). This also neutralises the binary fallback
restored in 9b4c8e5 -- correct in intent (a dead enrichment must not silently
disable news ranking) but it handed a flat 2x to any unclassified headline, and
62% of them are lagging roundups.
Deliberately unchanged:
- the LLM path. catalyst_score = conviction * max(0, sentiment), so a roundup
(type none, sentiment <= 0) scores 0 and earns nothing, while a real bullish
catalyst still lifts. It targets the 0.9% correctly.
- the dilution veto, which sinks confirmed offerings and is a separate,
sound mechanism.
- the enrichment-down alarm from 9b4c8e5.
Also evaluated and NOT shipped: halt-resumption as a catalyst feature. It is by
far the best signal in this universe -- a >=3min bar gap resuming >=2% up ran
>=25% afterwards 40-47% of the time vs ~11-20% baseline, holding in every hour
of the session. But a time-aware A/B of the armed set moved mean forward run
only 27.09% -> 27.84% and 165 -> 173 runners per 725 slots, because gap x rvol
already encodes it (a halting stock has high relative volume by definition).
Same collapse premarket range showed: strong univariate, near-zero marginal.
The ranking is saturated; selection is not where the remaining edge is.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2LepdJfPCfK5Q8uznjFBM
This commit is contained in:
1 parent
45b0386347
commit
4e0559501a
1 file changed
+12
-1
@@ -15,7 +15,18 @@ NEWS_ENRICH_INTERVAL_SECONDS=120
|
||||
NEWS_ENRICH_LOOKBACK_HOURS=12
|
||||
NEWS_FEEDS=prnewswire=https://www.prnewswire.com/rss/news-releases-list.rss,businesswire=https://feed.businesswire.com/rss/home/?rss=G1QFDERJXkJeGVtRWQ==,globenewswire=https://www.globenewswire.com/RssFeed/orgclass/1/feedTitle/GlobeNewswire%20-%20News%20about%20Public%20Companies
|
||||
NEWS_LOOKBACK_HOURS=8
|
||||
NEWS_RANK_BOOST=2.0
|
||||
# BLIND HEADLINE BOOST DISABLED (1.0 = neutral), 2026-09-14. Measured three ways
|
||||
# over 2026-08-01+: premarket news 7.9% vs 8.6% ran >=50%; controlling for premarket
|
||||
# range 11.3% vs 21.0%; and an hour-matched event study of intraday arrivals, 16.8%
|
||||
# vs 24.6% ran >=10% forward. News arrival predicts LOWER forward returns, every time.
|
||||
# The cause is the feed: of 1,621 headlines it delivered for screened names during
|
||||
# sessions, 61.7% were reactive roundups ("Why X Shares Are Trading Higher") and 0.9%
|
||||
# were genuine catalyst PRs. It reports the move after it happens, so boosting on it
|
||||
# buys the late stage. The LLM path is UNAFFECTED and stays on: catalyst_score is
|
||||
# conviction * max(0, sentiment), so a roundup scores 0 and earns no boost, while the
|
||||
# dilution veto still sinks confirmed offerings. Only the blind "has a headline" 2x
|
||||
# is removed. Restore by setting this to 2.0.
|
||||
NEWS_RANK_BOOST=1.0
|
||||
# Ollama lives on 11434 (the standard port). The stack pointed at 30068/4000 with
|
||||
# a model that was never pulled, so catalyst enrichment produced nothing from
|
||||
# 2026-08-03 to 2026-09-13 — silently, because enrich_recent_news reports failure
|
||||
|
||||
Reference in new issue
Block a user