PluginBench
Skill
Fail
Audit score 45

market-top-detector

tradermonty/claude-trading-skills

Detect market top probability in 2-8 weeks using O'Neil distribution days, Minervini deterioration, and defensive sector rotation.

What is market-top-detector?

Quantifies the probability of a market top formation using a 6-component scoring system (0-100) that integrates O'Neil Distribution Days, Minervini Leading Stock Deterioration, and Monty Defensive Sector Rotation. Focuses on tactical 2-8 week timing signals that precede 10-20% corrections, distinct from longer-term bubble detection.

  • Calculates composite 0-100 market top probability score with risk zone classification (Green/Yellow/Orange/Red/Critical)
  • Analyzes distribution day accumulation, leading stock health, and defensive sector rotation using FMP API data
  • Detects market breadth divergence by comparing 200DMA and 50DMA breadth percentages against index levels
  • Evaluates index technical condition including moving average structure, failed rallies, and lower highs
  • Assesses sentiment and speculation signals via VIX, Put/Call ratio, and term structure
  • Generates Markdown reports with historical pattern comparison and what-if sensitivity scenarios

How to install market-top-detector

npx skills add https://github.com/tradermonty/claude-trading-skills --skill market-top-detector
Prerequisites
  • FMP API key (free tier sufficient; ~33 calls per execution)
  • WebSearch access to collect S&P 500 breadth (50DMA %) and CBOE Put/Call ratio data
  • Python 3 environment with requirements.txt installed
  • Data from most recent 3 business days for accurate analysis (200DMA breadth auto-fetched; 50DMA breadth and Put/Call ratio require manual collection)
Claude Code
Cursor
Windsurf
Cline

How to use market-top-detector

  1. 1.Collect required breadth and sentiment data via WebSearch: S&P 500 50DMA breadth percentage and CBOE Equity Put/Call ratio (both from last 3 business days)
  2. 2.Optionally gather VIX term structure (steep_contango/contango/flat/backwardation) and FINRA margin debt YoY % if available
  3. 3.Execute the Python script with collected data: python3 market_top_detector.py --api-key $FMP_API_KEY --breadth-50dma [VALUE] --breadth-50dma-date [YYYY-MM-DD] --put-call [VALUE] --put-call-date [YYYY-MM-DD]
  4. 4.Review the generated Markdown report highlighting composite score, risk zone, strongest warning signal, and historical pattern comparison
  5. 5.Interpret risk zone (0-20 Green to 81-100 Critical) to guide position sizing and profit-taking decisions for the next 2-8 weeks

Use cases

Good for
  • Determine whether to reduce equity exposure when distribution days accumulate or defensive sectors outperform
  • Assess correction probability over the next 2-8 weeks when leading stocks break down while indices hold
  • Time profit-taking on weak positions when multiple top-formation signals align
  • Evaluate market risk before major portfolio decisions or new growth stock entries
  • Monitor tactical timing signals for 10-20% market corrections distinct from longer-term bubble risk
Who it's for
  • Active traders and portfolio managers timing tactical corrections
  • Swing traders managing 2-8 week market exposure
  • Risk managers assessing near-term equity market vulnerability
  • Investors deciding when to reduce or hedge growth stock positions
  • Quantitative analysts validating market top detection methodologies

market-top-detector FAQ

How does this differ from the Bubble Detector skill?

Market Top Detector focuses on 2-8 week tactical timing signals for 10-20% corrections using price/volume and breadth data. Bubble Detector evaluates multi-month bubble collapse risk (30%+) using valuation, sentiment, and social data.

What data freshness is required?

All manually collected data (50DMA breadth, Put/Call ratio) must be from the most recent 3 business days. The 200DMA breadth is auto-fetched from TraderMonty CSV. Stale data degrades analysis quality.

Can I run this without WebSearch data?

The script requires FMP API key and WebSearch-collected 50DMA breadth and Put/Call ratio. 200DMA breadth is auto-fetched. VIX term structure and margin debt are optional but improve accuracy.

What do the risk zones mean for portfolio action?

Green (0-20): normal operations. Yellow (21-40): tighten stops. Orange (41-60): profit-taking on weak positions. Red (61-80): aggressive profit-taking. Critical (81-100): maximum defense and hedging.

How often should I run this detector?

Run when user asks about market top risk, distribution days, defensive rotation, or equity exposure timing. Rerun every 3-5 trading days to track component changes and follow-through day status.

