01What an option actually is
An option is a contract that gives the buyer the right — but not the obligation — to buy or sell 100 shares of a stock at a fixed price (the strike) on or before a fixed date (the expiration). The buyer pays the seller a one-time fee called the premium.
Think of it like a restaurant reservation. For a small fee, you reserve the right to buy 100 shares at a specific price anytime before the reservation expires. If the market price moves in your favor, you cash in. If it doesn't, you let the reservation expire — you lose the fee, but nothing more.
Two catches: the premium is non-refundable, and the reservation has a hard deadline. If the stock eventually does what you wanted but only after your option expires, you get nothing.
Options are leveraged, wasting assets. It is trivially easy to lose 100% of the premium you pay. With short options, the loss can exceed your collateral. Paper-trade first.
02Calls vs. puts
There are exactly two flavors of option. Both are bets on direction, just opposite directions.
📈 Call — bet on up
A call gives the holder the right to buy 100 shares at the strike. Payoff at expiry is max(S − K, 0) × 100. Used as leveraged long exposure.
Example: stock trades at $100. You buy a $105 call for $2 ($200 total). At expiry, if the stock is at $115, the call is worth $10 ($1,000 total) — a 5× return on your $200. If the stock is at $103, the call expires worthless and you lose your $200.
📉 Put — bet on down
A put gives the holder the right to sell 100 shares at the strike. Payoff at expiry is max(K − S, 0) × 100. Used as a leveraged short or as portfolio insurance.
Example: stock trades at $100. You buy a $95 put for $2. If the stock crashes to $80, the put is worth $15 ($1,500 total) — 7.5× your money. If the stock stays above $95 by expiry, the put is worthless.
03The four Greeks — what each one feels like
Option prices respond to multiple inputs at once. The Greeks measure how sensitive the price is to each input. You cannot trade options responsibly without being fluent in the first four.
Δ Delta — directional exposure
How much the option price moves for a $1 move in the stock. Calls run 0 to +1; puts run −1 to 0. ATM ≈ 0.50. Think of it as how “stock-like” the option is. A 0.30Δ option gains roughly $30 per contract for every $1 the stock rises.
The bot targets 0.30–0.40Δ for long premium and 0.20–0.30Δ for short premium so assignment odds stay low.
Γ Gamma — acceleration of delta
If delta is speed, gamma is acceleration. It tells you how fast delta itself changes. Gamma peaks at-the-money and explodes in the final 1–2 weeks before expiry — the classic “gamma cliff.” Small stock moves can flip an option from worthless to wildly profitable (or the reverse) overnight.
The bot targets 30–45 DTE specifically to avoid peak gamma, and force-closes at 5 DTE.
Θ Theta — time decay
How much value the option loses per day, all else equal. An option is a wasting asset. Every day that passes, it loses a bit just because there's less time for the stock to move. For long options, theta is a headwind you're paying for. For short options, it's a tailwind you collect.
ν Vega — volatility exposure
How much the price changes per 1% change in implied volatility. Options get more expensive when the market is scared and cheaper when it calms down. Buying long options when fear is already high means paying peak price for insurance — and if fear calms down, you lose money even if the stock moves the right way.
The bot refuses to open long premium when IV rank > 0.80 (top 20% of the trailing year). Single biggest discipline in long-options trading.
04Strategy modes the bot supports
The options sleeve runs in one of six modes, set via options.adapter.mode in config/settings.yaml. Only one is active at a time per underlying.
| Mode | What it does | When it fits |
|---|---|---|
overlay (default) | Buy half the shares, add a long call on top | Default. Safest on paper accounts where the chain sometimes can't produce a qualifying contract. |
replace | Convert a stock signal into one long call/put | Low-IV-rank regimes where you want leverage without share capital. |
covered_call | Long stock + sell OTM call against it | Flat-to-mildly-bullish regimes; generates income. |
cash_secured_put | Sell OTM put, hold cash to buy if assigned | Names you'd be happy to own at a lower entry. |
vertical_debit | Buy + sell same-expiry to cap both upside and loss | Directional conviction with a defined target price. |
vertical_credit | Sell + buy further-OTM, collect net credit | High-IV-rank regimes — sell premium with capped damage. |
Heads up: default is now overlay, not replace. In replace mode, if every contract in the chain fails the selector's filters (common on paper feeds with missing greeks), the entire signal is silently dropped. Overlay always keeps the stock leg as a safety net.
05DTE + IV rank + how the bot picks a contract
Given a directional signal, the selector walks the option chain and picks the single best contract by a weighted score across delta, days-to-expiry, liquidity, and spread.
| Filter | Default | Purpose |
|---|---|---|
delta_target_min/max | 0.30 – 0.40 | Long-premium sweet spot — leverage without peak gamma. |
short_delta_target | 0.20 – 0.30 | Further OTM so assignment odds stay low. |
dte_target_min/max | 30 – 45 | Avoid both theta cliff and over-paying for far-dated theta. |
min_open_interest | 500 | Liquidity floor; thin contracts have wide spreads. |
max_spread_pct | 10% | Bid-ask spread ceiling. Wider = liquidity trap. |
max_iv_rank | 0.80 | Refuse long premium when IV is already in the top 20% of the year. |
In plain English: the bot shops the chain for an option that's in the right zone, neither too close to nor too far from expiring, actively traded enough that there's a real market, and not overpriced versus recent history. If nothing passes, it skips the trade entirely.
06OCC symbols — decoding the trade log
Every US option has a 21-character OCC symbol. When the trade log shows something cryptic, don't panic — it's just a compact code packing ticker, date, C/P, and strike into one fixed-width string.
AAPL 250621C00200000
└──┘ └────┘│└──────┘
ROOT YYMMDD│ STRIKE×1000
C or PAAPL— underlying (padded to 6 chars).250621— expiration June 21, 2025.C— call (Pfor put).00200000— strike $200.000 (divide by 1000).
Same idea as a VIN number on a car — packs all the identifying info so exchanges can parse it unambiguously.
07Assignment and expiration mechanics
US equity options are American-style: the holder may exercise any trading day before expiry. Assignment is random (OCC allocation) among short-side holders. Cash dividends and deep-ITM puts on ex-div eve are the biggest early-assignment drivers.
In plain English: if you bought an option and it's profitable at expiration, the OCC automatically exercises it for you — no action needed. If you sold one and it finishes ITM, you get assigned: either you buy the stock (sold a put) or your shares are bought from you (sold a call).
The bot force-closes all options 5 trading days before expiry specifically to avoid the chaos of expiration- week assignment. The options.assignment block controls post-assignment behavior:
| Flag | Default | Effect |
|---|---|---|
auto_close_long_stock | false | On CSP assignment, leave the new shares alone (false) or auto-close at market. |
auto_cover_short_stock | true | On CC assignment without underlying shares, buy to cover immediately. |
08Risk caps you cannot turn off
Even if a signal is generated and a contract is selected, the risk manager gets final say. These caps live under risk: in settings.yaml and apply regardless of mode.
| Cap | Default | What it does |
|---|---|---|
max_options_exposure | 10% | Total premium at risk ≤ 10% of equity. |
max_options_single_contract | 2% | One contract ≤ 2% of equity. |
max_options_per_underlying | 5% | All options on one ticker ≤ 5%. |
max_options_vega | 0.005 | Portfolio vega ≤ 0.5%-equity per vol-point. |
max_options_theta | 0.002 | Daily theta bleed ≤ 0.2%-equity. |
options_min_dte | 7 | Never open below 7 DTE. |
options_close_before_expiry | 5 | Force-close at 5 DTE regardless of P&L. |
Think of these as seatbelts that can't be unbuckled. They're how you avoid the classic blow-up pattern of “I had one bad trade and lost 80% of the account.”
09Broker approval levels
Brokers gate options behind an approval tier. On Alpaca (and most US brokers), the levels run roughly:
- Level 1 — covered calls + cash-secured puts. The income strategies. Anyone with a brokerage account can usually qualify.
- Level 2 — long calls + long puts. The directional bets. Requires a short application describing your experience and net worth.
- Level 3 — vertical spreads (debit and credit). Defined-risk multi-leg strategies. More paperwork, often a higher account-size minimum.
- Level 4 — naked short options. The bot does not use this tier. Skip it.
If your account is approval-Level-1 only, the bot will still work but you must set options.adapter.mode to covered_call or cash_secured_put. Other modes will be rejected by the broker at order time.
10When NOT to use options
Options are not always the right tool. Skip them entirely when:
- You haven't paper-traded for at least a month. The math is unforgiving and the feedback loop is slow. Burn fake money first.
- IV rank is above 80. You're paying the peak fear-premium. Wait for vol to mean-revert, or sell premium instead of buying it.
- Your account is under ~$10k. Round-lot economics (100 shares per contract) plus per-trade slippage mean small accounts get eaten by spread costs before they can compound.
- You need the cash within 3 months. Time decay punishes anyone who isn't patient. Options are a wrong tool for short-horizon savings.
- You can't articulate the thesis in one sentence. If you can't finish the sentence “I think SPY will be above $X by date Y because Z,” you're gambling, not trading.