{"question":"Does the sentiment score lead, coincide with, or lag price?","method":"Hourly change in average_compound vs hourly log return (Coinbase SYMBOL-USD candles), cross-correlation at offsets -12h..+12h. Positive offset = price moves after sentiment (sentiment leads). Significance uses a Bonferroni-corrected threshold across all 25 offsets. Only readings from the 72-hour, recency-weighted window (window 72h-hl24, 2026-10-04 on) are used, with the weighted score. Script: scripts/leadlag.py --window-only --score weighted. Hours whose reading had no matched headlines (sample_size 0) are excluded, not scored as neutral; dropping an hour also drops the hourly changes into and out of it.","honest_prior":"Scored from published news headlines, so the expectation is coincident-to-lagging. Results will be published here whatever they show.","methodology_changes":[{"date":"2026-10-03","change":"Headline matching changed from a substring test to whole-word, case-insensitive matching of the ticker, the coin name and per-coin aliases (for example \"Ether\" for ETH). Tickers that are ordinary words (LINK, DOT, NEAR, PUMP, HYPE, TAO) count only as \"$TICKER\" or by name, and HTML tags in feed descriptions are ignored when matching.","before":"Readings before 2026-10-03, and any made that day before the change was deployed, used substring matching, which counted words like \"whether\", \"Tether\" and \"together\" as ETH and \"solution\" as SOL. In a 224-headline sample on 2026-10-03, 16 of 47 ETH matches, 8 of 63 BTC, 8 of 15 SOL and 8 of 9 LINK were false.","effect_on_validation":"Hourly readings now record which matcher produced them. Lead/lag results are computed only from whole-word readings (scripts/leadlag.py --whole-word-only), so the two methods are never mixed in one window. First results are expected 14 days after the change is deployed.","applies_to":"Every score: on-demand calls, alerts, the hourly log and the daily dataset."},{"date":"2026-10-04","change":"The score now covers only headlines published in the last 72 hours, and each headline's weight halves for every 24 hours of age. average_compound and the label use the weighted average; the unweighted 72-hour average, the effective sample size and the newest headline's age are returned alongside. With an effective sample size below 5 the label is \"insufficient recent news\". Headlines with no parseable publish date are left out (none of the 224 items fetched on 2026-10-04 lacked one). DL News was removed as a source. Method version: 72h-hl24.","before":"Before 2026-10-04 the score was a plain average over every item the feeds held, up to 30 per outlet, however old. On 2026-10-04 only about 1 in 7 matched headlines was from the last 24 hours, and DL News's feed was serving only items from April-May 2026 (8 of 55 BTC headlines), so months-old news was being scored as current. With nothing new published overnight, readings stayed identical for hours.","effect_on_validation":"Hourly rows record the window version (window = \"72h-hl24\"; null on earlier rows) and the unweighted 72-hour score. Lead/lag results use only window rows (scripts/leadlag.py --window-only --score weighted), so the old and new methods are never mixed.","applies_to":"Every score: on-demand calls, alerts, the hourly log and the daily dataset."},{"date":"2026-10-21","change":"Headline text is cleaned before it is matched to coins and scored: HTML tags are stripped and entities decoded in the feed description, feed footers (\"The post ... appeared first on ...\", \"This post ... first appeared on ...\", \"Read the full story on ...\") are dropped, the outlet's own name is removed from the description, and a description that opens by repeating the title starts after it. The score is VADER plus the crypto lexicon on the title plus the cleaned description (first 500 characters, as before). The lexicon's multi-word entries (\"bull run\", \"rug pull\") now count: VADER looks words up one at a time, so they never matched. No lexicon words or valences changed. Window and weighting are unchanged. Method version: 72h-hl24-v2.","why":"Feed HTML and boilerplate were being scored and matched as if they were news. Bitcoin Magazine's descriptions carry an image tag with style=\"display: block\" (VADER scores \"block\" -1.9) and repeat the title twice, so on 2026-10-21 \"Bitcoin Nears $85,000 as SpaceX Earnings Reignite Risk Appetite\" scored -0.73 (the title alone scores -0.27), and 7 of the 10 Bitcoin Magazine items fetched that day carried that -1.9. The outlet's byline \"Bitcoin Magazine\" also counted as a mention of bitcoin, so 3 of the 10 Bitcoin Magazine items fetched that day matched BTC without mentioning it.","effective":"From the deploy of method 72h-hl24-v2 on 2026-10-21. Hourly rows record which method produced them (window = \"72h-hl24-v2\" from the deploy, \"72h-hl24\" before it).","effect_on_validation":"Results are computed and reported separately per method version and never mixed in one window: scripts/leadlag.py --window 72h-hl24 (the same rows as --window-only) or --window 72h-hl24-v2. The 2026-10-17 first look and the 2026-11-03 update cover 72h-hl24 rows only. Stored readings are not rescored: the archive keeps headline titles and links but not the descriptions the old method scored.","applies_to":"Every score: on-demand calls, alerts, the hourly log and the daily dataset."},{"date":"2026-11-03","change":"Lead/lag results exclude hours whose reading had no matched headlines (sample_size 0) instead of treating them as a neutral score. In the 72h-hl24 window (2026-10-04 to 2026-10-21) no such hours occurred for BTC, ETH, XRP or SOL, so the 2026-11-03 update is unaffected by the rule.","effect_on_validation":"The Bonferroni-corrected bar (3.09 / sqrt(n), 25 offsets) is computed from the hours actually paired after the exclusion: 427 in the 2026-11-03 update, a bar of 0.150. Method 72h-hl24-v2 (rows from 2026-10-22) is tested separately and never mixed with 72h-hl24; its full test is due around 2026-11-18, and no 72h-hl24-v2 numbers are published before then.","applies_to":"Lead/lag validation only. Scores, alerts, the hourly log and the daily dataset are unchanged."}],"updated":"2026-11-03T17:00:00+00:00","next_update":"2026-11-18","first_look_summary":"2026-11-03 update: across all 428 hours scored with method 72h-hl24 (2026-10-04 to 2026-10-21), hourly changes in the score for BTC, ETH, XRP and SOL show no clear lead or lag at the hourly level: no offset from -12h to +12h clears the corrected bar of 0.150 (strongest |r| = 0.116, SOL at +2h). This matches the 2026-10-17 first look (strongest |r| = 0.148; the bar was about 0.17). The current method, 72h-hl24-v2, is being tested separately, with a full test due around 2026-11-18. Read the score as a fast, sourced summary of what the news says, not a price signal.","symbols":{"BTC":{"status":"measured","verdict":"no_significant_relationship","summary":"No clear lead or lag at the hourly level. No offset from -12h to +12h clears the Bonferroni-corrected bar of 0.1495 (largest: r = +0.1082 at +8h).","window_start":"2026-10-04T04:00:00+00:00","window_end":"2026-10-21T23:00:00+00:00","paired_hours":427,"readings":"window 72h-hl24 only","score":"weighted (average_compound)","offsets":[{"offset_hours":-12,"n":427,"corr":-0.0343,"band_95":0.0949,"significant":false},{"offset_hours":-11,"n":427,"corr":0.019,"band_95":0.0949,"significant":false},{"offset_hours":-10,"n":427,"corr":0.0333,"band_95":0.0949,"significant":false},{"offset_hours":-9,"n":427,"corr":-0.0405,"band_95":0.0949,"significant":false},{"offset_hours":-8,"n":427,"corr":-0.0292,"band_95":0.0949,"significant":false},{"offset_hours":-7,"n":427,"corr":0.0247,"band_95":0.0949,"significant":false},{"offset_hours":-6,"n":427,"corr":-0.0203,"band_95":0.0949,"significant":false},{"offset_hours":-5,"n":427,"corr":0.0615,"band_95":0.0949,"significant":false},{"offset_hours":-4,"n":427,"corr":-0.0304,"band_95":0.0949,"significant":false},{"offset_hours":-3,"n":427,"corr":0.0172,"band_95":0.0949,"significant":false},{"offset_hours":-2,"n":427,"corr":0.0085,"band_95":0.0949,"significant":false},{"offset_hours":-1,"n":427,"corr":0.0221,"band_95":0.0949,"significant":false},{"offset_hours":0,"n":427,"corr":0.07,"band_95":0.0949,"significant":false},{"offset_hours":1,"n":427,"corr":-0.0584,"band_95":0.0949,"significant":false},{"offset_hours":2,"n":427,"corr":0.0192,"band_95":0.0949,"significant":false},{"offset_hours":3,"n":427,"corr":0.017,"band_95":0.0949,"significant":false},{"offset_hours":4,"n":427,"corr":-0.0589,"band_95":0.0949,"significant":false},{"offset_hours":5,"n":427,"corr":0.0253,"band_95":0.0949,"significant":false},{"offset_hours":6,"n":427,"corr":0.0009,"band_95":0.0949,"significant":false},{"offset_hours":7,"n":427,"corr":0.0186,"band_95":0.0949,"significant":false},{"offset_hours":8,"n":427,"corr":0.1082,"band_95":0.0949,"significant":false},{"offset_hours":9,"n":427,"corr":0.0199,"band_95":0.0949,"significant":false},{"offset_hours":10,"n":427,"corr":-0.0991,"band_95":0.0949,"significant":false},{"offset_hours":11,"n":427,"corr":-0.0089,"band_95":0.0949,"significant":false},{"offset_hours":12,"n":427,"corr":-0.0536,"band_95":0.0949,"significant":false}],"note":"Update of 2026-11-03 covering every 72h-hl24 reading (2026-10-04 to 2026-10-21, 428 hours; first look 2026-10-17 covered 329 paired hours). Method 72h-hl24-v2 (from 2026-10-22) is being tested separately; full test due around 2026-11-18.","hours_used":428,"hours_excluded_zero_headlines":0,"bonferroni_bar":0.1495,"peak":{"offset_hours":8,"corr":0.1082,"clears_bar":false}},"ETH":{"status":"measured","verdict":"no_significant_relationship","summary":"No clear lead or lag at the hourly level. No offset from -12h to +12h clears the Bonferroni-corrected bar of 0.1495 (largest: r = +0.1051 at +6h).","window_start":"2026-10-04T04:00:00+00:00","window_end":"2026-10-21T23:00:00+00:00","paired_hours":427,"readings":"window 72h-hl24 only","score":"weighted (average_compound)","offsets":[{"offset_hours":-12,"n":427,"corr":-0.0177,"band_95":0.0949,"significant":false},{"offset_hours":-11,"n":427,"corr":-0.0021,"band_95":0.0949,"significant":false},{"offset_hours":-10,"n":427,"corr":0.0597,"band_95":0.0949,"significant":false},{"offset_hours":-9,"n":427,"corr":0.0649,"band_95":0.0949,"significant":false},{"offset_hours":-8,"n":427,"corr":0.0834,"band_95":0.0949,"significant":false},{"offset_hours":-7,"n":427,"corr":0.0337,"band_95":0.0949,"significant":false},{"offset_hours":-6,"n":427,"corr":-0.0258,"band_95":0.0949,"significant":false},{"offset_hours":-5,"n":427,"corr":0.0142,"band_95":0.0949,"significant":false},{"offset_hours":-4,"n":427,"corr":-0.105,"band_95":0.0949,"significant":false},{"offset_hours":-3,"n":427,"corr":-0.0014,"band_95":0.0949,"significant":false},{"offset_hours":-2,"n":427,"corr":0.002,"band_95":0.0949,"significant":false},{"offset_hours":-1,"n":427,"corr":0.014,"band_95":0.0949,"significant":false},{"offset_hours":0,"n":427,"corr":-0.0036,"band_95":0.0949,"significant":false},{"offset_hours":1,"n":427,"corr":0.0335,"band_95":0.0949,"significant":false},{"offset_hours":2,"n":427,"corr":-0.038,"band_95":0.0949,"significant":false},{"offset_hours":3,"n":427,"corr":0.0029,"band_95":0.0949,"significant":false},{"offset_hours":4,"n":427,"corr":-0.0386,"band_95":0.0949,"significant":false},{"offset_hours":5,"n":427,"corr":-0.0279,"band_95":0.0949,"significant":false},{"offset_hours":6,"n":427,"corr":0.1051,"band_95":0.0949,"significant":false},{"offset_hours":7,"n":427,"corr":0.0707,"band_95":0.0949,"significant":false},{"offset_hours":8,"n":427,"corr":0.0369,"band_95":0.0949,"significant":false},{"offset_hours":9,"n":427,"corr":-0.0005,"band_95":0.0949,"significant":false},{"offset_hours":10,"n":427,"corr":-0.0454,"band_95":0.0949,"significant":false},{"offset_hours":11,"n":427,"corr":0.0145,"band_95":0.0949,"significant":false},{"offset_hours":12,"n":427,"corr":-0.0381,"band_95":0.0949,"significant":false}],"note":"Update of 2026-11-03 covering every 72h-hl24 reading (2026-10-04 to 2026-10-21, 428 hours; first look 2026-10-17 covered 329 paired hours). Method 72h-hl24-v2 (from 2026-10-22) is being tested separately; full test due around 2026-11-18.","hours_used":428,"hours_excluded_zero_headlines":0,"bonferroni_bar":0.1495,"peak":{"offset_hours":6,"corr":0.1051,"clears_bar":false}},"XRP":{"status":"measured","verdict":"no_significant_relationship","summary":"No clear lead or lag at the hourly level. No offset from -12h to +12h clears the Bonferroni-corrected bar of 0.1495 (largest: r = -0.1011 at +3h).","window_start":"2026-10-04T04:00:00+00:00","window_end":"2026-10-21T23:00:00+00:00","paired_hours":427,"readings":"window 72h-hl24 only","score":"weighted (average_compound)","offsets":[{"offset_hours":-12,"n":427,"corr":0.0813,"band_95":0.0949,"significant":false},{"offset_hours":-11,"n":427,"corr":-0.0395,"band_95":0.0949,"significant":false},{"offset_hours":-10,"n":427,"corr":0.0094,"band_95":0.0949,"significant":false},{"offset_hours":-9,"n":427,"corr":-0.0291,"band_95":0.0949,"significant":false},{"offset_hours":-8,"n":427,"corr":-0.0219,"band_95":0.0949,"significant":false},{"offset_hours":-7,"n":427,"corr":0.0602,"band_95":0.0949,"significant":false},{"offset_hours":-6,"n":427,"corr":-0.015,"band_95":0.0949,"significant":false},{"offset_hours":-5,"n":427,"corr":0.0032,"band_95":0.0949,"significant":false},{"offset_hours":-4,"n":427,"corr":-0.0056,"band_95":0.0949,"significant":false},{"offset_hours":-3,"n":427,"corr":0.0871,"band_95":0.0949,"significant":false},{"offset_hours":-2,"n":427,"corr":0.0602,"band_95":0.0949,"significant":false},{"offset_hours":-1,"n":427,"corr":-0.0668,"band_95":0.0949,"significant":false},{"offset_hours":0,"n":427,"corr":-0.0044,"band_95":0.0949,"significant":false},{"offset_hours":1,"n":427,"corr":-0.0599,"band_95":0.0949,"significant":false},{"offset_hours":2,"n":427,"corr":-0.0811,"band_95":0.0949,"significant":false},{"offset_hours":3,"n":427,"corr":-0.1011,"band_95":0.0949,"significant":false},{"offset_hours":4,"n":427,"corr":0.0795,"band_95":0.0949,"significant":false},{"offset_hours":5,"n":427,"corr":-0.0467,"band_95":0.0949,"significant":false},{"offset_hours":6,"n":427,"corr":-0.0131,"band_95":0.0949,"significant":false},{"offset_hours":7,"n":427,"corr":0.0147,"band_95":0.0949,"significant":false},{"offset_hours":8,"n":427,"corr":0.0498,"band_95":0.0949,"significant":false},{"offset_hours":9,"n":427,"corr":0.0256,"band_95":0.0949,"significant":false},{"offset_hours":10,"n":427,"corr":-0.0081,"band_95":0.0949,"significant":false},{"offset_hours":11,"n":427,"corr":0.0039,"band_95":0.0949,"significant":false},{"offset_hours":12,"n":427,"corr":-0.0392,"band_95":0.0949,"significant":false}],"note":"Update of 2026-11-03 covering every 72h-hl24 reading (2026-10-04 to 2026-10-21, 428 hours; first look 2026-10-17 covered 329 paired hours). Method 72h-hl24-v2 (from 2026-10-22) is being tested separately; full test due around 2026-11-18.","hours_used":428,"hours_excluded_zero_headlines":0,"bonferroni_bar":0.1495,"peak":{"offset_hours":3,"corr":-0.1011,"clears_bar":false}},"SOL":{"status":"measured","verdict":"no_significant_relationship","summary":"No clear lead or lag at the hourly level. No offset from -12h to +12h clears the Bonferroni-corrected bar of 0.1495 (largest: r = -0.1163 at +2h).","window_start":"2026-10-04T04:00:00+00:00","window_end":"2026-10-21T23:00:00+00:00","paired_hours":427,"readings":"window 72h-hl24 only","score":"weighted (average_compound)","offsets":[{"offset_hours":-12,"n":427,"corr":-0.0245,"band_95":0.0949,"significant":false},{"offset_hours":-11,"n":427,"corr":0.0575,"band_95":0.0949,"significant":false},{"offset_hours":-10,"n":427,"corr":-0.0657,"band_95":0.0949,"significant":false},{"offset_hours":-9,"n":427,"corr":-0.0081,"band_95":0.0949,"significant":false},{"offset_hours":-8,"n":427,"corr":0.0121,"band_95":0.0949,"significant":false},{"offset_hours":-7,"n":427,"corr":0.0088,"band_95":0.0949,"significant":false},{"offset_hours":-6,"n":427,"corr":-0.0953,"band_95":0.0949,"significant":false},{"offset_hours":-5,"n":427,"corr":0.0037,"band_95":0.0949,"significant":false},{"offset_hours":-4,"n":427,"corr":-0.006,"band_95":0.0949,"significant":false},{"offset_hours":-3,"n":427,"corr":-0.0392,"band_95":0.0949,"significant":false},{"offset_hours":-2,"n":427,"corr":0.0311,"band_95":0.0949,"significant":false},{"offset_hours":-1,"n":427,"corr":-0.0419,"band_95":0.0949,"significant":false},{"offset_hours":0,"n":427,"corr":-0.024,"band_95":0.0949,"significant":false},{"offset_hours":1,"n":427,"corr":-0.068,"band_95":0.0949,"significant":false},{"offset_hours":2,"n":427,"corr":-0.1163,"band_95":0.0949,"significant":false},{"offset_hours":3,"n":427,"corr":0.0353,"band_95":0.0949,"significant":false},{"offset_hours":4,"n":427,"corr":0.0428,"band_95":0.0949,"significant":false},{"offset_hours":5,"n":427,"corr":-0.0134,"band_95":0.0949,"significant":false},{"offset_hours":6,"n":427,"corr":0.0614,"band_95":0.0949,"significant":false},{"offset_hours":7,"n":427,"corr":0.0026,"band_95":0.0949,"significant":false},{"offset_hours":8,"n":427,"corr":-0.0034,"band_95":0.0949,"significant":false},{"offset_hours":9,"n":427,"corr":-0.0352,"band_95":0.0949,"significant":false},{"offset_hours":10,"n":427,"corr":0.0337,"band_95":0.0949,"significant":false},{"offset_hours":11,"n":427,"corr":0.0394,"band_95":0.0949,"significant":false},{"offset_hours":12,"n":427,"corr":-0.0325,"band_95":0.0949,"significant":false}],"note":"Update of 2026-11-03 covering every 72h-hl24 reading (2026-10-04 to 2026-10-21, 428 hours; first look 2026-10-17 covered 329 paired hours). Method 72h-hl24-v2 (from 2026-10-22) is being tested separately; full test due around 2026-11-18.","hours_used":428,"hours_excluded_zero_headlines":0,"bonferroni_bar":0.1495,"peak":{"offset_hours":2,"corr":-0.1163,"clears_bar":false}}}}