SPY 765/775 CALL SPREAD · CLOSED +$172.83 2,786 SIGNALS SCANNED → 1,569 PRICEABLE TRADES 16/30 POSITIVE MONTHS · BEST MONTH JUN 2026 +$1,937 · WORST MAR 2026 -$991 BEST TRADE +$2,048 (QQQ) · WORST -$421 AVG WIN $42.33 · AVG LOSS $38.97 · PAYOFF 1.09:1 STRONGEST SIGNAL: QQQ PUTS +$7.84/TRADE (n=214) RISK GUARDIAN STOP $580 / 24H · TRADE CLOSED AT CAP ALPACA PAPER · DEDICATED $100K ACCOUNT · OPTIONS LVL 3 SPY 765/775 CALL SPREAD · CLOSED +$172.83 2,786 SIGNALS SCANNED → 1,569 PRICEABLE TRADES 16/30 POSITIVE MONTHS · BEST MONTH JUN 2026 +$1,937 · WORST MAR 2026 -$991 BEST TRADE +$2,048 (QQQ) · WORST -$421 AVG WIN $42.33 · AVG LOSS $38.97 · PAYOFF 1.09:1 STRONGEST SIGNAL: QQQ PUTS +$7.84/TRADE (n=214) RISK GUARDIAN STOP $580 / 24H · TRADE CLOSED AT CAP ALPACA PAPER · DEDICATED $100K ACCOUNT · OPTIONS LVL 3

FVG Copilot OPTIONS ALPHA AGENTSLIVE ON ALPACA PAPERLIVE DATA

A deterministic Fair Value Gap trading engine governed by AI agents. An LLM Scout builds the thesis, an LLM Risk Guardian vetoes it against hard-coded limits, and a deterministic Executor places the real options trade on Alpaca.

+$1,295
Backtest P&L
48.9%
Win Rate
1,569
Clean Trades
1.09:1
Payoff Ratio
+$172.83
Live Trade — Closed
Account Value (Live)

Live Now — lablab hackathon account (paper, $100k)

CLOSED HOLD-TIME CAP HIT
Risk Guardian's 24h hold cap hit at 12:07 PM PDT on Sep 3. The position closed by 12:22 PM.
Portfolio Value
Unrealized P&L
Cash
Trade Result
+$172.83
Agent Control — Autonomous Runner
CHECKING…
Gates new entries only — stop-loss / hold-cap enforcement always runs.
Applies within one scan cycle (~5 min).
SymbolSideQtyAvg EntryCurrentUnrealized P&L
No open positions. The spread closed on Sep 3 at 12:22 PM PDT for a realized +$172.83 — see Recent Orders below.
This account has no open positions right now. Values above are live from the Alpaca paper API, polled every 60 seconds; the trade card and log below show exactly what happened while it was open.

The Trade — SPY debit call spread, placed and closed by the agents

Net Debit Paid
$481
Risk Guardian Stop
$580 / 24h
Realized P&L
+$172.83
Status
CLOSED — SETTLED
Closed Sep 3, 2026 · 12:22 PM PDT
Entry Order
c49e917f-5ad5-404a-bdfe-5af3524dcb0a
Long Leg Entry → Exit
SPY260916C00765000: $7.37 → $12.33
Short Leg Entry → Exit
SPY260916C00775000: $2.56 → $5.79
Spread Width
$10 wide
Reward:Risk (at entry)
~1.08:1
Held
Sep 2, 12:07 PM → Sep 3, 12:22 PM PDT (~24.3h)
Risk Guardian's 24-hour hold-time cap hit at 12:07 PM PDT on Sep 3. A Codespace outage delayed the automated close by about 15 minutes. Both legs closed by 12:22 PM for a realized +$172.83. Full sequence in the Agent Decision Log below.
SubmittedSymbolSideQtyStatusFilled Avg
Sep 3, 12:22 PM PDTSPY260916C00765000sell1filled$12.33
Sep 3, 12:18 PM PDTSPY260916C00775000buy1filled$5.79
Sep 2, 12:07 PM PDTSPY260916C00765000 / SPY260916C00775000buy / sell1filled$4.81 net

Agent Reasoning — actual pipeline transcripts

 fvg-copilot — scout / risk_guardian / executor / position_monitor
