exposure-coach
tradermonty/claude-trading-skills
Synthesize market signals into a unified exposure ceiling and portfolio posture recommendation.
What is exposure-coach?
Exposure Coach integrates outputs from eight upstream market-analysis skills (breadth, uptrend, regime, top-risk, FTD, theme, sector, and institutional flow) to generate a one-page Market Posture summary. Use it before initiating new positions or at the start of each trading week to determine how much capital to commit to equities and whether market conditions favor new entries, reduction-only, or cash priority.
- Synthesizes breadth, uptrend participation, macro regime, distribution risk, follow-through days, investment themes, sector performance, and institutional flow into a unified exposure score
- Generates an exposure ceiling (0–100%) and bias direction (Growth vs Value) based on integrated signals
- Produces a clear action recommendation: NEW_ENTRY_ALLOWED, REDUCE_ONLY, or CASH_PRIORITY
- Outputs both JSON and Markdown reports with component scores, confidence level, and rationale
- Handles partial inputs gracefully; missing upstream files reduce confidence but do not block execution
How to install exposure-coach
npx skills add https://github.com/tradermonty/claude-trading-skills --skill exposure-coach- Python 3.9+
- FMP API key (set FMP_API_KEY environment variable) for institutional-flow-tracker data
- JSON output files from upstream skills: market-breadth-analyzer, uptrend-analyzer, macro-regime-detector, market-top-detector, ftd-detector, theme-detector, sector-analyst, and institutional-flow-tracker
How to use exposure-coach
- 1.Gather the most recent JSON outputs from all eight upstream skills into a reports directory
- 2.Run the exposure scoring engine: python3 skills/exposure-coach/scripts/calculate_exposure.py with --breadth, --uptrend, --regime, --top-risk, --ftd, --theme, --sector, and --institutional flags pointing to the upstream JSON files
- 3.Verify that inputs_provided in the output JSON matches the files you supplied; if a file appears in inputs_missing despite being passed on the CLI, keep confidence capped and do not manually fold that dimension into the decision
- 4.Review the generated Market Posture Summary (JSON and Markdown) for exposure ceiling, bias direction, participation assessment, and action recommendation
- 5.Map the recommendation to portfolio actions: NEW_ENTRY_ALLOWED means proceed with stock analysis; REDUCE_ONLY means trim on strength; CASH_PRIORITY means raise cash aggressively
Use cases
- Before initiating any new stock positions to determine appropriate capital commitment level
- At the start of each trading week to recalibrate portfolio exposure based on current market regime
- When multiple market signals conflict to obtain a unified posture decision
- After significant macro or market events to reassess exposure ceiling and bias
- When transitioning between market regimes (broadening, concentration, contraction) to adjust position sizing
- Solo traders and portfolio managers managing discretionary equity allocation
- Traders using a multi-signal framework who need a control-plane decision before stock-level analysis
- Risk managers calibrating portfolio exposure to macro regime shifts
exposure-coach FAQ
The script accepts partial inputs and reduces confidence accordingly. Missing files do not block execution, but the exposure ceiling and recommendation will be capped at lower confidence levels. Always check inputs_provided vs inputs_missing in the output.
Inspect the inputs_provided and inputs_missing fields in the JSON report. If theme appears in inputs_missing even though you passed a theme-detector JSON file, the engine did not recognize it. Keep confidence capped and do not manually fold theme strength into the decision.
NEW_ENTRY_ALLOWED: proceed with stock-level analysis and new positions. REDUCE_ONLY: no new entries; trim existing positions on strength. CASH_PRIORITY: raise cash aggressively; avoid all new commitments.
At the start of each trading week, after significant macro or market events, and whenever you transition between market regimes. Always run it before initiating new positions.
A 0–100% recommendation for maximum equity allocation. It is derived from breadth, regime, top-risk, and institutional flow signals, adjusted for confidence. It answers: how much capital should I commit to equities right now?
Full instructions (SKILL.md)
Source of truth, from tradermonty/claude-trading-skills.
name: exposure-coach description: Generate a one-page Market Posture summary with net exposure ceiling, growth-vs-value bias, participation breadth, and new-entry-allowed vs cash-priority recommendation by integrating signals from breadth, regime, and flow analysis skills.
Exposure Coach
Overview
Exposure Coach synthesizes outputs from market-breadth-analyzer, uptrend-analyzer, macro-regime-detector, market-top-detector, ftd-detector, theme-detector, sector-analyst, and institutional-flow-tracker into a unified control-plane decision. The skill answers the solo trader's core question: "How much capital should I commit to equities right now?" before any individual stock analysis begins.
When to Use
- Before initiating any new stock positions to determine appropriate capital commitment
- At the start of each trading week to calibrate portfolio exposure
- When multiple market signals conflict and a unified posture is needed
- After significant macro or market events to reassess exposure ceiling
- When transitioning between market regimes (broadening, concentration, contraction)
Prerequisites
- Python 3.9+
- FMP API key (set
FMP_API_KEYenvironment variable) for institutional-flow-tracker data - Input JSON files from upstream skills (see Workflow Step 1)
- Standard library +
argparse,json,datetime
Workflow
Step 1: Gather Upstream Skill Outputs
Collect the most recent JSON outputs from integrated skills. Each file provides a specific signal dimension:
| Skill | Output File Pattern | Signal Provided |
|---|---|---|
| market-breadth-analyzer | breadth_*.json | Advance/decline ratios, new highs/lows |
| uptrend-analyzer | uptrend_*.json | Uptrend participation percentage |
| macro-regime-detector | regime_*.json | Current regime (Concentration, Broadening, etc.) |
| market-top-detector | top_risk_*.json | Distribution day count, top probability score |
| ftd-detector | ftd_*.json | Follow-Through Day quality (market bottom confirmation) |
| theme-detector | theme_detector_*.json or theme_*.json | Active investment themes and rotation |
| sector-analyst | sector_*.json | Sector performance rankings |
| institutional-flow-tracker | institutional_*.json | Net institutional buying/selling |
Step 2: Run Exposure Scoring Engine
Execute the exposure scoring script with paths to upstream outputs:
python3 skills/exposure-coach/scripts/calculate_exposure.py \
--breadth reports/breadth_latest.json \
--uptrend reports/uptrend_latest.json \
--regime reports/regime_latest.json \
--top-risk reports/top_risk_latest.json \
--ftd reports/ftd_latest.json \
--theme reports/theme_latest.json \
--sector reports/sector_latest.json \
--institutional reports/institutional_latest.json \
--output-dir reports/
The script accepts partial inputs; missing files reduce confidence but do not block execution.
Canonical macro-regime reports must include nested regime.confidence and
composite.data_quality with valid integer component counts. Missing or malformed
availability metadata, very_low confidence, and zero usable components are
treated as missing critical input. They do not contribute a regime score or bias,
and the normal missing-input haircut and confidence cap apply. Never override this
degradation by manually copying the report's regime label into the exposure decision.
Verification pitfall: After each run, inspect the generated JSON fields inputs_provided and inputs_missing. If a file you passed on the CLI still appears in inputs_missing (for example a theme-detector JSON that the exposure engine did not recognize), report the affected dimension as degraded and keep confidence capped; do not assume the supplied input was incorporated just because the CLI argument was present.
Theme-detector ingestion caveat: The theme detector commonly emits theme_detector_YYYY-MM-DD_HHMMSS.json with a themes object. If that file is not recognized by calculate_exposure.py and theme remains in inputs_missing, do not fold theme strength into the exposure ceiling manually. Instead, keep the Exposure Coach confidence capped, state that the theme dimension was not incorporated, and summarize theme/sector findings separately in the broader trading brief.
Step 3: Interpret the Market Posture Summary
Review the generated posture report containing:
- Exposure Ceiling -- Maximum recommended equity allocation (0-100%)
- Bias Direction -- Growth vs Value tilt based on regime and flow
- Participation Assessment -- Broad (healthy) vs Narrow (fragile) market
- Action Recommendation -- NEW_ENTRY_ALLOWED, REDUCE_ONLY, or CASH_PRIORITY
- Confidence Level -- HIGH, MEDIUM, or LOW based on input completeness
Step 4: Apply Exposure Guidance
Map the posture recommendation to portfolio actions:
| Recommendation | Action |
|---|---|
| NEW_ENTRY_ALLOWED | Proceed with stock-level analysis and new positions |
| REDUCE_ONLY | No new entries; trim existing positions on strength |
| CASH_PRIORITY | Raise cash aggressively; avoid all new commitments |
Output Format
JSON Report
{
"schema_version": "1.0",
"generated_at": "2026-03-16T07:00:00Z",
"exposure_ceiling_pct": 70,
"bias": "GROWTH",
"participation": "BROAD",
"recommendation": "NEW_ENTRY_ALLOWED",
"confidence": "HIGH",
"component_scores": {
"breadth_score": 65,
"uptrend_score": 72,
"regime_score": 80,
"top_risk_score": 25,
"ftd_score": 10,
"theme_score": 68,
"sector_score": 70,
"institutional_score": 75
},
"inputs_provided": ["breadth", "uptrend", "regime", "top_risk"],
"inputs_missing": ["ftd", "theme", "sector", "institutional"],
"rationale": "Broad participation with low top risk supports elevated exposure."
}
Markdown Report
The markdown report provides a one-page summary suitable for quick review:
# Market Posture Summary
**Date:** 2026-03-16 | **Confidence:** HIGH
## Exposure Ceiling: 70%
| Dimension | Score | Status |
|-----------|-------|--------|
| Breadth | 65 | Healthy |
| Uptrend Participation | 72% | Broad |
| Regime | Broadening | Favorable |
| Top Risk | 25 | Low |
## Recommendation: NEW_ENTRY_ALLOWED
**Bias:** Growth > Value
**Participation:** Broad (healthy internals)
### Rationale
Broad participation with low distribution day count supports elevated equity exposure.
New positions allowed within the 70% ceiling.
Reports are saved to reports/ with filenames exposure_posture_YYYY-MM-DD_HHMMSS.{json,md}.
Resources
scripts/calculate_exposure.py-- Main orchestrator that scores and synthesizes inputsreferences/exposure_framework.md-- Scoring rules and threshold definitionsreferences/regime_exposure_map.md-- Regime-to-exposure ceiling mappings
Key Principles
- Safety First -- Default to lower exposure when inputs are incomplete or conflicting
- Regime Alignment -- Let macro regime set the baseline; breadth adjusts within bounds
- Actionable Output -- Always produce a clear recommendation, not just data aggregation
Related skills
More from tradermonty/claude-trading-skills and the wider catalog.

finviz-screener
Build and open FinViz screener URLs from natural language stock filtering requests in English or Japanese.

ftd-detector
Detect market bottoms and rally confirmation using William O'Neil's Follow-Through Day methodology.

futures-position-sizer
Calculate futures contract position sizes from direction, entry, and stop-loss using verified per-symbol specs.

fxmacrodata-calendar
Fetch official macro release-calendar events for trade planning and event-risk filtering.

ibd-distribution-day-monitor
Detect IBD Distribution Days on QQQ/SPY and recommend TQQQ/QQQ exposure adjustments based on market deterioration risk.

institutional-flow-tracker
Track institutional investor flows via 13F filings to identify smart money accumulation and distribution patterns.