Raxx · internal docs

internal · gated ↑ index

LCC Income Cycle — Alert Specification

Strategy ID: lcc-income-cycle Version: 0.1 (research)

Alerts are operational signals fired by the paper-trading simulation when a rule condition is met. In Phase 1-2 (manual paper sim): alerts are logged and surfaced to the trader for review. In Phase 3 (automated paper): critical alerts may block the proposed action until acknowledged. In Phase 4 (live broker): critical alerts must block execution until manually overridden.

Alerts are stored in the Alert schema (see data-schema.md). They do NOT execute any action themselves.


Alert Codes

Execution Timing Alerts

Code Severity Trigger Message Template Action
OPENING_BELL_SELL INFO Sell executed within 5 min of market open "Sell on {ticker} {strike} was executed {N} min after open. Price action check window is 10 min — verify this was intentional." Log; surface in dashboard
GAP_UP_WAIT_RECOMMENDED INFO Open gap > 0.5% detected "Gap up {pct}% detected on {ticker}. Recommended: wait 10-30 min before selling calls. Current sentiment: {label}." Log; delay execution prompt
GAP_DOWN_HOLD WARNING Open gap down > 0.5% detected "Gap down {pct}% detected on {ticker}. Recommended: sell 1 fewer contract or raise strike by one step. Hold if gap > 1.5%." Log; reduce structure by 1
GAP_DOWN_SEVERE_HOLD WARNING Open gap down > 1.5% detected "Severe gap down {pct}% on {ticker}. No calls sold this cycle per gap-down-severe rule. Re-evaluate at T+30." Log; block sell

Assignment Risk Alerts

Code Severity Trigger Message Template Action
HIGH_ASSIGNMENT_RISK WARNING DTE ≤ 2 AND call is ITM AND delta_at_entry > 0.75 "Call {ticker} {strike} exp {expiration}: DTE={DTE}, deep ITM. Assignment probability high. Confirm this is intentional (per-cycle design) or consider rolling." Log; surface prominently
EARLY_ASSIGNMENT_RISK WARNING Extrinsic value < $0.15 on any open call "Call {ticker} {strike}: extrinsic ${extrinsic:.2f} < $0.15. Early assignment risk elevated (American-style). Consider closing or monitoring closely." Log; alert
EX_DIV_EARLY_ASSIGNMENT WARNING Ex-dividend date within 3 calendar days AND ticker pays dividend "Ex-dividend date is {N} days away on {ticker}. ITM short calls face elevated early-assignment risk. Consider closing or confirm acceptance." Log; block new ITM sells within 5 days
BELOW_COST_ASSIGNMENT_RISK WARNING Assignment price (strike) < lot cost basis "Short call {strike} is below cost basis {basis} on lot {lot_id}. If assigned, this cycle records a stock P/L loss. Confirm intentional or roll/close." Log; surface at cycle close

Pattern / Weakness Detection Alerts

Code Severity Trigger Message Template Action
ITM_OVERUSE WARNING 3+ consecutive weeks where ALL calls at entry are ITM "3 consecutive weeks of all-ITM call structure on {ticker}. Review sentiment labels — is Neutral being used as a default without recalibration?" Log; require sentiment label re-confirmation
CONSECUTIVE_BELOW_COST_ASSIGNMENT WARNING 3+ below-cost assignments in rolling 30 days "{N} below-cost assignments in the last 30 days on {ticker}. Review strike selection and re-entry price relative to cost basis." Log; surface pattern
IMMEDIATE_REENTRY INFO Re-entry evaluated or executed within 1 trading day of last assignment "Re-entry on {ticker} within 1 trading day of last assignment at ${assignment_price}. Verify this is not reactive — review re-entry criteria log." Log; surface
INCREASING_SIZE_AFTER_LOSS WARNING Re-entry share count > prior cycle share count AND prior cycle net_pnl < 0 "Re-entering with {shares} shares after a loss cycle ({prior_pnl}). Larger size after loss — confirm this is deliberate, not reactive." Log; require confirmation
THIRD_REENTRY_SAME_WEEK CRITICAL 3rd re-entry on same ticker in same calendar week "3rd re-entry on {ticker} this week. This exceeds the maximum of 2 re-entries per week. Re-entry blocked." Block re-entry

Position Integrity Alerts

Code Severity Trigger Message Template Action
NAKED_CALL_DETECTED CRITICAL Active short calls > floor(shares / 100) "{N} active short calls but only {M} contracts covered by {shares} shares. Possible naked exposure. Immediate review required." Block all new sells; surface as critical
MAX_SHARE_BREACH CRITICAL Position shares > max_shares_per_ticker "{shares} shares on {ticker} exceeds configured max of {max_shares}." Block new buys
STATE_CONSISTENCY_ERROR CRITICAL State machine enters an undefined transition "State machine error on {ticker}: attempted transition from {from_state} to {to_state} is not a legal transition. No action taken." Block all actions; require manual reset

IV / Market Condition Alerts

Code Severity Trigger Message Template Action
IV_CRUSH_DETECTED INFO Open call extrinsic drops > 50% intra-day "IV crush on {ticker} {strike}: extrinsic dropped from ${start:.2f} to ${current:.2f} ({pct:.0%} decline). Consider cheap close to recapture upside." Log; surface
PREMIUM_BELOW_MINIMUM WARNING ATM weekly credit < min_premium_pct of price "ATM weekly premium on {ticker} (${credit:.2f}) is below minimum threshold ({min_pct:.1%} of ${price:.2f}). Re-entry criteria: premium_justifies_cycle = FALSE." Block re-entry if this is the blocking criterion
BINARY_EVENT_BLOCK INFO Earnings or binary event within 5 calendar days "Earnings or binary event detected within 5 days on {ticker}. Re-entry blocked. Next eligible date: {eligible_date}." Block re-entry; log

Sentiment Label Alerts

Code Severity Trigger Message Template Action
STALE_SENTIMENT_LABEL WARNING Sentiment label not updated in > 24 hours "Sentiment label '{label}' on {ticker} was set {age} hours ago. Please recalibrate before this cycle." Require recalibration; block sell until confirmed
SENTIMENT_OVERRIDE INFO Trader manually overrides sentiment label intra-day "Sentiment label on {ticker} changed intra-day from '{old}' to '{new}'. Override logged with reason: '{reason}'." Log with reason; allow

Alert Routing (Phase 3+ target)

When the strategy is productized:

Severity Routing
INFO Dashboard log only; no push notification
WARNING Dashboard log + in-app badge; optional push notification (user preference)
CRITICAL Dashboard log + push notification + block execution until acknowledged

Alert Testing Requirements

Before feature-developer ships Phase 3 automation, each alert must have: 1. A unit test that fires it with a synthetic scenario. 2. A unit test that confirms it does NOT fire when the condition is not met. 3. An integration test that verifies the blocking behavior (CRITICAL alerts) prevents state transitions.

See reference-impl/layered_covered_call/state_machine.py :: check_risk_controls() for the current reference implementation.