Stretched DC

Strategy 4 — Stretched Double Calendar (DCS)

Current Mode: DRY-RUNDCS_DRY_RUN = True. Scanner fires and positions are tracked with simulated fills. No real orders placed. To go live, set DCS_DRY_RUN = False in config.py.

How it works

The Stretched DC is a DC + OTM calendar wings structure. It adds two extra calendar spreads — one on each side of the ATM — at a distance that adapts to the current IV regime (45–60% of the expected 1-standard-deviation move). The result is a wider, shallower profit tent that tolerates moderate spot moves that would hurt a pure DC.

1SD move = spot × (IV/100) × √(DTE/365) e.g. 24550 × 0.225 × √(7/365) = 772 pts
Wing pct = 45% if IV < 22.5% | 52% if 22.5% ≤ IV ≤ 24% | 60% if IV > 24% (adaptive by IV regime)
Wing dist = round(1SD × wing_pct / 100) × 100 e.g. round(772 × 0.52 / 100) × 100 = 400 pts
OTM CE strike = ATM + ce_wing e.g. 24550 + 400 = 24950
OTM PE strike = ATM − pe_wing e.g. 24550 − 400 = 24150 (may differ if skew-adjusted)

8-Leg Structure

ATM legs (same as base DC) + OTM calendar on each wing:

SELL
ATM CE Near
₹145
ATM weekly
SELL
ATM PE Near
₹130
ATM weekly
BUY
ATM CE Far
₹290
ATM monthly
BUY
ATM PE Far
₹280
ATM monthly
SELL
OTM CE Near
₹45
ATM+400 weekly
SELL
OTM PE Near
₹40
ATM-400 weekly
BUY
OTM CE Far
₹115
ATM+400 monthly
BUY
OTM PE Far
₹110
ATM-400 monthly
ATM near straddle (SELL) = 145 + 130 = ₹275 pts
ATM far straddle (BUY) = 290 + 280 = ₹570 pts
OTM near wings (SELL) = 45 + 40 = ₹85 pts
OTM far wings (BUY) = 115 + 110 = ₹225 pts
Net Debit = (570 + 225) − (275 + 85) = ₹435 pts (₹28,275 for 65 lots)
Profit Target (42% debit) = 435 × 0.42 × 65 = ≈ ₹11,876 net

DC vs DCS: Profit Tent Comparison

Interactive payoff chart at expiry. Green = DC (narrow tent), Purple = DCS (wide tent). Drag the spot slider to compare the P&L at different spot levels.

1SD = pts  |  Wing = pts  |  OTM strikes: CE / PE
DC P&L at this spot
₹0
DCS P&L at this spot
₹0

Approximated at expiry using intrinsic value only. Actual P&L during holding period depends on IV and theta.

Wing Sizing — Adaptive by IV Regime

Wing distance = adaptive_wing_pct × 1SD, rounded to the nearest 100-pt step.

Near IV rangeWing pctConfig paramTypical wing (NIFTY ~24500, DTE 8)
< 22.5% (low vol)45%DCS_WING_PCT_LOW_IV~200–300 pts
22.5% – 24.0% (mid vol)52%DCS_WING_PCT_MID_IV~300–400 pts
> 24.0% (high vol)60%DCS_WING_PCT_HIGH_IV~400–500 pts
Skew-Aware variant → see Strategy 5 — DCS_SKEW Strategy 5 documents the parallel SkewedDCSScanner that runs alongside DCS and uses asymmetric CE/PE wings when put or call skew exceeds a threshold. It includes an interactive skew calculator and side-by-side profit tent comparison.

DC vs DCS Selector — Realized Range Filter

Every scan cycle, each scanner appends the current NIFTY spot to an intraday observation list. The realized range is the high − low of all spot readings for the current trading day. This is used as an entry gate for both DC and DCS:

ScannerSkip if realized range exceeds …ConfigLogic
DC45% of near ATM straddleDC_REALIZED_RANGE_MAX_PCT = 0.45Market already moved — prefer DCS which has OTM wings to absorb a wider range
DCS / DCS_SKEW80% of near ATM straddleDCS_REALIZED_RANGE_MAX_PCT = 0.80Market too volatile for even an 8-leg structure — skip entirely

Natural selector: when range is <45%, DC and DCS both enter (DC preferred by being simpler). When range is 45–80%, DC auto-skips and DCS takes the trade. When range is >80%, both skip. Spot history is cleared at end of each trading day.

Entry Filters (all must pass)

FilterConfigWhy
DTE to near expiryDCS_MIN_DTE=7 to DCS_MAX_DTE=10OTM near legs below 5 DTE have negligible theta (₹5-15 premium) — wings add capital risk with no edge
Near ATM IV ≥ minDC_MIN_IV = 15% (shared)Same IV floor as DC — enter only when premium supports the theta edge
Near ATM IV ≤ maxDC_MAX_IV = 25% (shared)Avoid event risk
Far−Near IV gapDC_MAX_IV_SPREAD = 5% (shared)Skip if far expiry has event premium priced in
Near ATM straddle premiumDC_MIN_NEAR_STRADDLE = 80 ptsSame floor as DC
OTM strikes must exist in chainchecked via _find_row(oc, otm_ce_k)Wing offset may land between listed strikes if it's an unusual value
Realized range filterDCS_REALIZED_RANGE_MAX_PCT = 0.80Skip if today's observed spot range (high − low across scan cycles) > 80% of near ATM straddle. Market moved too far for the OTM wings to still be symmetric around spot.
Position limits (3-layer guard)DCS_MAX_CONCURRENT = 3(1) Max 3 concurrent DCS positions; (2) at most one new DCS entry per calendar day (prevents stacking at the same spot level); (3) skip if an open DCS already exists at this exact ATM + near expiry (dedup guard)
get_expiries() look-ahead If the nearest Tuesday is already within DCS_MIN_DTE (7 days), get_expiries() automatically looks ahead one full week to the following Tuesday. This expands the valid DCS entry window from effectively 1–2 days per cycle to a broader window across the full DTE 7–10 range.

Stop Triggers (same as DC)

TriggerConditionWhy
Time stopdte_near < 0, or dte_near = 0 at/after 15:00 ISTHold through expiry day morning, then exit before the close window.
Trigger 1 — P&L stopNet P&L ≤ −20% of net debitMax loss guardrail
Trigger 2 — IV crushEntry IV − current IV ≥ 10 ptsSustained IV drop kills far legs faster than theta helps
Trigger 3 — Tent break|spot − ATM| > near_straddle × 0.90 (DTE ≥ 3 only)Spot outside profit tent — delta no longer neutral
Profit targetNet P&L ≥ 42% of net debitHigher than DC's 32% — wings take 1-2 extra days to contribute
Transaction costs on 8 legs DCS entry cost includes STT on all 4 near sells and stamp on all 4 far buys. Computed via TransactionCosts.dcs_entry_cost() and dcs_close_cost() in arb_bot/costs.py. The entry_cost is stored in the trade record at execution time and used in all subsequent net P&L calculations.