Delphi
0DTE SPY iron condor agent on Alpaca paper, conformal risk control, 31 hard gatesCompetition paper account PA31SEVJV9P9: brand-new, dedicated, $100,000 starting balance, options level 3; only the submitted agent has ever traded on it (from 2026-09-03). The 2026-09-02 pilot ran on a separate development account and is shown further down, labelled.
All times on this page are US/Eastern market time (ET; CEST is ET + 6 h). The audit log itself stores UTC. The page is regenerated from the log, not streamed: the last record above says how fresh it is.
We do not claim a statistically detectable edge. We claim a risk process that behaved exactly as specified.
agent statemarket closedlast record 09-03 16:31 ET
equity100,000.00 USDsession P&L +0.00, campaign +0.00
open positions0opened 0, closed 0
sessions on this account12026-09-03
code / configf715b88 / e027d9e92c252188 audit records; every record carries both hashes
halts / kill events0 / 0halts stop new risk, kills flatten
The account over the day
equity first 100,000.00, last 100,000.00, low 100,000.00, high 100,000.00; agent's session P&L at the last mark +0.00 $; position held in 0 of 1169 marks (no position all day: the flat line is the point); marks are written only while the market is open, 09:30 to 16:00 ET, because the account cannot change after the close
The certificate
Trade only if credit / wing at the expected fill ≥ β* + margin = 0.10 + 0.05 = 0.15, with the short strikes at or beyond the radius certified at β* (conformal risk control on the buyer's expected payout as a fraction of the wing). The margin is the modelled round-trip cost, so a passing trade is certified, in expectation and under exchangeability, not to lose after that cost. It is not a profit claim, and the guarantee is marginal while the gate selects (docs/THEORY.md, Theorem 3 remark v). A closed gate is the mechanism working.
certified level β*0.10expected payout / wing, bound by construction
calibrated sessions620daily.csv:ratio_1030 2024-01-02..202
realised payout ratio0.080mean over the set; by year 2024: 0.521, 2025: 0.468, 2026: 0.409
mean realised move / implied0.469score r before the radius is subtracted
online level β_t0.164may only tighten; above β* it has no effect
coverage level α_t0.215target 0.20; the coverage track, reported only
calibrated through2026-09-03last session k 0.557, outside
today's interval committed10:15 ETsession 2026-09-03, rule crc
anchor spot768.49VIX prev 15.20 → implied ref move 5.87 $
certified radius k0.557k_crc 0.557, k_cov 0.598, n 250
short strikes at or beyond765.22 / 771.76radius 3.27 $, wing 4.00 $
End-of-day scoring of the committed interval (every session counts, traded or not):
| session | realised ratio | k | payout ratio | β update | coverage | α update |
|---|---|---|---|---|---|---|
| 2026-09-03 | 0.788 | 0.557 | 0.338 | 0.1647 → 0.1635 | outside | 0.2190 → 0.2150 |
The ledger: P versus Q (gate 31)
Q = credit / wing at the expected fill, the market's price of the band (Breeden-Litzenberger). P = the empirical payout ratio at the candidate's strikes over the calibration set. The gate compares Q with β* + margin; P is shown for the reader, never used to trade. One row per candidate strike pair per session; n counts evaluations of that pair.
| committed (ET) | session | rule | beta_t | k_crc | alpha_t | k_cov | n | k used | VIX prev | implied ref move $ | anchor spot |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 09-03 10:15 | 2026-09-03 | crc | 0.1647 | 0.557 | 0.2190 | 0.598 | 250 | 0.557 | 15.2 | 5.87 | 768.49 |
Interval committed; no candidate strike pair has reached gate 31 yet.
Session 2026-09-03: every evaluation cycle the strategy prices the balanced condor at the configured wing; the red points are what the market offered as a fraction of the wing, the black line is the gate. Regenerate: python scripts/band_price.py --session 2026-09-03.
What a trade looks like: development pilot 2026-09-02 on account PA314NYH4H7G (not the competition account, not counted above)
One-contract pilot on a separate development account, under the fixed 1.10x strike rule, before the conformal rule, the re-quoting ladder and the gate at the expected fill went live. It is shown because it exercised the whole path once: regime vote, gates, critic, ladder, fill, exit. Its lessons are in docs/CONFIG_CHANGES.md; its full report is docs/report_2026-09-02.md. Under the rule that now runs, this day would not have traded either: the fill was 0.147 of the wing, the gate needs 0.15.
gate evaluations2
positions opened / closed1 / 1
realised P&L+14.00 USD
halts1
equity first 100,000.00, last 100,013.80, low 99,995.90, high 100,013.90; agent's session P&L at the last mark +14.00 $; position held in 148 of 1158 marks; marks are written only while the market is open, 09:30 to 16:00 ET, because the account cannot change after the close
Anatomy of the trade, from the audit log
| ET | step | record |
|---|---|---|
| 10:41:11 | regime vote | 3 calls, unanimous True: low / chop / scheduled_minor → IRON_CONDOR_0DTE, veto False |
| 10:41:14 | gates | 20 of 20 passed; condor 760/763/769/772, credit mid 0.49, natural 0.47, max loss 251 $ |
| 10:41:18 | critic | PASS: All inputs are consistent, the low-volatility chop regime aligns with the strategy rationale, and no concrete |
| 10:41:18 | ladder rung 0 | open-SPY: limit 0.49 (signed -0.49), qty 1 |
| 10:41:51 | ladder rung 1 | open-SPY: limit 0.48 (signed -0.48), qty 1 |
| 10:42:24 | ladder rung 2 | open-SPY: limit 0.47 (signed -0.47), qty 1 |
| 10:42:58 | ladder exhausted | unfilled after 3 rungs, last price 0.47; the natural credit fell faster than the ladder (fixed: every rung is re-quoted now) |
| 10:44:22 | gates | 20 of 20 passed; condor 760/763/769/772, credit mid 0.45, natural 0.43, max loss 255 $ |
| 10:44:27 | critic | PASS: All inputs are consistent, the regime is calm with no directional trend against a wing, and the short strikes |
| 10:44:27 | ladder rung 0 | open-SPY: limit 0.45 (signed -0.45), qty 1 |
| 10:45:00 | ladder rung 1 | open-SPY: limit 0.44 (signed -0.44), qty 1 |
| 10:45:02 | filled | open-SPY: rung 1 at 0.44 |
| 10:45:02 | position opened | 1 contract(s), credit 0.44, max loss 255 $, S769C, B772C, S763P, B760P |
| 10:45:06 | halt | position reconciliation mismatch: SPY260902P00760000: book 1 vs broker -1; SPY260902C00772000: book 1 vs broker -1 (a false mismatch: side strings compared case-sensitively; new risk stopped as designed; fixed in cb441a8) |
| 11:34:07 | exit | take profit 50% of credit: close mid 0.22, natural 0.26, ladder [0.22, 0.24, 0.26, 0.33] |
| 11:34:07 | ladder rung 0 | close-a2f50e: limit 0.22 (signed 0.22), qty 1 |
| 11:34:40 | ladder rung 1 | close-a2f50e: limit 0.24 (signed 0.24), qty 1 |
| 11:35:14 | ladder rung 2 | close-a2f50e: limit 0.26 (signed 0.26), qty 1 |
| 11:35:47 | ladder rung 3 | close-a2f50e: limit 0.33 (signed 0.33), qty 1 |
| 11:35:49 | filled | close-a2f50e: rung 3 at 0.3 |
| 11:35:49 | position closed | take profit 50% of credit: entry 0.44, exit 0.30, P&L +14.00 $ |
Decisions
gate evaluations / rejections0 / 0all 31 gates run on every candidate
positions opened / closed0 / 0ladder: mid-1 tick, natural, natural
realised P&L (closed)+0.00 USD
entry slippage vs mid+0.00 USD
LLM decisions unanimous0 / 0disagreement is abstention
NO_TRADE cycles315108 distinct reasons
Gate ledger: no candidate evaluated yet.
NO_TRADE reasons
| count | reason |
|---|---|
| 10 | strategy: short leg quoted wider than 5 ticks: ['SPY260903P00765000'] |
| 9 | strategy: no acceptable wing: wing 4: credit 0.23 < 1.20 (15% of wing x ratio 2) |
| 9 | strategy: no acceptable wing: wing 4: credit 0.09 < 0.60 (15% of wing); wing 3: |
| 9 | strategy: no acceptable wing: wing 4: credit 0.08 < 0.60 (15% of wing); wing 3: |
| 8 | strategy: no acceptable wing: wing 4: credit 0.12 < 1.20 (15% of wing x ratio 2) |
| 8 | strategy: no acceptable wing: wing 4: credit 0.10 < 1.20 (15% of wing x ratio 2) |
| 7 | strategy: no acceptable wing: wing 4: credit 0.14 < 1.20 (15% of wing x ratio 2) |
| 7 | strategy: no acceptable wing: wing 4: credit 0.07 < 1.80 (15% of wing x ratio 3) |
| 7 | strategy: no acceptable wing: wing 4: credit 0.06 < 0.60 (15% of wing); wing 3: |
| 6 | strategy: no acceptable wing: wing 4: credit 0.21 < 0.60 (15% of wing); wing 3: |
| 6 | strategy: no acceptable wing: wing 4: credit 0.09 < 1.80 (15% of wing x ratio 3) |
| 6 | strategy: no acceptable wing: wing 4: credit 0.06 < 1.80 (15% of wing x ratio 3) |
| 5 | strategy: no acceptable wing: wing 4: credit 0.11 < 1.80 (15% of wing x ratio 3) |
| 5 | strategy: no acceptable wing: wing 4: credit 0.17 < 0.60 (15% of wing); wing 3: |
| 5 | strategy: no acceptable wing: wing 4: credit 0.11 < 1.20 (15% of wing x ratio 2) |
| 5 | strategy: no acceptable wing: wing 4: credit 0.15 < 1.20 (15% of wing x ratio 2) |
| 5 | strategy: no acceptable wing: wing 4: credit 0.10 < 0.60 (15% of wing); wing 3: |
| 5 | strategy: no acceptable wing: wing 4: credit 0.07 < 0.60 (15% of wing); wing 3: |
| 4 | strategy: no acceptable wing: wing 4: credit 0.24 < 1.80 (15% of wing x ratio 3) |
| 4 | strategy: no acceptable wing: wing 4: credit 0.19 < 0.60 (15% of wing); wing 3: |
Positions
none
LLM
regime decisions 0 (families {}); critic verdicts {}; regime call latency ms min/median/max: - / - / -. The models return categories only (regime, family, veto); every number comes from code.
no LLM calls yet
Term-structure event variance (Dubinsky et al. 2019)
sigma_event None between 2026-09-03 and 2026-09-04; ATM IV 0.05367867990274362 vs 0.12835
last chain: 92 contracts, 76 quotable, feed Greeks 0, model Greeks 61
Evidence at T = 3: two e-processes and a ceiling
Risk process (evidence against the certificate, null E[payout ratio | past] ≤ beta*): over 620 calibrated sessions the running maximum is 2.66, anytime-valid p-value 0.38 (below 0.05 would reject the certificate). Reported, never used to halt.
Profit process: no traded session with a closed payout ratio yet.
Ceiling: T perfect sessions at credit/wing g give at most (1/(1-g))^T; at g = 0.20 three perfect sessions reach 1.95, i.e. p ≥ 0.51, and p ≤ 0.05 needs 14 consecutive perfect packages. That is why no Sharpe ratio appears on this page. Details: docs/evidence.md.
The rule in one picture
The buyer's expected payout as a fraction of the wing falls with the radius; where the finite-sample-inflated curve first crosses beta* is the certified radius, and the short strikes go there. Regenerate: python scripts/risk_curve.py.
Configuration changes since the first live cycle
Every pre-registered parameter changed after 2026-09-02 10:00 ET, with date, evidence and effect: docs/CONFIG_CHANGES.md. Each audit record carries the config hash that produced it.
Journal (last entries)
no journal entries yet
Not reported, on purpose
Sharpe ratio, win rate, annualised return, profit factor. With a handful of observations these are noise: the minimum track record to certify an annualised Sharpe of 1.0 at 95 % with skew -1.5 and kurtosis 6 is 751 daily observations (Bailey & Lopez de Prado 2014).