Daily Iron Condor — SPY
SPY · Net-Credit · Non-Directional · Mon–Thu Daily
📋 Strategy Overview
A neutral, premium-selling strategy with two short OTM spreads — a bull put spread and a bear call spread — bracketing the ATM price. Four option legs are opened each weekday morning (Mon–Thu) and closed at 14:20 ET the same day. The iron condor profits when SPY stays between the two short strikes at exit.
The strategy is delta-neutral at entry. Primary failure modes are: (1) entering in a high-IV environment (straddle >1.50%), or (2) SPY carrying prior-day outsized momentum through the short strikes.
Strike Construction
lp_str = atm - SHORT_SPREAD - WING_WIDTH # e.g. 545 at SPY=560
sp_str = atm - SHORT_SPREAD # e.g. 550
sc_str = atm + SHORT_SPREAD # e.g. 570
lc_str = atm + SHORT_SPREAD + WING_WIDTH # e.g. 575
⚙️ Parameters
Max profit per trade: net_credit × 100 × 40
Max loss per trade: (5 − net_credit) × 100 × 40
🕐 Schedule
| Event | When | Days |
|---|---|---|
| Entry open | 9:40 ET | Mon–Thu |
| Entry cutoff | 12:00 ET | Mon–Thu |
| Exit | 14:20 ET | Mon–Thu |
| Auto-exit (profit) | Any time | Mon–Thu |
| Auto-exit (stop) | Any time | Mon–Thu |
| Heartbeat | Every 5 min | Always |
Options expiry is always the next Friday (nearest weekly expiry).
🚦 Auto-Exit Rules
Profit Target
Stop Loss
Monitor Interval
🔍 Trade Filters
All filters are evaluated from live option prices at entry time. SPY's filters are calibrated for its lower volatility regime vs QQQ — notably a wider MAX_STRADDLE_PCT (1.50%) and lower MAX_PREV_DAY_MOVE threshold.
| # | Filter | Value | Rationale |
|---|---|---|---|
| 1 | MIN_CREDIT_RATIO | 0.05 | Net credit must be ≥ 5% of wing width ($0.25 on a $5 wing) — condor short strikes are OTM so premium is lower than the butterfly |
| 2 | MIN_CREDIT_ABS | $0.25 | Absolute minimum credit per share — below this level the risk/reward is unfavourable |
| 3 | MIN_STRADDLE_PCT | 0.10% | Skip if the ATM straddle is < 0.10% of SPY — IV so low that OTM option strikes have near-zero premium |
| 4 | MAX_STRADDLE_PCT | 1.50% | Skip if the ATM straddle is > 1.50% of SPY — market pricing in a move likely to breach the ±$10 short strikes (wider than QQQ's 1.00%) |
| 5 | MAX_GAP_PCT | 1.0% | Skip if the overnight gap exceeds 1% — gap opens place SPY off-centre relative to the ±$10 profit zone |
| 6 | MAX_PREV_DAY_MOVE | 0.45× wing ($2.25) | Skip if the prior session's intraday range exceeded 45% of the wing width — SPY threshold is lower than QQQ's because SPY is less volatile in dollar terms |
| 7 | LOW_IV_HIGH_RVOL | straddle < 0.15% and avg5 > $3.00 | Skip IV-calm days where the 5-day average realised move has been >$3.00 — avoids selling extremely cheap premium into a realised-vol regime that can carry |
SPY vs QQQ Filter Comparison
| Filter | SPY | QQQ | Reason for Difference |
|---|---|---|---|
MAX_STRADDLE_PCT | 1.50% | 1.00% | QQQ has higher structural volatility; stricter cap on QQQ |
MAX_PREV_DAY_MOVE | 0.45× wing | 1.50× wing | QQQ's larger dollar moves require a higher absolute threshold to avoid over-filtering |
LOW_IV_HIGH_RVOL avg5 | >$3.00 | >$4.50 | SPY's smaller dollar range; $3.00 is a significant day for SPY |
LOW_IV_HIGH_RVOL straddle | <0.15% | <0.80% | SPY must be extremely calm to trigger; QQQ has a wider IV-calm band |
🔄 Iron Condor vs Iron Butterfly
| Aspect | Iron Condor (SPY) | Iron Butterfly (SPY) |
|---|---|---|
| Short strikes | ATM ± $10 | Both at ATM |
| Profit zone | Wider (ATM ± $10 ± credit) | Very narrow (ATM ± credit) |
| Max credit | Lower (OTM premium) | Higher (ATM straddle premium) |
| Win probability | Higher | Lower |
| MIN_CREDIT_RATIO | 0.05 | 0.20 |
| MAX_STRADDLE_PCT | 1.50% | 1.20% |
daily_iron_butterfly_spy.py) may collect more premium for a concentrated pinning opportunity. On moderate-IV days this condor provides a wider safety margin.
⚠️ Risk Profile
Max Profit
Max Loss
Upper Breakeven
Lower Breakeven
Short Spread
Wing Width
Primary Failure Modes
💰 Live P&L by SPY Option Symbol
Realized P&L breakdown per OCC symbol — all closed round-trip SPY option legs since deployment.
Realized P&L by Symbol
| OCC Symbol | P&L | Trades | Assessment |
|---|---|---|---|
| Load roundtrips_report_nikkip2_spy.csv to populate | |||
Performance Breakdown
Profit Factor
Avg Hold
📂 Open SPY Option Positions
Active SPY option legs currently held in the Np2 account with unrealized P&L.
| OCC Symbol | Type | Qty | Entry $ | Capital at Risk | Unrealized P&L |
|---|---|---|---|---|---|
| Load roundtrips_report_nikkip2_spy.csv to populate | |||||
⚠️ Risk Assessment
Max Drawdown
Max Capital at Risk
Max Potential Loss
Max Position Notional
Min Position Notional
Avg Position Notional
Gross Win
Gross Loss
Avg Win
Avg Loss
Account Snapshot (SPY options scope — Np2)
| Metric | Value |
|---|---|
| Load roundtrips_report_nikkip2_spy.csv to populate | |
📋 Recent SPY Round-Trip Trades
Last 20 completed round-trip option legs from roundtrips_report_nikkip2_spy.csv.
| OCC Symbol | Type | Close Type | Open Date | Close Date | Qty | Entry $ | Exit $ | Capital at Risk | Max Loss | P&L | Hold |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Load roundtrips_report_nikkip2_spy.csv to populate | |||||||||||
📁 Project Structure
Core Scripts
| File | Purpose |
|---|---|
daily_iron_condor_spy.py | Main trading script — opens/closes SPY condors daily Mon–Thu |
backtests/daily_iron_condor_spy_backtest.py | Historical backtest |
.envNP2 | API keys (not committed to git) |
Generated Outputs
| File | Purpose |
|---|---|
condor_spy_trades_log.csv | Appended strategy trade log |
roundtrips_report_nikkip2_spy.csv | Round-trip P&L report (from download script) |
Running the Script
screen -S daily-iron-condor-spy -d -m bash -c \
'source .venv/bin/activate && python3 daily_iron_condor_spy.py >> logs/daily_iron_condor_spy.log 2>&1'
# Check status
screen -ls | grep daily-iron-condor-spy
tail -f logs/daily_iron_condor_spy.log
📋 Summary
Np2 · SPY Daily Iron Condor
Realized P&L · SPY options only · Paper Trading · Updated on demand