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- 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)
How to use market-top-detector
- 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.Optionally gather VIX term structure (steep_contango/contango/flat/backwardation) and FINRA margin debt YoY % if available
- 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.Review the generated Markdown report highlighting composite score, risk zone, strongest warning signal, and historical pattern comparison
- 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
- 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
- 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
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.
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.
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.
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.
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:
- O'Neil - Distribution Day accumulation (institutional selling)
- Minervini - Leading stock deterioration pattern
- 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_KEYenvironment 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
| Aspect | Market Top Detector | Bubble Detector |
|---|---|---|
| Timeframe | 2-8 weeks | Months to years |
| Target | 10-20% correction | Bubble collapse (30%+) |
| Methodology | O'Neil/Minervini/Monty | Minsky/Kindleberger |
| Data | Price/Volume + Breadth | Valuation + Sentiment + Social |
| Score Range | 0-100 composite | 0-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:
- Fetch S&P 500, QQQ, VIX quotes and history from FMP API
- Fetch Leading ETF (ARKK, WCLD, IGV, XBI, SOXX, SMH, KWEB, TAN) data
- Fetch Sector ETF (XLU, XLP, XLV, VNQ, XLK, XLC, XLY) data
- Calculate all 6 components
- 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
| # | Component | Weight | Data Source | Key Signal |
|---|---|---|---|---|
| 1 | Distribution Day Count | 25% | FMP API | Institutional selling in last 25 trading days |
| 2 | Leading Stock Health | 20% | FMP API | Growth ETF basket deterioration |
| 3 | Defensive Sector Rotation | 15% | FMP API | Defensive vs Growth relative performance |
| 4 | Market Breadth Divergence | 15% | Auto (CSV) + WebSearch | 200DMA (auto) / 50DMA (WebSearch) breadth vs index level |
| 5 | Index Technical Condition | 15% | FMP API | MA structure, failed rallies, lower highs |
| 6 | Sentiment & Speculation | 10% | FMP + WebSearch | VIX, Put/Call, term structure |
Risk Zone Mapping
| Score | Zone | Risk Budget | Action |
|---|---|---|---|
| 0-20 | Green (Normal) | 100% | Normal operations |
| 21-40 | Yellow (Early Warning) | 80-90% | Tighten stops, reduce new entries |
| 41-60 | Orange (Elevated Risk) | 60-75% | Profit-taking on weak positions |
| 61-80 | Red (High Probability Top) | 40-55% | Aggressive profit-taking |
| 81-100 | Critical (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.mdfor 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
Related skills
More from tradermonty/claude-trading-skills and the wider catalog.

mt5-robot-tester
Batch-test and optimize MetaTrader 5 Expert Advisors through a 3-round pipeline to select the best performers.

news-reaction-failure-analyzer
Confirm whether a crowded market failed to react to favorable news using statistically validated drift analysis.

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.