FDASignalBot monitors FDA/regulatory process signals for binary FDA approval markets (e.g., approval vs CRL by a deadline) and emits alerts when market odds appear mispriced based on public, document-driven signals.
This project is alert-only (no auto-trading). It is designed to:
- timestamp signals,
- log evidence,
- compare against market odds at alert time,
- and evaluate performance across resolved events.
Not financial advice. Uses only public information. Do not use MNPI.
- Tracks a small set of high-signal, low-noise FDA/process indicators.
- Scores signals using a rule-based model (no ML initially).
- Emits standardized alerts when score crosses a threshold.
- Logs alerts + evidence for later review/backtesting.
Only target markets that meet all criteria:
- Binary FDA outcome (approval vs CRL / no approval)
- Fixed deadline (e.g., PDUFA date or “by Dec 31, YYYY”)
- Objective resolution via FDA action (approval letter / CRL)
Avoid:
- “Eventually approved” markets
- Pure efficacy/result markets
- Subjective resolution criteria
YES resolves if:
- FDA issues an approval letter (full or accelerated) by the stated date.
NO resolves if:
- FDA issues a Complete Response Letter (CRL), or
- deadline passes without approval.
Non-resolution events (do NOT treat as resolution):
- Advisory Committee vote
- Press releases
- Analyst notes
- Rumors
We track exactly 5 signals initially (do not add more until validation is complete).
- Parse AdCom briefing docs (1–3 days pre-meeting).
- Flag repeated negative/concern language and “insufficient” framing.
Trigger: ≥2 red phrases => +3
- Prior Form 483 / major findings + no confirmed reinspection = elevated CRL risk.
Trigger: unresolved CMC risk => +3
- Earnings/SEC language retreat (“expect approval” disappears, “working with FDA” increases).
Trigger: directional downgrade => +2
- Late label broadening attempts (adjunctive→mono, narrow→broad).
Trigger: late scope expansion => +1
- Late-added AdCom, cancellations, PDUFA extensions.
Trigger: irregularity => +1
- 4–5 points: ALERT
- 6–10 points: STRONG ALERT
Alert text is standardized (no probability claims):
“Approval odds likely overstated due to unresolved regulatory risk (signals: S2, S3).”
FDASignalBot/ signals/ s1_briefing_docs.py s2_cmc.py s3_sponsor_language.py s4_label_scope.py s5_procedural.py alerts/ notifier.py logs/ alerts.jsonl config/ markets.yaml main.py README.md
- Use only public sources: FDA calendars, FDA PDFs, EDGAR filings, earnings transcripts, etc.
- No Twitter rumor scraping in MVP.
- No paid feeds required.
Every alert must log:
- timestamp (UTC)
- market identifier
- Polymarket odds at alert time (manual entry OK for MVP)
- triggered signals + evidence snippets
- score
- later: final resolution
We are NOT measuring P&L yet.
Track:
- Directional accuracy (YES vs NO)
- Timing edge (lead time before repricing/outcome)
- False positives (alerts without meaningful movement)
Targets before considering real trades:
- ≥65% directional accuracy
- median lead time ≥48h
- <25% false positives
- Create a venv and install deps:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt