Parabolic Short Trade Planner
Screen US equities for parabolic exhaustion patterns and generate conditional pre-market short plans, then evaluate intraday trigger fires from live 5-min bars. Phase 1 daily 5-factor scorer (MA extension / acceleration / volume climax / range expansion / liquidity), Phase 2 per-candidate plans for ORL break / first-red 5-min / VWAP fail with explicit borrow / SSR / manual-confirmation gating, Phase 3 one-shot intraday FSM that detects trigger fires and resolves concrete share counts. Covers Phase 1 + Phase 2 + Phase 3.
FMP Required
Download Skill Package (.skill) View Source on GitHub
Table of Contents
1. Overview
Generate Qullamaggie-style Parabolic Short watchlists and conditional pre-market plans for US equities. The skill never sends orders. It emits JSON + Markdown that a human reviews against their broker before entry.
Three phases:
- Phase 1 (
screen_parabolic.py): pulls EOD bars + company profile from FMP, applies hard invalidation rules (mode-aware), scores survivors on 5 factors (weights 30/25/20/15/10), and assigns A/B/C/D grades. - Phase 2 (
generate_pre_market_plan.py): takes the Phase 1 JSON, filters by--tradable-min-grade(defaultB), checks Alpaca short inventory (orManualBrokerAdapter), evaluates SEC Rule 201 SSR state from the inherited prior-day close, and renders three trigger plans per candidate. - Phase 3 (
monitor_intraday_trigger.py): reads the Phase 2 plan, fetches 5-min bars (Alpaca live or fixture), walks each plan’s FSM forward by one step, persists per-plan state, and writes anintraday_monitorJSON withstate,entry_actual,stop_actual, andshares_actual(when triggered). One-shot — trader runs it every 1–5 min viawatchor cron; replay-deterministic so re-runs are byte-identical.
2. When to Use
Invoke this skill when the user wants to:
- Build a daily Parabolic Short watchlist from S&P 500 (or a custom CSV).
- Translate a watchlist into pre-market trade plans with explicit borrow / SSR / state-cap gating.
- Audit a candidate’s blocking vs advisory manual-confirmation reasons before placing an order at Alpaca.
Do NOT invoke for:
- Long-side momentum screening — use vcp-screener or canslim-screener.
- 1-minute / sub-minute intraday signals — Phase 3 evaluates 5-min bars only.
- Live order routing — this skill is detection-only by design;
Phase 3 emits a
triggeredstate with concrete entry/stop/share count, but the trader fires the order manually.
3. Prerequisites
- FMP API key required (
FMP_API_KEYenvironment variable) - FMP for screener; Alpaca optional (
requestsdirect, no SDK). Without Alpaca, every candidate flips toplan_status: watch_only - Python 3.9+ recommended
4. Quick Start
python3 skills/parabolic-short-trade-planner/scripts/screen_parabolic.py \
--mode safe_largecap --as-of 2026-04-30 --output-dir reports/
5. Workflow
Phase 1 — daily screener
- Confirm
FMP_API_KEYis set (env var or--api-key). - Run with the safer-by-default mode:
python3 skills/parabolic-short-trade-planner/scripts/screen_parabolic.py \ --mode safe_largecap --as-of 2026-04-30 --output-dir reports/ - Inspect
reports/parabolic_short_<date>.md— the watchlist is grouped by grade (A→D). - Promote interesting names to Phase 2.
For small-cap blow-offs, switch to --mode classic_qm (looser market
cap and ADV floors, higher 5-day ROC threshold).
For testing without the API, run --dry-run --fixture <path> against a
JSON fixture (one is shipped at scripts/tests/fixtures/dry_run_minimal.json).
Phase 2 — pre-market plan generator
- Optional: set
ALPACA_API_KEY/ALPACA_SECRET_KEYfor live borrow checks. Without them the planner falls back toManualBrokerAdapter, which marks every candidate asborrow_inventory_unavailable/plan_status: watch_only. - Run:
python3 skills/parabolic-short-trade-planner/scripts/generate_pre_market_plan.py \ --candidates-json reports/parabolic_short_2026-04-30.json \ --account-size 100000 --risk-bps 50 --output-dir reports/ - Output:
reports/parabolic_short_plan_<date>.json. Each plan contains three entry plans (5min ORL break, first red 5-min, VWAP fail) withentry_hint/stop_hintformula strings (no baked-in shares — the trader computes shares at trigger time from theshares_formula).
Phase 3 — intraday trigger monitor
- Confirm
ALPACA_API_KEY/ALPACA_SECRET_KEYare set (Phase 3 uses Alpaca market data;data.alpaca.marketsworks for both paper and live accounts). - During US regular session, run one-shot per cadence — typical is
every 60 s during the first 30 min, then every 5 min:
python3 skills/parabolic-short-trade-planner/scripts/monitor_intraday_trigger.py \ --plans-json reports/parabolic_short_plan_2026-05-05.json \ --bars-source alpaca \ --state-dir state/parabolic_short/ \ --output-dir reports/Or wrap in
watch -n 60 'python3 ...'/ cron. - Output:
reports/parabolic_short_intraday_<date>.jsonlists every monitored plan withstate(armed/triggered/invalidated/ FSM-specific), bar-derived transition timestamps, andsize_recipe_resolved(concreteshares_actual) when triggered. - For testing without the API, use
--bars-source fixture --bars-fixture <path>against a JSON fixture (scripts/tests/fixtures/intraday_bars/).
Phase 3 is idempotent: each run replays the full session bars
from open up to now_et (or --now-et override), so re-running
during the same minute produces the same state. prior_state is
used only for diff/notification display; it never advances the FSM.
Reviewing a plan before entry
Read three top-level fields per ticker:
plan_status:actionable(manual gates can be cleared) orwatch_only(hard blockers — borrow unavailable or SSR active).blocking_manual_reasons: must all be resolved before pulling the trigger.advisory_manual_reasons: heads-up only, e.g.manual_locate_required(always set),warning:too_early_to_short.
6. Resources
References:
skills/parabolic-short-trade-planner/references/broker_capability_matrix.mdskills/parabolic-short-trade-planner/references/intraday_trigger_playbook.mdskills/parabolic-short-trade-planner/references/parabolic_short_methodology.mdskills/parabolic-short-trade-planner/references/short_invalidation_rules.mdskills/parabolic-short-trade-planner/references/short_risk_management.mdskills/parabolic-short-trade-planner/references/smoke_test_runbook.mdskills/parabolic-short-trade-planner/references/smoke_universe_diverse.csvskills/parabolic-short-trade-planner/references/smoke_universe_relaxed.csv
Scripts:
skills/parabolic-short-trade-planner/scripts/bar_normalizer.pyskills/parabolic-short-trade-planner/scripts/broker_short_inventory_adapter.pyskills/parabolic-short-trade-planner/scripts/check_live_apis.pyskills/parabolic-short-trade-planner/scripts/fmp_client.pyskills/parabolic-short-trade-planner/scripts/generate_pre_market_plan.pyskills/parabolic-short-trade-planner/scripts/intraday_size_resolver.pyskills/parabolic-short-trade-planner/scripts/intraday_state_machine.pyskills/parabolic-short-trade-planner/scripts/intraday_state_store.pyskills/parabolic-short-trade-planner/scripts/invalidation_rules.pyskills/parabolic-short-trade-planner/scripts/manual_reasons.pyskills/parabolic-short-trade-planner/scripts/market_clock.pyskills/parabolic-short-trade-planner/scripts/math_helpers.pyskills/parabolic-short-trade-planner/scripts/monitor_intraday_trigger.pyskills/parabolic-short-trade-planner/scripts/parabolic_report_generator.pyskills/parabolic-short-trade-planner/scripts/parabolic_scorer.pyskills/parabolic-short-trade-planner/scripts/screen_parabolic.pyskills/parabolic-short-trade-planner/scripts/size_recipe_builder.pyskills/parabolic-short-trade-planner/scripts/ssr_state_tracker.pyskills/parabolic-short-trade-planner/scripts/state_caps.pyskills/parabolic-short-trade-planner/scripts/vwap.py