Detect IBD-style Distribution Days for QQQ/SPY (close down at least 0.2% on higher volume), track 25-session expiration and 5% invalidation, count d5/d15/d25 clusters, classify market risk (NORMAL/CAUTION/HIGH/SEVERE), and emit TQQQ/QQQ exposure recommendations. Use after market close, before TQQQ exposure changes, or as input to FTD/market-state frameworks. Does not execute trades.
73
90%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Detect IBD-style Distribution Days for major market ETFs (QQQ as Nasdaq proxy, SPY as S&P 500 proxy) and produce a daily market deterioration signal plus a TQQQ/QQQ exposure recommendation. Designed for post-market review.
Invoke this skill:
Do NOT use this skill to:
--as-of YYYY-MM-DD for backtesting against a historical session.--api-key, config.data.api_key, or FMP_API_KEY env var (in that priority order).A Distribution Day is detected when:
A Distribution Day is removed from the active count when either:
Today's DD is never invalidated immediately because there are no post-DD sessions to evaluate the 5% gain against.
d5_count / d15_count / d25_count count active records with age_sessions <= N.| Risk | Trigger |
|---|---|
| NORMAL | d25 <= 2 |
| CAUTION | d25 >= 3 |
| HIGH | d25 >= 5 OR d15 >= 3 OR d5 >= 2 |
| SEVERE | d25 >= 6 OR d15 >= 4 OR (market_below_21ema_or_50ma AND d25 >= 5) |
When both QQQ and SPY are loaded, QQQ-weighted overall logic applies (TQQQ-aware): a single SEVERE escalates to SEVERE; QQQ HIGH escalates to overall HIGH; QQQ NORMAL + SPY HIGH still escalates to HIGH (broad-market spillover).
| Risk | Action | Target Exposure | Trailing Stop |
|---|---|---|---|
| NORMAL | HOLD_OR_FOLLOW_BASE_STRATEGY | 100% | base |
| CAUTION | AVOID_NEW_ADDS | 75% | min(base, 7%) |
| HIGH | REDUCE_EXPOSURE | 50% | min(base, 5%) |
| SEVERE | CLOSE_TQQQ_OR_HEDGE | 25% | min(base, 3%) |
QQQ uses a less aggressive policy (HIGH=75%, SEVERE=50%) since it lacks 3x leverage.
get_historical_prices).prepare_effective_history so effective_history[0] is the evaluation session.high_since, invalidation event, and status.d5 / d15 / d25 active records.market_below_21ema_or_50ma (None if data insufficient).--output-dir with API keys redacted.Saved to reports/ (or --output-dir):
ibd_distribution_day_monitor_YYYY-MM-DD_HHMMSS.jsonibd_distribution_day_monitor_YYYY-MM-DD_HHMMSS.mdJSON is UTF-8 with ensure_ascii=False (Japanese explanations preserved). Sensitive keys (api_key, fmp_api_key, token, etc.) are redacted automatically.
config/default.yaml is changed deliberately.python3 skills/ibd-distribution-day-monitor/scripts/ibd_monitor.py \
--symbols QQQ,SPY \
--lookback-days 80 \
--instrument TQQQ \
--current-exposure 100 \
--base-trailing-stop 10 \
--output-dir reports/FMP API key required. Free tier (250 calls/day) is sufficient for daily QQQ + SPY runs.
ftd-detector: Bottom confirmation via Follow-Through Days (counterpart of this top-side signal).market-top-detector: Composite 0-100 top probability score using O'Neil distribution + other components.position-sizer: Convert risk-management recommendations into share counts.62a1635
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.