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 (): 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 (default ), checks Alpaca short
inventory (or ), 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 an
JSON with , , ,
and (when triggered). One-shot — trader runs it
every 1–5 min via or cron; replay-deterministic so re-runs
are byte-identical.
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 state with concrete entry/stop/share
count, but the trader fires the order manually.
Workflow
Phase 1 — daily screener
- Confirm is set (env var or ).
- Run with the safer-by-default mode:
bash
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
(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 / for live borrow
checks. Without them the planner falls back to ,
which marks every candidate as
borrow_inventory_unavailable
/
.
- Run:
bash
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) with
/ formula strings (no baked-in shares — the
trader computes shares at trigger time from the ).
Phase 3 — intraday trigger monitor
- Confirm / are set (Phase 3
uses Alpaca market data; works 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:
bash
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>.json
lists every
monitored plan with ( / /
/ FSM-specific), bar-derived transition timestamps, and
(concrete ) 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
(or
override), so re-running
during the same minute produces the same 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:
- : (manual gates can be cleared) or
(hard blockers — borrow unavailable or SSR active).
- : must all be resolved before pulling the
trigger.
- : heads-up only, e.g.
(always set),
warning:too_early_to_short
,
warning:recent_earnings_catalyst
(last earnings within
--earnings-catalyst-window-days
, default 10 trading days — flag the
move as event-driven rather than pure technical blow-off).
Earnings-aware screening
Phase 1 fetches the FMP earnings calendar once per run (single call,
not per-symbol) and emits two earnings-aware checks:
--exclude-earnings-within-days
(default 2 calendar days, forward) —
hard invalidation when next earnings is within the window. Matches
the legacy semantic.
--earnings-catalyst-window-days
(default 10 trading days, backward)
— soft warning when last earnings is
within the window. Routes to Phase 2 as an advisory manual reason
without forcing trade_allowed_without_manual: false
.
Per-candidate output exposes
,
,
trading_days_since_earnings
(TRADING days),
(CALENDAR days, forward),
(configured threshold),
and
earnings_in_blackout_window
. The legacy
is
kept for backward compatibility.
Top-level dates:
is the planning date (Phase 2 contract — never
mutate);
mirrors it;
is the latest bar
date used for technical metrics (differs from
on weekend runs).
Output Format
Phase 1 JSON:
parabolic_short_<as_of>.json
(schema_version 1.0).
Phase 2 JSON:
parabolic_short_plan_<as_of>.json
(schema_version 1.0).
Phase 3 JSON:
parabolic_short_intraday_<as_of>.json
(schema_version 1.0,
phase =
).
The contract is pinned by
tests/test_schema_contract.py
plus
tests/test_monitor_intraday_smoke.py
for Phase 3.
Resources
references/parabolic_short_methodology.md
— Qullamaggie's 3-trigger
framework and exhaustion signals.
references/short_invalidation_rules.md
— mode-aware exclusion rules.
references/short_risk_management.md
— Rule 201, ETB vs HTB, locate.
references/intraday_trigger_playbook.md
— detail on each trigger
type, the FSM transitions Phase 3 implements, and same-bar tie-break
semantics.
references/broker_capability_matrix.md
— what each broker exposes
through its API for short inventory.