01
Claude reasons. Python calculates.
The model proposes a thesis and a structure. It never computes Greeks, position sizes, or stop-losses. Every number it suggests is discarded and recomputed deterministically.
TRADEEASY — PERSONAL OPTIONS TOOL
A semi-automated research tool that generates directional options ideas, runs them through a deterministic risk gate, and queues them for my review. Claude provides the thesis. Python owns every number. I pull the trigger.
PIPELINE — TWO MODES, ONE ENGINE
SCAN WATCHLIST / ANALYZE TICKER
CLI: optsig scan · optsig analyze TICKER
4 DETERMINISTIC SCREENS
yfinance · price trend · IV/HV · volume · momentum
CLAUDE THESIS
claude-opus-4-8 · structured output · prompt-cached system prompt
RISK GATE + GREEKS
Black-Scholes · position sizing · stop-loss · all recomputed
HUMAN APPROVAL QUEUE
Streamlit UI · full ticket review · my decision
IBKR BRACKET ORDER — transmit=False
ib_async · paper trading · manual transmit
optsig scan sweeps the full watchlist through all four screens and queues every name that clears. optsig analyze TICKER runs the same engine on a single name, on demand.
Either path terminates at the same approval queue. The engine is the same. The risk gate is the same. The human step is the same.
DESIGN PRINCIPLES
01
The model proposes a thesis and a structure. It never computes Greeks, position sizes, or stop-losses. Every number it suggests is discarded and recomputed deterministically.
02
The system's output is a queue of proposals. Nothing becomes actionable until I approve it. On approval, a bracket order stages to IBKR paper trading with transmit=False. Final transmit is always mine.
03
Allowed structures: long_call, long_put, call_debit_spread, put_debit_spread. Naked positions and undefined-risk structures are rejected in the system prompt and re-validated in code.
04
Every proposal — input bundle, raw model output, recomputed risk, my decision, fills — is persisted to SQLite. This is how I learn whether the signals are any good.
TECH STACK
The data layer is intentionally hybrid. yfinance handles cheap broad screening — the kind of data pull you do across 20+ names. Only names that clear a deterministic screen get routed to IBKR for real-time quotes and broker Greeks. This keeps the tool under Yahoo's rate limit and off IBKR's market-data line limits.
IV rank is a known proxy: yfinance doesn't provide historical implied vol, so the screen uses IV/HV ratio as a stand-in. It's labeled as such everywhere. A real IV rank source can drop in without touching the engine.
PROPOSAL SCHEMA — §5B
{ "ticker": "NVDA", "structure": "call_debit_spread", "risk_type": "medium", "entry": { "net_debit_per_contract": 620, "contracts": 2 }, "risk": { "max_loss": 1240, "max_gain": 1760, "risk_reward": 1.42 }, "stop_loss": { "premium_stop_per_contract": 310, "underlying_stop": 122.4 }, "greeks": { "delta": 0.31, "theta": -3.1, "vega": 11.2, "source": "black_scholes" }, "horizon": { "dte": 57, "manage_by": "2026-08-01" }, "thesis": "...3-4 sentences from Claude grounded in the data bundle...", "confidence": 0.68, "status": "pending"}PERSONAL USE ONLY — NOT TRADING ADVICE
This is a personal research tool for my own capital. It does not give financial advice. All trade decisions are mine. Data is delayed. IV/HV ratio is a proxy. The system can and will be wrong.
View source →