Raxx · internal docs

internal · gated ↑ index

Layered Covered Call Income Cycle — Strategy Spec

Strategy ID: lcc-income-cycle Status: Research / Pre-backtest Date: 2026-05-05 Analyst: Data-scientist agent (Raxx) Source Brief: Kristerpher's "Covered Call Income Cycle" brief, 2026-05-04


1. Plain-English Summary

The Layered Covered Call Income Cycle (LCC) sells short-dated (typically weekly) covered calls against an owned share position using a multi-strike distribution rather than a single ITM strike. The distribution varies by the trader's pre-committed sentiment label (Neutral / Bullish / Bearish / High-Uncertainty). The system tracks premium income, realized P/L from assignment, tax-lot accounting, and re-entry decisions as explicit state transitions — not discretionary judgments made under pressure.

This is a paper-trading simulation first. No live broker calls are part of this specification.


2. Hypothesis

Primary: A layered strike distribution (1-2 ITM + 1-2 ATM/OTM + optional uncovered shares) produces higher net cycle P/L per week than a single full-ITM covered call structure, primarily by preserving some upside participation and reducing the frequency of below-cost assignment.

Secondary: Pre-committed sentiment labeling (applied before market open) outperforms reactive strike selection at open, because it removes intra-day anchoring bias from the execution path.

What "better" means in this context: Net cycle P/L = premium collected + assignment proceeds + unrealized equity change, compared against a baseline of (a) buy-and-hold, (b) single-strike full-ITM covered call, and (c) selling no calls at all.

Neither hypothesis constitutes a prediction. Both are empirically testable on historical paper-trade data after simulation is instrumented.


3. Universe and Scope

Parameter Value
Initial ticker AMZN
Expansion universe (Phase 2+) High-liquidity large-cap: AAPL, MSFT, NVDA, SPY, QQQ
Liquidity screen Avg daily option volume > 50K contracts; bid/ask spread on ATM weekly ≤ $0.05
Expiration focus Weekly (Fri exp); monthly allowed for rolls
Share cap (paper) 800 shares per ticker (configurable)
Call constraint Short calls ≤ floor(shares / 100); no naked calls unless explicitly enabled
Excluded periods Within 5 calendar days of confirmed earnings date
Tax-lot method Default LIFO; supports FIFO, HighCost, LowCost, SpecificID

4. State Machine — Position Lifecycle

States and legal transitions:

NO_POSITION
  → [buy shares] → LONG_SHARES

LONG_SHARES
  → [sell calls] → CC_ACTIVE
  → [no calls sold] → LONG_SHARES (hold)

CC_ACTIVE
  → [DTE > 2] → CC_ACTIVE (monitor/roll)
  → [DTE ≤ 2] → NEAR_EXPIRATION

NEAR_EXPIRATION
  → [all calls OTM at exp] → LONG_SHARES (calls expire worthless, keep premium)
  → [≥1 call ITM at exp] → ASSIGNED (partial or full)
  → [manual buy-back before exp] → LONG_SHARES or CC_ACTIVE

ASSIGNED
  → [re-entry criteria met] → LONG_SHARES (re-buy shares, restart cycle)
  → [re-entry criteria not met] → NO_POSITION (wait)

NO_POSITION
  → [re-entry criteria met] → LONG_SHARES

Each transition records: timestamp, price, lot affected, P/L contribution, reason code.


5. Sentiment Label — Pre-Committed Before Open

Sentiment is assigned the night before or pre-market. Once committed, it governs the day's call structure. It cannot be changed intra-day except by a manual override with a logged reason.

Label Condition Examples (pre-committed) Call Structure (per 400 shares)
Neutral No strong directional view 2 ITM + 2 ATM/OTM
Bullish Price near support, positive sector flow 1 ITM + 2 OTM + 100 uncovered
Bearish Price near resistance, negative macro 3 ITM + 1 ATM
High-Uncertainty Macro event, FOMC, sector catalyst 1 ITM + 1 ATM + 1 OTM + 100 uncovered

Sentiment label is the trader's pre-committed input — not a model output. The system enforces whatever structure corresponds to the label. The AI layer may surface historical context (prior weeks at similar price/IV, prior assignment outcomes) but does not override the label.


6. Strike Selection Rules

