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.
npx skills add https://github.com/tradermonty/claude-trading-skills --skill news-reaction-failure-analyzer
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.
English:
cot-contrarian-detector flags a market CROWDED_LONG / CROWDED_SHORTand the user wants to move to step 2
Japanese:
Do NOT use when:
fail-closed without an explicit --direction override
below); never fabricate events or URLs to get a verdict
FMP_API_KEY or pass --api-key. Usedfor price data only (stable/historical-price-eod/light) — coverage
varies by symbol; see references/price-source-map.md.
requests installed.gracefully without it (states the limitation; never fabricates events).
cot-contrarian-detector JSON report (--detector-json)to auto-resolve symbol + direction, or supply --direction explicitly.
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.
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.
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.
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"}}
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.
reports/nrf_<symbol>_<as-of-date>.md — human-readableverdict, aggregate stats, evidence table, dropped-events table, proxy
caveat (if used), and methodology footnote.
action confirmation (step 3), entry (step 4), and exit (step 5) are still
manual and still required before any position.
--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), a NEUTRAL classification without an
explicit override, or no working price source all produce this verdict
— never a crash, never a forced call on inadequate data.
(see cot-contrarian-detector); news-failure evidence should be read in
that context, not as same-day confirmation.
table but excluded from the verdict (only events whose expected_impact
matches the crowd's expected_direction count).
(run_context.proxy_used), the report says so — tracking error, expense
drag, and roll-timing differences make the reaction-direction read
approximate, not exact.
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.md for 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).
references/news-failure-patterns.mdFull 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.mdPer-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).
references/news-failure-patterns.md
references/price-source-map.md
for Phase 2 (events curation) and for explaining results to the user
Interact with Obsidian vaults using the Obsidian CLI to read, create, search, and manage notes, tasks, properties, and more. Also supports plugin and theme development with commands to reload plugins, run JavaScript, capture errors, take screenshots, and inspect the DOM. Use when the user asks to interact with their Obsidian vault, manage notes, search vault content, perform vault operations from the command line, or develop and debug Obsidian plugins and themes.
Comprehensive project architecture blueprint generator that analyzes codebases to create detailed architectural documentation. Automatically detects technology stacks and architectural patterns, generates visual diagrams, documents implementation patterns, and provides extensible blueprints for maintaining architectural consistency and guiding new development.
Securely inspect and automate microscopy data workflows against OMERO.server with omero-py, BlitzGateway, OMERO CLI, tables, annotations, ROIs, rendering, and documented OMERO.web APIs. Use for scoped OMERO inventory, metadata export, import/export planning, or reviewed write workflows.
Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's documented coding standards?) and Spec (does the code match what the originating issue/PRD asked for?). Runs both reviews in parallel sub-agents and reports them side by side. Use when the user wants to review a branch, a PR, work-in-progress changes, or asks to "review since X".
Master API documentation with OpenAPI 3.1, AI-powered tools, and modern developer experience practices. Create interactive docs, generate SDKs, and build comprehensive developer portals.
Creates comprehensive API changelogs documenting breaking changes, deprecations, and migration strategies for API consumers. Use when managing API versions, communicating breaking changes, or creating upgrade guides.
Master API documentation with OpenAPI 3.1, AI-powered tools, and modern developer experience practices. Create interactive docs, generate SDKs, and build comprehensive developer portals. Use PROACTIVELY for API documentation or developer portal creation.
Analyze fundamental data primitives, type systems, and state management patterns in a codebase. Use when (1) evaluating typing strategies (Pydantic vs TypedDict vs loose dicts), (2) assessing immutability and mutation patterns, (3) understanding serialization approaches, (4) documenting state shape and lifecycle, or (5) comparing data modeling approaches across frameworks.
Take tradermonty/news-reaction-failure-analyzer from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.