> scout --signal SPY-LIVE-FIRST-REAL
thesis: “confirmed market structure shift and strong displacement suggests upward pressure toward the measured move target”
confidence: 0.78 · structure: debit_call_spread
> risk_guardian --review
[VETO · Sep 1] daily P&L −$50 plus the backtest tail stat that 8.5% of winning trades still lose more than $50. Scout’s $300 loss ceiling got rejected. Executor: NO_ORDER, zero wasted calls.
[APPROVE_MODIFIED · Sep 2] “$480/contract… stop must cover the full debit plus tail risk… $580, 24h hold”. Executor placed the order, both legs filled in ~100ms.
> position_monitor --watch
enforced max_loss=$580 · max_hold=24h · cap hit Sep 3, 12:07 PM PDT → both legs closed by 12:22 PM → +$172.83 realized
TimestampSignalScoutRisk GuardianExecutor
Sep 1, ~9:44 PM PDTBullish SPY FVG, spot $762.15, target $777debit_call_spread, confidence 0.78VETO $300 loss vs. -$50 daily P&L, per the backtest tail-risk statNO_ORDER (correct no-op)
Sep 2, ~12:01 PM PDTBullish SPY FVG, spot $765.18, target $773.18debit_call_spread, confidence 0.78APPROVE_MODIFIED $580 cap set: the spread costs $480/contract, and the stop has to cover the full debit plus a tail-risk bufferOrder built: long 765C / short 775C, 1 contract, dry_run=true
Sep 2, 12:07:12 PM PDTSame signal, live submissionSame as above, real runFILLED Real Alpaca order c49e917f…, both legs filled simultaneously (~100ms)
Sep 3, 12:07–12:22 PM PDT24h hold-time cap reachedCap enforced by Position Monitor (deterministic, no LLM)CLOSED Short leg bought back @ $5.79, long leg sold @ $12.33. Net +$172.83.

How It Works — deterministic math, AI judgment, nothing blurred

Deterministic core

FVG Engine

ATR-based gap filter, MSS + displacement confirmation. Fires the raw directional signal.

LLM Agent · Groq

Scout

Contextualizes the FVG signal into a structured thesis and confidence score (openai/gpt-oss-120b).

LLM + Rules Agent

Risk Guardian

Hard limits in plain code first, fail-closed, then Groq reasoning. Sets the real stop-loss and hold-time cap, can veto outright.

Deterministic script

Executor

Alpaca CLI. Target-aware debit-spread strike selection, multi-leg order placement. No LLM in this step.

Deterministic script

Position Monitor

Polls the open position against Risk Guardian's max-loss and max-hold-time, and closes it when either trips.

Built the Hard Way — real bugs found live, fixed, committed

Silent Misroute Bug
str(Enum) would have flipped every bullish signal into a put spread, silently. Caught by diffing the real schema before the first live run, not after.
Cost-Blind Veto Bug
Risk Guardian kept setting a $50 stop no real spread could satisfy. It only surfaced once we ran it against live Groq; the fix went straight into the prompt.
Zero-Collision Filter
43.7% of backtest trades priced entry and exit off the same bar, faking $0 P&L. We caught it by distrusting a win rate that looked too clean, not by luck.
Enforcement State Loss
A Codespace rebuild wiped the Position Monitor's gitignored database, so it silently reported zero open positions while the spread was live. Caught by cross-checking the account directly and restoring the record.

Backtest Evidence — 2.5 years, real Alpaca options prices

Cumulative Backtest P&L — 1,569 clean trades
Mar 2024 – Aug 2026 · SPY / QQQ / XLV / XLF / IWM. Not a smooth rocket. The strategy dug a -$1,957 hole through 2024, peaked at +$2,090, and survived a -$2,179 peak-to-trough drawdown before finishing +$1,295. We show the drawdowns because that's the honest curve.
+$1,295 +$2,090 PEAK -$1,957 TROUGH $0 MAR 2024 2025 AUG 2026
48.9% WIN RATE
48.9% Win Rate
768 profitable / 801 losing trades across 1,569 clean trades. Avg win $42.33, avg loss $38.97: close to a coin flip with a small edge, which is what a real, non-curve-fit options strategy looks like.
19.4% OF WINS LOSE >$20
Why the Risk Guardian Exists
19.4% of winning underlying signals still lost more than $20 on the options leg (8.5% lost more than $50). Directional accuracy alone doesn't protect the trade, so the Risk Guardian sets its own loss and hold-time stops instead of trusting the FVG signal.
Mean P&L per trade — symbol × direction
Clean dataset, real historical Alpaca options prices (intraday hourly bars, target-aware strikes). QQQ puts are the strongest replicated signal; the live strategy stays symmetric across all directions and symbols.
QQQ · SELL (puts) n=214 +$7.84 IWM · SELL n=192 +$1.26 XLF · SELL n=94 +$1.17 XLF · BUY n=127 +$0.40 XLV · SELL n=54 +$0.26 XLV · BUY n=77 +$0.04 SPY · BUY n=206 -$0.16 SPY · SELL n=222 -$0.59 QQQ · BUY n=199 -$1.20 IWM · BUY n=184 -$2.18
SPY, QQQ, XLV, XLF, IWM · Mar 2024 – Aug 2026 · zero-collision-filtered. Same-bar entry/exit pricing artifacts removed. That's a measurement fix, not a tuning change. Total P&L +$1,295 across 1,569 priceable trades.