# options-wheel-trading-system

> Paper-trading the Options Wheel strategy on ETFs and blue-chip stocks

## What It Does
Runs the options wheel loop: sell a cash-secured put (CSP) on a name you'd happily own; if it expires worthless, collect the premium and repeat; if assigned, sell covered calls (CC) until called away, then return to cash. The goal is income generation in "almost win-win" situations — the only real loss path is a sharp crash on an underlying held below its strike. Watchlist is restricted to ETFs and blue-chips the operator would genuinely hold long-term (SPY, QQQ, AAPL, MSFT, KO, JNJ).

## Tech Stack
- Language: Python 3
- Options pricing: Black-Scholes proxy (20-day historical vol) — no live chain yet
- Data: shared `_trading_lib.marketdata` (daily OHLCV, indicators)
- Key deps: `_trading_lib` (verify_gate WHEEL_VERIFIERS, notify, fleet engine)

## Key Features
- Full wheel state machine: CSP → assigned → CC → called away → back to CSP
- Low-delta puts (~0.18) and calls (~0.22) for conservative, high-POP entries
- Cash-secured only (no margin); earnings weeks skipped; 35 DTE monthly cadence
- Pre-trade gate: ≥2 of the WHEEL_VERIFIERS must approve before booking any leg
- $20k paper book; whole contracts only; one active leg per name

## How to Run
```bash
cd /home/barry/projects/options-wheel-trading-system
python3 wheel.py
```
Each run advances every name one step (settles expiries, opens new legs). Cron-scheduled as part of the fleet. State in `data/paper_state.json`; positions log in `logs/positions.csv`.

## Status
Working (paper-trading) — $20k paper book live. Current stats (2026-07-05): $20,435.52 equity (+$435.52, +2.18%), 1 open leg. Note: option premiums are model-priced (Black-Scholes proxy on 20-day historical vol); replace `bs()` with a real options chain feed (e.g. Tradier/yfinance options) to go fully live.
