Skip to content

docs(research): the Alpaca options venue reality, marked doc-only where it is (#636) - #753

Merged
eaitbrahim merged 1 commit into
mainfrom
research-636-alpaca-options-reality
Sep 7, 2026
Merged

docs(research): the Alpaca options venue reality, marked doc-only where it is (#636)#753
eaitbrahim merged 1 commit into
mainfrom
research-636-alpaca-options-reality

Conversation

@eaitbrahim

Copy link
Copy Markdown
Contributor

Discovery for #636. No code, no rail change, no config — one document under docs/research/.

It does not close #636, and says so first

#636 forbids deciding from documentation alone (#412's lesson). This session holds no Alpaca credential, so everything here is documentation, and every finding carries a mark: [DOC] quoted from Alpaca, [DOC-GAP] unanswered, [KEEL] verified in this source tree, [ARITH] derived with the arithmetic shown.

The five findings that matter

F1 — the load-bearing question is undocumented. Alpaca offers no cash accounts ("All accounts are set up as margin accounts"); keel already handles that with the multiplier == 1 proxy via max_margin_multiplier. Whether options approval survives that setting is stated nowhere. If enabling options forces the multiplier above 1, verify_cash_account raises and the adapter stops building — options would be a destructive change to the equities trading that already ships.

F5 — rail 19 already refuses an OCC symbol, and says why. SPY250127C00608000 has no hyphen, so parse_spot_product_id returns None. The rail runs in every mode, both sides, DCA included — deliberately outside LIVE_STATE_RAILS, so paper cannot skip it: there is no rehearsal path. No config widens it, and the comment says "Spot-only is this agent's CHARTER, not an operator preference." Options aren't blocked by a missing feature; they're blocked by the rail that encodes the constitution. That sizes the amendment #637 is considering.

F3 — the venue disposes of inventory by itself. ITM contracts auto-exercise at $0.01, and where buying power is short, "Alpaca will sell-out the position within 1 hour before expiry." F2 — assignment arrives by polling only: "Options assignments are not delivered through websocket events." It is also the first inventory event with no originating keel order.

F6 — the fees are negligible, and that is the trap. Round trip ≈ $0.084/contract; a cash-secured put's opening leg is 4.6 bp of premium. The real cost is the bid-ask spread, which no document states. Arguing this ADR from the fee schedule would repeat exactly the error 2026-09-05-restatement-restated.md corrected for crypto — where the flat 5bp floor turned out to be 52.3bp median and the verdict went to 0 of 240.

F7 — unexecutable today regardless. A cash-secured put is collateralised at strike × 100, unfractionalisable: $1,800 for the cheapest plausible underlying against config.live.yaml's budget_usd: 50. ~36× the deployment's clip — decidable with no jurisprudence at all.

One note on method

The fee table is read from the PDF directly (schedule revised 2026-09-01) because an automated extraction of that same file reported OCC at $0.65 against an actual $0.025. The doc-only hazard #636 warns about reproduced itself inside this pass, so it's recorded in the document.

What's left

Paper accounts get Level 3 automatically, so the mechanical half (F2's activity records, F4's multi-leg payload, real bid-ask on touchable strikes) is verifiable free and needs no options agreement. But paper grants Level 3 to everyone, so it can never answer F1 — that needs Alpaca support in writing, or a live application. The document marks which half is which.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KZZxmspQXe5qJ9FAsG13s6

…re it is (#636)

#636 asks six questions and forbids answering them from documentation alone --
#412's lesson, where Robinhood's order shapes were doc-only until a real order
403'd. This session holds no Alpaca credential, so EVERYTHING here is
documentation, and every finding carries a mark saying so: [DOC], [DOC-GAP],
[KEEL], [ARITH]. The document opens by stating it does not close the issue.

THE QUESTION THAT MATTERS IS NOT ANSWERED ANYWHERE

Alpaca offers no cash accounts -- "All accounts are set up as margin accounts" --
which keel already knows and already handles: `verify_cash_account` refuses any
`multiplier` but 1, the posture an operator reaches via
`max_margin_multiplier: 1`. Whether options approval SURVIVES that setting is
documented nowhere. If enabling options forces the multiplier above 1, the
adapter stops building at all and options become a destructive change to the
equities trading that already ships.

Per #636's own rules, an unanswerable question is a finding that weights toward
holding the line.

RAIL 19 ALREADY REFUSES AN OCC SYMBOL, AND SAYS WHY

`SPY250127C00608000` has no hyphen, so `parse_spot_product_id` returns None and
rail 19 vetoes -- in every mode, both sides, DCA included, deliberately outside
`LIVE_STATE_RAILS` so paper cannot skip it. There is no config field to widen it
and the comment says why: "Spot-only is this agent's CHARTER, not an operator
preference." Options are not blocked by a missing feature; they are blocked by
the rail that encodes the constitution. That sizes the ADR-0005 amendment
exactly.

THE VENUE DISPOSES OF INVENTORY BY ITSELF

ITM contracts auto-exercise at $0.01, and where buying power is short, "Alpaca
will sell-out the position within 1 hour before expiry". keel's premise
everywhere is that nothing disposes of inventory but its own exit policy.
Assignment, meanwhile, arrives by POLLING only -- "Options assignments are not
delivered through websocket events" -- so it is also the first inventory event
with no originating keel order.

THE FEES ARE NEGLIGIBLE AND THAT IS THE TRAP

Read from the fee schedule PDF revised six days ago, because an automated
extraction of the same file reported OCC at $0.65 against an actual $0.025 --
the doc-only hazard reproducing itself inside this pass. Round trip is about
$0.084/contract; a cash-secured put's opening leg is 4.6bp of premium. The real
cost is the bid-ask spread, which no document states, and arguing an options ADR
from the fee schedule would repeat precisely the error
2026-09-05-restatement-restated.md corrected for crypto.

AND IT IS UNEXECUTABLE TODAY REGARDLESS

A cash-secured put is collateralised at strike x 100 and cannot be fractionalised:
$1,800 for the cheapest plausible underlying against `config.live.yaml`'s
`budget_usd: 50`. Roughly 36x the deployment's clip, decidable without any
jurisprudence.

Paper accounts get Level 3 automatically, so the mechanical half is verifiable
free -- but paper grants it to everyone, so it can never answer the account-
posture question. The document says which half is which.

Discovery only: no code, no rail change, no config.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KZZxmspQXe5qJ9FAsG13s6
@eaitbrahim
eaitbrahim merged commit a86bfa5 into main Sep 7, 2026
1 check passed
@eaitbrahim
eaitbrahim deleted the research-636-alpaca-options-reality branch September 7, 2026 17:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Alpaca options: verify the venue reality before any commitment — agreement, cash-account support, multi-leg, assignment events

1 participant