news-reaction-failure-analyzer
tradermonty/claude-trading-skills
Confirm whether a crowded market failed to react to favorable news using statistically validated drift analysis.
What is news-reaction-failure-analyzer?
Step 2 of Jason Shapiro's COT contrarian process: determines if a crowded-long or crowded-short market failed to react significantly to news that should have rewarded the crowd. Uses a drift-significance test (not naive failure ratios) to avoid false confirmations on random noise, producing a fail-closed CONFIRMED / NOT_CONFIRMED / INSUFFICIENT_EVIDENCE verdict.
- Consumes a cot-contrarian-detector report or explicit direction plus curated events JSON to identify crowded markets
- Fetches underlying price series with documented fallback chain (futures → ETF proxy) and handles restricted/missing data gracefully
- Computes z-scores and drift statistics per event, clustering overlapping 3-trading-day windows to guard independence
- Applies statistically validated drift-significance test with Monte-Carlo-verified null false-positive bound (<8% under i.i.d. noise)
- Produces fail-closed verdict with aggregate stats, per-event evidence table, and dropped-events reasoning
- Generates both JSON and Markdown reports with proxy-usage caveats and methodology footnotes
How to install news-reaction-failure-analyzer
npx skills add https://github.com/tradermonty/claude-trading-skills --skill news-reaction-failure-analyzer- FMP API Key (set FMP_API_KEY environment variable or pass --api-key)
- Python 3.9+ with requests library installed
- WebSearch access to curate events JSON (skill degrades gracefully without it, states limitation)
- Optional: cot-contrarian-detector JSON report for auto-resolving symbol and direction, or explicit --symbol and --direction flags
How to use news-reaction-failure-analyzer
- 1.Obtain symbol and direction: either from a cot-contrarian-detector report (--detector-json) or supply --symbol and --direction explicitly
- 2.Curate events JSON via WebSearch using the 4-tier source hierarchy (issuer/primary → SEC/official → wire → portal); populate event, event_time (ISO8601 UTC), source_url, source_tier, and expected_impact (BULLISH/BEARISH)
- 3.Run the CLI: python3 scripts/analyze_news_reaction.py --symbol B6 --detector-json reports/cot_crowding.json --events-json reports/nrf_events.json --output-dir reports/
- 4.Review the JSON and Markdown reports: verdict (CONFIRMED/NOT_CONFIRMED/INSUFFICIENT_EVIDENCE), aggregate stats (drift_stat, responded_ratio), evidence table, and proxy caveats
- 5.Emit handoff block for contrarian-setup-gate if verdict is CONFIRMED; proceed to price-action confirmation (step 3) before entry
Use cases
- Confirm whether a crowded-long market shrugged off bullish news, indicating the crowd may have exhausted buying power
- Check if a crowded-short market failed to sell off on bearish news, suggesting short-covering risk
- Run Shapiro step 2 on a CROWDED_LONG or CROWDED_SHORT classification from cot-contrarian-detector
- Validate news-failure patterns in macro-crowding or post-earnings-announcement-drift (PEAD) scenarios
- Handoff confirmed setups to price-action confirmation (step 3) and entry/exit planning (steps 4–5)
- Contrarian traders using Jason Shapiro's COT-based methodology
- Quantitative researchers validating crowding-based market anomalies
- Macro traders checking whether consensus positions have run out of fuel
- Traders combining COT data with event-driven analysis for setup confirmation
news-reaction-failure-analyzer FAQ
Under pure noise, ~69% of individual events fail to respond by chance, so a naive failure-ratio rule would false-confirm 48–83% of the time depending on sample size. This skill instead requires the market to have moved significantly *against* the crowd's favorable news using a drift-significance test with a hard-verified null false-positive bound (<8%).
The skill states the limitation explicitly and never fabricates events or URLs. It proceeds only if the user accepts an INSUFFICIENT_EVIDENCE result (reason: no_events_provided); the CLI always exits 0 with a documented reason, never crashes.
Yes. Supply --symbol and --direction explicitly to override the detector requirement. A NEUTRAL classification or missing symbol in the detector report will refuse fail-closed unless you provide an explicit --direction override.
CONFIRMED is step 2 of 5 in the Shapiro process — it confirms news-failure evidence only. Price-action confirmation (step 3), entry (step 4), and exit (step 5) are still manual and required before any position. CONFIRMED is not a trade signal.
When futures data is restricted (402 error) or unavailable, the skill falls back to an ETF proxy and notes this in run_context.proxy_used. The report documents the tracking-error caveat; proxy-based reactions are approximate, not exact.
Full instructions (SKILL.md)
Source of truth, from tradermonty/claude-trading-skills.
name: news-reaction-failure-analyzer description: Judge whether a market FAILED to react to news favorable to a crowded speculative position — step 2 of Jason Shapiro's COT contrarian process. Consumes a cot-contrarian-detector report (or an explicit direction) plus a Claude-curated events JSON, fetches the underlying price series with a documented fallback chain, and produces a fail-closed CONFIRMED / NOT_CONFIRMED / INSUFFICIENT_EVIDENCE verdict using a statistically validated drift-significance test (not a naive failure-ratio, which false-confirms on pure noise). Generic beyond COT — reusable for PEAD and macro-crowding news-failure checks. Use when the user asks to check news-failure confirmation, whether a crowded market "shrugged off" good/bad news, or wants to run Shapiro step 2 on a CROWDED_LONG/CROWDED_SHORT market.
News Reaction Failure Analyzer
Overview
Implements step 2 of Jason Shapiro's COT contrarian process: once a market
is flagged as crowded (cot-contrarian-detector, step 1), check whether it
FAILED to react to news that should have rewarded the crowd. A crowded-long
market that doesn't rally on genuinely bullish news, or a crowded-short
market that doesn't sell off on genuinely bearish news, is the core
behavioral tell that the crowd has run out of buying/selling power — this
is the confirmation step that turns "crowded" into a contrarian setup
candidate (steps 3-5, still manual: price-action confirmation, entry, exit).
Why this isn't a naive failure-ratio check: an earlier design flagged
"news failure" whenever fewer than half the relevant events "responded" —
but under pure noise, roughly 69% of individual events fail to respond by
chance, so that rule would CONFIRM on random noise 48-83% of the time
depending on sample size. This skill instead requires the market to have
moved significantly against the crowd's favorable news (a drift-
significance test with a Monte-Carlo-verified null false-positive bound),
never merely "didn't respond enough." See
references/news-failure-patterns.md for the full statistical rationale.
When to Use This Skill
English:
- "Did the market shrug off [event] even though [asset] is crowded long/short?"
- "Run a news-failure check on [symbol]"
- "Is [symbol] confirmed for a Shapiro-style contrarian setup?"
- After
cot-contrarian-detectorflags a market CROWDED_LONG / CROWDED_SHORT and the user wants to move to step 2
Japanese:
- 「この市場は好材料に反応しなかった?」
- 「COTで偏っているこの銘柄のニュース失敗を確認して」
Do NOT use when:
- The market isn't crowded (NEUTRAL classification) — this skill refuses
fail-closed without an explicit
--directionoverride - No curated events JSON exists yet — WebSearch must run first (Phase 2 below); never fabricate events or URLs to get a verdict
Prerequisites
- FMP API Key: Required. Set
FMP_API_KEYor pass--api-key. Used for price data only (stable/historical-price-eod/light) — coverage varies by symbol; seereferences/price-source-map.md. - Python 3.9+ with
requestsinstalled. - WebSearch access to curate the events JSON (Phase 2). Skill degrades gracefully without it (states the limitation; never fabricates events).
- Optional: a
cot-contrarian-detectorJSON report (--detector-json) to auto-resolve symbol + direction, or supply--directionexplicitly.
Workflow
Phase 1: Obtain symbol + direction
From a cot-contrarian-detector report (--detector-json, symbol looked
up in markets[]) or directly from the user (--symbol + --direction).
A NEUTRAL classification, a symbol missing from the report, or a report
older than --max-detector-age-days (default 10) all refuse fail-closed
with a specific reason — only an explicit --direction overrides.
Phase 2: Curate the events JSON via WebSearch
Search news in the evaluation window (--window-days, default 10) using
the 4-tier source hierarchy (issuer/primary → SEC/official stats → wire →
portal — see references/news-failure-patterns.md). Write findings into
an events JSON from references/news-failure-patterns.md's template —
event, event_time (ISO8601 with explicit UTC offset), source_url,
source_tier, expected_impact (BULLISH/BEARISH) per event.
Never fabricate events or URLs. WebSearch unavailable → state it
explicitly; proceed without an events JSON only if the user accepts an
INSUFFICIENT_EVIDENCE result (reason no_events_provided) — the CLI
never raises an exception for a missing events file, it always exits 0
with a documented reason.
Phase 3: Run the CLI
python3 skills/news-reaction-failure-analyzer/scripts/analyze_news_reaction.py \
--symbol B6 --detector-json reports/cot_crowding_2026-07-12.json \
--events-json reports/nrf_events_B6_2026-07-12.json \
--output-dir reports/
The script fetches the price series (documented fallback chain — futures
symbol first, ETF proxy if 402/restricted or rows == 0; see
references/price-source-map.md), computes effective dates / returns /
z-scores per event, clusters events whose 3-trading-day windows overlap
(independence guard), and synthesizes the verdict.
Phase 4: Present verdict + handoff
Present the verdict, aggregate stats (drift_stat, responded_ratio), and
the evidence table (per-event returns/z-scores/reaction labels, with any
dropped_events reasons shown — never silently hidden). If a proxy
(run_context.proxy_used) was used, note the tracking-error caveat.
Emit a handoff block for contrarian-setup-gate (#241, not yet built):
{"news_failure": {"verdict": "CONFIRMED", "confidence": "HIGH", "report_path": "reports/nrf_B6_2026-07-12.json"}}
Output
- JSON:
reports/nrf_<symbol>_<as-of-date>.json—schema_version,symbol,direction,expected_direction,actual_reaction(FAILED_TO_RALLY/FAILED_TO_SELL_OFF/RALLIED/SOLD_OFF/MIXED_REACTION/NO_DATA),verdict,confidence,relevant_events_used,aggregate(mean_z3/drift_stat/responded_ratio),evidence[],dropped_events[],run_context. - Markdown:
reports/nrf_<symbol>_<as-of-date>.md— human-readable verdict, aggregate stats, evidence table, dropped-events table, proxy caveat (if used), and methodology footnote.
Guardrails
- CONFIRMED is not a trade signal. It confirms step 2 of 5 — price- action confirmation (step 3), entry (step 4), and exit (step 5) are still manual and still required before any position.
- INSUFFICIENT_EVIDENCE never advances the pipeline. Fewer than
--min-events(default 3) usable relevant event clusters, a missing detector report, or a detector vintage (data_date) that's missing, unparsable, dated after--as-of, or older than--max-detector-age-days(stale), aNEUTRALclassification without an explicit override, or no working price source all produce this verdict — never a crash, never a forced call on inadequate data. - COT publication lag. COT data is 3-9 days old by the time it's read
(see
cot-contrarian-detector); news-failure evidence should be read in that context, not as same-day confirmation. - Counter-direction events are context only — shown in the evidence
table but excluded from the verdict (only events whose
expected_impactmatches the crowd'sexpected_directioncount). - Proxy-based prices are noted, not hidden. When an ETF proxy was used
(
run_context.proxy_used), the report says so — tracking error, expense drag, and roll-timing differences make the reaction-direction read approximate, not exact. - Residual statistical risk under extreme correlation. The verdict's
null false-CONFIRMED rate is hard-verified under i.i.d. noise (<8%) and
under a realistic residual-correlation stress (AR(1) ρ=0.1, <10%). Under
an intentionally extreme correlation stress (lag-1 ρ=0.3 across
non-clustered event windows — roughly 10x liquid-futures empirical
autocorrelation), the measured null rate rises to ~11-13%. This is a
documented v1 limitation, not a silent gap — see
references/news-failure-patterns.mdfor the full numbers. Users who want the stricter <10% margin even under that stress can pass--drift-z 1.75(at the cost of missing some genuine news-failure signals, not just noise). - Not investment advice. Research/educational purposes only.
Resources
references/news-failure-patterns.md
Full methodology: what qualifies as a relevant event, the 4-tier source hierarchy, worked examples, the events-JSON curation guide + template, and the verdict-threshold rationale (why drift-significance, not a naive ratio; the Monte-Carlo-verified null bounds).
references/price-source-map.md
Per-market price-source fallback chain, verified/402/0-rows status (live-
probed at implementation time), ETF-proxy caveats, and markets with no
viable source (documented no_price_source cases: VX, ZQ, HO, all agri on
this key).
When to Load References
- First use / explaining the methodology: Load
references/news-failure-patterns.md - Explaining why a market has no verdict (no_price_source): Load
references/price-source-map.md - Regular execution: References not needed for the CLI itself — needed for Phase 2 (events curation) and for explaining results to the user
Related skills
More from tradermonty/claude-trading-skills and the wider catalog.

options-strategy-advisor
Analyze options strategies with Black-Scholes pricing, Greeks, and P/L simulation for education and risk management.

pair-trade-screener
Identify statistical arbitrage opportunities by detecting cointegrated stock pairs and analyzing mean-reversion spreads.

parabolic-short-trade-planner
Screen US equities for parabolic exhaustion patterns and generate conditional pre-market short plans with intraday trigger detection.

pead-screener
Screen post-earnings gap-up stocks for PEAD patterns using weekly candle analysis.

portfolio-manager
Analyze and rebalance investment portfolios using real-time Alpaca brokerage data.

position-sizer
Calculate optimal share counts for long stock trades using risk-based position sizing methods.