Full instructions (SKILL.md)

Source of truth, from tradermonty/claude-trading-skills.


name: market-top-detector description: Detects market top probability using O'Neil Distribution Days, Minervini Leading Stock Deterioration, and Monty Defensive Sector Rotation. Generates a 0-100 composite score with risk zone classification. Use when user asks about market top risk, distribution days, defensive rotation, leadership breakdown, or whether to reduce equity exposure. Focuses on 2-8 week tactical timing signals for 10-20% corrections.

Market Top Detector Skill

Purpose

Detect the probability of a market top formation using a quantitative 6-component scoring system (0-100). Integrates three proven market top detection methodologies:

  1. O'Neil - Distribution Day accumulation (institutional selling)
  2. Minervini - Leading stock deterioration pattern
  3. Monty - Defensive sector rotation signal

Unlike the Bubble Detector (macro/multi-month evaluation), this skill focuses on tactical 2-8 week timing signals that precede 10-20% market corrections.

When to Use This Skill

English:

  • User asks "Is the market topping?" or "Are we near a top?"
  • User notices distribution days accumulating
  • User observes defensive sectors outperforming growth
  • User sees leading stocks breaking down while indices hold
  • User asks about reducing equity exposure timing
  • User wants to assess correction probability for the next 2-8 weeks

Japanese:

  • 「天井が近い?」「今は利確すべき?」
  • ディストリビューションデーの蓄積を懸念
  • ディフェンシブセクターがグロースをアウトパフォーム
  • 先導株が崩れ始めているが指数はまだ持ちこたえている
  • エクスポージャー縮小のタイミング判断
  • 今後2〜8週間の調整確率を評価したい

Prerequisites

Required:

  • FMP API Key: Set $FMP_API_KEY environment variable or pass --api-key. Free tier sufficient (~33 API calls per execution).
  • WebSearch Access: Required to collect S&P 500 breadth (50DMA %) and CBOE Put/Call ratio data.

Optional:

  • Margin Debt Data: Enhances sentiment scoring but typically 1-2 months lagged.
  • VIX Term Structure: Auto-detected from FMP API if VIX3M quote available; manual override via --vix-term.

Data Freshness: All manually collected data should be from the most recent 3 business days for accurate analysis.

Difference from Bubble Detector

AspectMarket Top DetectorBubble Detector
Timeframe2-8 weeksMonths to years
Target10-20% correctionBubble collapse (30%+)
MethodologyO'Neil/Minervini/MontyMinsky/Kindleberger
DataPrice/Volume + BreadthValuation + Sentiment + Social
Score Range0-100 composite0-15 points

Execution Workflow

Phase 1: Data Collection via WebSearch

Before running the Python script, collect the following data using WebSearch. Data Freshness Requirement: All data must be from the most recent 3 business days. Stale data degrades analysis quality.

1. S&P 500 Breadth (200DMA above %)
   AUTO-FETCHED from TraderMonty CSV (no WebSearch needed)
   The script fetches this automatically from GitHub Pages CSV data.
   Override: --breadth-200dma [VALUE] to use a manual value instead.
   Disable: --no-auto-breadth to skip auto-fetch entirely.

2. [REQUIRED] S&P 500 Breadth (50DMA above %)
   Valid range: 20-100
   Primary search: "S&P 500 percent stocks above 50 day moving average"
   Fallback: "market breadth 50dma site:barchart.com"
   Direct fallback when search snippets are poor: fetch `https://www.barchart.com/stocks/quotes/$S5FI/overview` and extract the embedded `lastPrice` / `tradeTime` for “S&P 500 Stocks Above 50-Day Average”.
   Record the data date

3. [REQUIRED] CBOE Equity Put/Call Ratio
   Valid range: 0.30-1.50
   Primary search: "CBOE equity put call ratio today"
   Fallback: "CBOE total put call ratio current"
   Fallback: "put call ratio site:cboe.com"
   Direct fallback when Cboe CSV endpoints are stale: fetch `https://ycharts.com/indicators/cboe_equity_put_call_ratio` and parse the “Last Value” / “Latest Period” table fields. Treat this as a secondary source and cite it in freshness notes.
   Record the data date

4. [OPTIONAL] VIX Term Structure
   Values: steep_contango / contango / flat / backwardation
   Primary search: "VIX VIX3M ratio term structure today"
   Fallback: "VIX futures term structure contango backwardation"
   Note: Auto-detected from FMP API if VIX3M quote available.
   CLI --vix-term overrides auto-detection.