Zone Delta Range Use Case
ITM 0.60 – 0.75 Neutral-bearish; high premium; assignment more likely
ATM 0.45 – 0.55 Balanced premium vs. upside
OTM 0.25 – 0.40 Bullish tilt; lower assignment probability

Delta is measured at time of entry (post open, after price-action check per Section 7). Targets are approximations; nearest tradeable strike within ±$2.50 is acceptable if delta constraint is met.


7. Opening Bell Execution Rule

The system does not fire sells at market open. Price-action check runs 10 minutes after open:

Market Condition at T+10 Action
Flat (±0.3% vs prior close) Sell per sentiment structure immediately
Gap up >0.5% Wait 10–30 min; target strikes at ATM/OTM from new price
Gap down >0.5% Sell fewer calls (reduce by 1 contract) or raise strike by one step; log reason
Gap down >1.5% Hold all sells; re-evaluate at T+30; log "gap-down hold"

"Gap" is defined as (open – prior close) / prior close. Thresholds are configurable. The system logs the condition at T+10 and the resulting action for every cycle.


8. Exit / Roll Decision Tree

This tree is pre-committed. The system flags when a condition is met; the trader confirms (Phase 1–2) or the rule executes automatically (Phase 3+, paper only).

Premium remaining > 85% of original credit?
  No → hold
  Yes → buy back (lock profit)

Stock dropped significantly after sell?
  Extrinsic value < $0.10?
    Yes → buy back (cheap); recapture upside
    No → hold

Stock surged; short call now deep ITM?
  Net credit available to roll up/out?
    Yes → roll up (same expiration) or roll out (next week, same/higher strike)
    No → evaluate: let assignment happen, or pay debit to close

Assignment acceptable at this strike?
  Strike >= cost basis of lot being assigned?
    Yes → let assignment happen; log as "intentional exit"
    No → evaluate roll or close; log as "below-cost assignment risk"

DTE = 0 (expiration day) and call is ITM?
  → Assignment expected; prepare lot selection and re-entry criteria check

9. Assignment Handling

  1. Remove 100 shares per assigned contract from position, applying the configured tax-lot method (LIFO default).
  2. Record: assignment price, lot cost basis, assignment P/L = assignment price − lot cost basis.
  3. Add premium already collected to premium_collected ledger (premium was booked at sale, this step finalizes the cycle entry).
  4. Evaluate re-entry criteria (Section 10).
  5. Rebuild call layer on remaining shares if any remain.

Assignment is a designed outcome, not a failure. The system never marks assignment as a loss event automatically — the P/L calculation determines outcome.


10. Re-entry Criteria (All Must Pass)

Criterion Check
Ticker still in approved universe Y/N lookup
Price not extended Price ≤ 1.5× 20-day avg range above prior close
New premium justifies cycle ATM weekly credit ≥ 0.3% of current stock price
No concentration breach Post-re-entry share count ≤ configured max (800 default)
No binary risk event within 5 days Earnings calendar check
Not flagged for "chasing" ≤2 re-entries in same week at higher price than assignment

If any criterion fails, state remains NO_POSITION and the system logs which criterion blocked re-entry.


11. Risk Controls (Formalized)

Control Rule Action on Breach
Covered call constraint short_calls ≤ floor(shares / 100) Block sell order; log
Max share exposure shares ≤ 800 per ticker (paper default) Block re-entry; alert
High assignment risk flag ITM call, DTE ≤ 2, extrinsic < $0.15, delta > 0.75 Alert: "high assignment risk"
Ex-dividend flag Ex-div date within 3 calendar days Alert: early assignment risk elevated
Below-cost assignment flag Strike < lot cost basis Alert: "below-cost assignment"
Consecutive below-cost assignments ≥ 3 in rolling 30 days Alert: "pattern flag — review strategy sizing"
Consecutive all-ITM sells ≥ 3 weeks in a row Alert: "overuse of ITM — review sentiment labels"
Re-entry recency flag Re-entered within 1 trading day of assignment Alert: "immediate re-entry — chasing pattern?"
Opening-bell sell flag Sell executed within 5 min of open Alert: "opening bell sell — price action check bypassed"

12. Edge Cases Not Covered in the Original Brief

These require confirmation from Kristerpher before implementation:

