← Docs

📈 Options

A complete, novice-friendly reference for how options actually work and what this bot does with them. If you've never touched an options chain before, start at the top — every concept is built up from scratch with concrete dollar examples.

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.

ModeWhat it doesWhen it fits
overlay (default)Buy half the shares, add a long call on topDefault. Safest on paper accounts where the chain sometimes can't produce a qualifying contract.
replaceConvert a stock signal into one long call/putLow-IV-rank regimes where you want leverage without share capital.
covered_callLong stock + sell OTM call against itFlat-to-mildly-bullish regimes; generates income.
cash_secured_putSell OTM put, hold cash to buy if assignedNames you'd be happy to own at a lower entry.
vertical_debitBuy + sell same-expiry to cap both upside and lossDirectional conviction with a defined target price.
vertical_creditSell + buy further-OTM, collect net creditHigh-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.

FilterDefaultPurpose
delta_target_min/max0.30 – 0.40Long-premium sweet spot — leverage without peak gamma.
short_delta_target0.20 – 0.30Further OTM so assignment odds stay low.
dte_target_min/max30 – 45Avoid both theta cliff and over-paying for far-dated theta.
min_open_interest500Liquidity floor; thin contracts have wide spreads.
max_spread_pct10%Bid-ask spread ceiling. Wider = liquidity trap.
max_iv_rank0.80Refuse 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 P
  • AAPL — underlying (padded to 6 chars).
  • 250621 — expiration June 21, 2025.
  • C — call (P for 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:

FlagDefaultEffect
auto_close_long_stockfalseOn CSP assignment, leave the new shares alone (false) or auto-close at market.
auto_cover_short_stocktrueOn 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.

CapDefaultWhat it does
max_options_exposure10%Total premium at risk ≤ 10% of equity.
max_options_single_contract2%One contract ≤ 2% of equity.
max_options_per_underlying5%All options on one ticker ≤ 5%.
max_options_vega0.005Portfolio vega ≤ 0.5%-equity per vol-point.
max_options_theta0.002Daily theta bleed ≤ 0.2%-equity.
options_min_dte7Never open below 7 DTE.
options_close_before_expiry5Force-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.