5. [OPTIONAL] Margin Debt YoY %
   Primary search: "FINRA margin debt latest year over year percent"
   Fallback: "NYSE margin debt monthly"
   Note: Typically 1-2 months lagged. Record the reporting month.

Phase 2: Execute Python Script

Run the script with collected data as CLI arguments:

python3 skills/market-top-detector/scripts/market_top_detector.py \
  --api-key $FMP_API_KEY \
  --breadth-50dma [VALUE] --breadth-50dma-date [YYYY-MM-DD] \
  --put-call [VALUE] --put-call-date [YYYY-MM-DD] \
  --vix-term [steep_contango|contango|flat|backwardation] \
  --margin-debt-yoy [VALUE] --margin-debt-date [YYYY-MM-DD] \
  --output-dir reports/ \
  --context "Consumer Confidence=[VALUE]" "Gold Price=[VALUE]"
# 200DMA breadth is auto-fetched from TraderMonty CSV.
# Override with --breadth-200dma [VALUE] if needed.
# Disable with --no-auto-breadth to skip auto-fetch.

The script will:

  1. Fetch S&P 500, QQQ, VIX quotes and history from FMP API
  2. Fetch Leading ETF (ARKK, WCLD, IGV, XBI, SOXX, SMH, KWEB, TAN) data
  3. Fetch Sector ETF (XLU, XLP, XLV, VNQ, XLK, XLC, XLY) data
  4. Calculate all 6 components
  5. Generate composite score and reports

Phase 3: Present Results

Present the generated Markdown report to the user, highlighting:

  • Composite score and risk zone
  • Data freshness warnings (if any data older than 3 days)
  • Strongest warning signal (highest component score)
  • Historical comparison (closest past top pattern)
  • What-if scenarios (sensitivity to key changes)
  • Recommended actions based on risk zone
  • Follow-Through Day status (if applicable)
  • Delta vs previous run (if prior report exists)

6-Component Scoring System

#ComponentWeightData SourceKey Signal
1Distribution Day Count25%FMP APIInstitutional selling in last 25 trading days
2Leading Stock Health20%FMP APIGrowth ETF basket deterioration
3Defensive Sector Rotation15%FMP APIDefensive vs Growth relative performance
4Market Breadth Divergence15%Auto (CSV) + WebSearch200DMA (auto) / 50DMA (WebSearch) breadth vs index level
5Index Technical Condition15%FMP APIMA structure, failed rallies, lower highs
6Sentiment & Speculation10%FMP + WebSearchVIX, Put/Call, term structure

Risk Zone Mapping

ScoreZoneRisk BudgetAction
0-20Green (Normal)100%Normal operations
21-40Yellow (Early Warning)80-90%Tighten stops, reduce new entries
41-60Orange (Elevated Risk)60-75%Profit-taking on weak positions
61-80Red (High Probability Top)40-55%Aggressive profit-taking
81-100Critical (Top Formation)20-35%Maximum defense, hedging

Exchange Calendar and Replay

Install requirements.txt before running the detector. Freshness uses XNYS sessions rather than weekdays. --as-of YYYY-MM-DD is accepted for the live evaluation date, but historical live replay fails closed because the current quote endpoints are not point-in-time sources.

API Requirements

Required: FMP API key (free tier sufficient: ~33 calls per execution) Optional: WebSearch data for breadth and sentiment (improves accuracy)

Output Files

  • JSON: market_top_YYYY-MM-DD_HHMMSS.json
  • Markdown: market_top_YYYY-MM-DD_HHMMSS.md

Reference Documents

references/market_top_methodology.md

  • Full methodology with O'Neil, Minervini, and Monty frameworks
  • Component scoring details and thresholds
  • Historical validation notes

references/distribution_day_guide.md

  • Detailed O'Neil Distribution Day rules
  • Stalling day identification
  • Follow-Through Day (FTD) mechanics

references/historical_tops.md

  • Analysis of 2000, 2007, 2018, 2022 market tops
  • Component score patterns during historical tops
  • Lessons learned and calibration data

When to Load References

  • First use: Load market_top_methodology.md for full framework understanding
  • Distribution day questions: Load distribution_day_guide.md
  • Historical context: Load historical_tops.md
  • Regular execution: References not needed - script handles scoring