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
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.
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.
| 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 |
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.
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.
| 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.
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.
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
Assignment is a designed outcome, not a failure. The system never marks assignment as a loss event automatically — the P/L calculation determines outcome.
| 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.
| 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" |
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.
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 |
These assumptions are embedded in the reference implementation. They are not predictions — they are modeling choices that affect backtest validity:
See failure-modes.md for full list. Top three:
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.