EC-1: Early assignment (American-style) AMZN options are American-style. Early assignment can occur when extrinsic value approaches zero (typically for deep ITM calls near ex-dividend). The system must check daily whether any short call has extrinsic ≤ $0.05 and flag early assignment risk. The brief does not specify handling — recommend treating as identical to standard assignment (Section 9) and logging the "early" flag.

EC-2: Dividend-driven early assignment If AMZN reinstates a dividend (currently none), holders of short calls with strike below ex-div price may be assigned the night before ex-div. The system should block new ITM call sells within 5 days of any future ex-div date for dividend-paying tickers in the universe. No current risk for AMZN but architecture must support it.

EC-3: Trading halt during expiration If the underlying halts on expiration Friday, OCC standard procedure is to extend the expiration window. The system should not auto-act on expiration day until after 4:00 PM ET confirmation. Paper-trading state machine holds at NEAR_EXPIRATION until confirmed.

EC-4: IV crush post-event If IV collapses after a catalyst (e.g., broad market spike, FOMC), extrinsic on open calls evaporates. The system should detect when a held call's extrinsic drops >50% intra-day and alert: "IV crush — consider closing for residual credit."

EC-5: Assignment on fractional cycle Brief assumes 100-share lot multiples. If re-entry results in a share count not divisible by 100 (e.g., 470 shares), the system must track the "uncovered" remainder and not flag it as a naked call.

EC-6: Roll creates net debit The brief says "roll up if net credit or acceptable debit." The system needs a configurable max-debit threshold (suggested: $0.25/share) above which a roll is blocked and the situation escalates to manual review.


13. Data Requirements

See data-schema.md in this strategy directory for the full schema. Summary of required inputs:

Data Type Source Cadence License Note
Equity OHLCV (daily) Alpaca Market Data (or broker equivalent) Daily Included in Alpaca subscription
Options chain (strikes, bid/ask, delta, expiration) Alpaca Options API / ORATS / Tradier Per-cycle (weekly) ORATS historical requires subscription; verify before backtest
Earnings calendar Alpaca / Refinitiv / EarningsWhispers Weekly scan Free tier available; verify staleness
Ex-dividend dates Alpaca corporate actions feed As-announced Included
IV rank / IV percentile Derived from options chain or ORATS Per-cycle Derived = no license issue
Tax-lot records Internal (paper sim generates these) Per-trade Internal only

14. Assumptions Requiring Explicit Acknowledgment

These assumptions are embedded in the reference implementation. They are not predictions — they are modeling choices that affect backtest validity:

  1. Fill at mid: Paper fills modeled at bid/ask midpoint. Real slippage may be $0.02–$0.05 worse per contract depending on spread and time of day.
  2. No partial fills: The simulation assumes full-lot fills. Real execution on illiquid strikes may see partial fills.
  3. Assignment at 4:00 PM ET strike price: OCC exercise is based on intrinsic value at 4:00 PM ET close. After-hours moves can create unexpected assignment/non-assignment; paper sim uses 4:00 PM price.
  4. Commission: $0.65/contract (Alpaca default as of 2026). Configurable in backtest config.
  5. Tax treatment: P/L tracking is gross of tax. The tax-lot method simulation tells you which lots are assigned but does not calculate capital gains tax owed. A CPA, not this system, handles tax.
  6. LIFO paper default: LIFO is the default lot method in the simulation. Actual broker LIFO eligibility may differ; paper sim is illustrative.
  7. Delta at entry: Delta is snapshot at the moment of sell execution. Delta drifts continuously; the system does not delta-hedge.

15. Open Questions for Kristerpher

See failure-modes.md for full list. Top three:

  1. What is the maximum acceptable debit on a roll? The brief says "acceptable debit" but does not define a dollar or percentage threshold. This gates the roll decision tree in Section 8.
  2. Is early assignment to be treated identically to standard assignment for P/L and re-entry logic, or does it trigger a different workflow? AMZN is American-style; this will occur.
  3. When sentiment is "High-Uncertainty," the brief allocates 100 uncovered shares. Does "uncovered" mean no call is sold against those shares for that cycle, or does it mean a far-OTM (delta <0.15) call is acceptable as a hedge-write?

16. Cited References


This document is a research specification. It does not constitute investment advice. Performance in any tested period depends on conditions that will not be replicated. Paper-trading results do not guarantee live-trading outcomes.