Browse docs
Docs / Composer Strategy Examples

Composer Strategy Examples

Ready-to-build recipes for every strategy shape the Strategy Composer can express today. Each recipe is written the way the composer shows it: one row per socket, listing the blocks to click from the palette and the values to set in Block settings. Anything not mentioned keeps its default. Examples 1-18 run on NIFTY (50-pt strikes; 1-16 weekly, 17-18 monthly — see the grouping below); examples 19-24 are F&O stock shapes (RELIANCE, monthly-only expiry) that only became possible once the composer could target a stock underlying — read the underlying field's stock caveats (physical settlement, VIX filters being market-wide) before running any of them for real.

To try one: build it in the composer, Validate, Save, then enable it from the Strategies list on a paper/simulation account first. Every example uses a conservative 1 lot.

If you already have the spec as JSON — from a backup, from someone else, or written by hand — Import spec… in the action bar loads it straight into the sockets instead, ready to edit. See Importing a spec.

Example Groups

The composer's instrument dump draws exactly one hard line: NIFTY has weekly contracts, nothing else does — every other index (BankNifty, FinNifty, MidcpNifty) and every F&O stock is monthly-only (strategies/instruments.py's WEEKLY_CAPABLE_INSTRUMENTS). That line is what actually separates the groups below — not "index vs. stock" on its own, since the two index examples in the second group are structurally no different from a stock trade once expiry goes monthly.

Index — NIFTY (weekly) — every one of these uses next_weekly somewhere in its expiry, so none of them run on anything but NIFTY:

  1. 9:20 ATM short straddle (intraday)
  2. Weekly premium-target short strangle
  3. Expiry-day (0DTE) strangle
  4. VIX-regime straddle with trailing stop
  5. Iron condor (defined-risk strangle)
  6. Iron butterfly
  7. Diagonal iron butterfly (weekly vs monthly)
  8. Bull put spread (defined-risk directional credit)
  9. Bull call spread (debit, directional)
  10. Naked short put (income leg)
  11. Call calendar (same strike, two expiries)
  12. Weekly strangle with adjustment (roll the untested side)
  13. Rent Collector Condor (weekly, carried to expiry)
  14. Gamma-Fenced Daily Condor ("0DTE without the blowup")
  15. Put Calendar Skew Harvester
  16. Self-Centering Condor (roll both sides)

Index — any monthly-only underlying — Monthly expiry only, nothing NIFTY-weekly-specific in the shape itself. Shown calibrated to NIFTY's spot level (strikes, wing widths); the numbers need resizing to run on BankNifty/FinNifty/MidcpNifty or a stock, but the shape carries over unchanged:

  1. Monthly FD-Plus Condor ("Fixed Deposit Plus")
  2. Positional bear put spread (one-shot directional view)

Stock — F&O stocks (monthly-only) — shapes that only make sense, or only became possible, once the composer could target a single name: physical settlement, assignment, earnings.

  1. Cash-secured put (F&O stock, income)
  2. Covered call (F&O stock, income)
  3. Stock bull put spread (one-shot directional view)
  4. Pre-earnings long straddle (event volatility)
  5. Post-earnings IV-crush short strangle
  6. Stock premium-target short strangle (clone per name)
  7. Covered strangle (F&O stock, income)

Cross-underlying (portfolios of specs, not one spec):

  • Dispersion and sector pairs (multi-spec patterns)
  • Not yet expressible (roadmap)

The same three-way split (Index — NIFTY (weekly) / Index — any monthly-only underlying / Stock — F&O stocks) groups the composer's own Load template… dropdown as <optgroup>s, in this order.


Index — NIFTY (weekly). Examples 1-16.

1. 9:20 ATM short straddle (intraday)

The classic Indian intraday premium-selling strategy: sell the ATM call and put shortly after the open, run per-leg stops, flat by end of day. Profits when NIFTY stays in a range; per-leg stops cap the damage on a trending day.

Socket Blocks
Filters Time window — Enter after 09:20
Expiry Next weekly — Min days to expiry 0
Structure Short straddle — SC and SP need no setup (ATM by definition)
Exits (in order) Per-leg stop 25 pts → Profit target 30 pts → EOD 15:15
Sizing Fixed lots 1

Variant: add Directional re-entry (defaults are sensible) so a stopped side re-enters once if the move confirms.


2. Weekly premium-target short strangle

Sell an OTM call and put whose premiums are closest to a rupee target — the strikes float with volatility instead of sitting at a fixed distance. This is the production-proven shape in this repo (nifty_strangle_composer_02jul2026 is the full battle-tested version — open it via ⋮ → Edit in Composer to study it).

Socket Blocks
Filters Time window 10:00 · VIX skip above 20 · Gap skip 0.9 %
Expiry Next weekly — Min days to expiry 2
Structure Short strangle — on each of SC and SP set selector Premium target: Target premium 100, Min premium 80, Max premium 120
Exits (in order) Profit target 15 pts → Stop loss 25 pts → Per-leg price stop 150 Rs → EOD 15:20
Sizing Fixed lots 1

Simpler fixed-distance variant: set both legs' selector to OTM % instead (1.0 on SC, -1.0 on SP). Add an Adjustment block to roll the untested side instead of riding it flat — see example 12.

Not the same as an optionstrat-style "sell the 16-delta strangle": the composer's Delta target selector (strategies/components/selectors.py) only scans deep-ITM strikes — it's built for the diagonal's long legs, not OTM shorts. There's no 0.15–0.20-delta OTM selector today; Premium target or OTM % above are the closest available proxies.


3. Expiry-day (0DTE) strangle

The composer has no Tuesday-only / day-of-week filter yet (see gaps below), so "expiry day" can't be a real entry condition — running it as a daily strangle with tighter OTM strikes and a same-day close approximates the fast theta decay of a true 0DTE trade every day, not just on expiry.

Socket Blocks
Filters Time window — Enter after 09:30
Expiry Next weekly — Min days to expiry 0
Structure Short strangle — SC selector OTM % 0.5, SP selector OTM % -0.5 (tight, expiry-day-like)
Exits (in order) Profit target 20 pts → Per-leg stop 20 pts → EOD 15:15
Sizing Fixed lots 1

4. VIX-regime straddle with trailing stop

Only sell the straddle when premium is worth selling (VIX above a floor), and trail the profit instead of taking a fixed target — captures more of a strong theta day, gives back a fixed amount when the range breaks.

Socket Blocks
Filters Time window 09:45 · VIX floor below 12 (skips low-vol days) · VIX skip above 22 (skips panic days)
Expiry Next weekly — Min days to expiry 0
Structure Short straddle — legs default to ATM
Exits (in order) Trailing stop — Trail by 15, Arm after profit 20Stop loss 40 pts → EOD 15:15
Sizing Fixed lots 1

5. Iron condor (defined-risk strangle)

A short strangle plus bought wings a fixed width further out. Maximum loss is capped at (wing width − net credit), margin is a fraction of the naked strangle's, and the engine places the bought wings before the shorts so the broker prices the position at full spread margin.

Socket Blocks
Filters Time window 09:45
Expiry Next weekly — Min days to expiry 2
Structure Iron condor — 4 legs total: SC/SP (the two you configure below) plus two bought "wing" legs, LC/LP, that get added automatically. Click the chip itself and set Wing width (pts) 300; on the legs set SC selector OTM % 1.0, SP selector OTM % -1.0. The wings need no selector — the structure places them at short strike ± width.
Exits (in order) Profit target 20 pts → Stop loss 30 pts → EOD 15:20
Sizing Fixed lots 1

Because loss is capped by the wings, this is the safest example to run overnight (drop the EOD exit and let it ride into expiry week) — but start with the intraday version.


6. Iron butterfly

Same shape as the iron condor — 4 legs total (see example 5's callout: SC/SP sold near spot, LC/LP bought further out for protection) — but the dedicated Iron butterfly structure defaults both shorts to ATM instead of OTM %, so both land on the same strike with wings ± width — no per-leg selector changes needed. Larger credit and tighter profit zone than the condor; suited to strong range-bound/expiry-day conviction.

Socket Blocks
Filters Time window 09:45
Expiry Next weekly — Min days to expiry 0
Structure Iron butterfly (4 legs — SC/SP + auto LC/LP wings) — Wing width (pts) 300; SC/SP need no setup (ATM by default)
Exits (in order) Profit target 25 pts → Stop loss 35 pts → EOD 15:20
Sizing Fixed lots 1

(The old workaround — an iron condor with both SC and SP selectors manually set to ATM — still works identically; the dedicated structure just saves the two clicks.)


7. Diagonal iron butterfly (weekly vs monthly)

Buy deep-ITM call + put on the monthly expiry, sell the ATM straddle on the weekly — the shorts decay fast, the longs hold their value and cap the risk. This structure resolves its own two expiries (the Expiry socket disappears when you add it) and its legs default sensibly: deep-ITM longs via Delta target, ATM shorts.

Socket Blocks
Filters Time window 09:45
Structure Diagonal iron butterfly — leg defaults are fine; under the legs, Short leg expiry = Next weekly (min DTE 0), Long leg expiry = Monthly (min days 7, relative to short)
Exits (in order) Profit target 40 pts → Stop loss 60 pts → Long leg exit — DTE trigger 1 (unwinds the monthly longs before they're the only thing left)
Sizing Fixed lots 1

The repo's DIB_02Jul2026_v2 strategy is a live-tuned version of this shape.


8. Bull put spread (defined-risk directional credit)

Sell an OTM put, buy a further-OTM put for protection — a directional, defined-risk bet that NIFTY holds above the short strike. Same anchor + wing shape as the iron condor's put side, split out on its own.

Socket Blocks
Filters Time window 09:45
Expiry Next weekly — Min days to expiry 2
Structure Bull put spread — Wing width (pts) 200; SP selector OTM % -1.0 (LP needs no selector — it's placed at SP strike − width)
Exits (in order) Profit target 15 pts → Stop loss 25 pts → EOD 15:20
Sizing Fixed lots 1

Swap the structure for Bear call spread (mirror image, bearish) with the same shape: SC selector OTM % 1.0, wing (LC) placed at SC strike + width.


9. Bull call spread (debit, directional)

Buy a call, sell a further-OTM call to cut the cost — capped upside, capped cost, no premium collection. Note the roles are reversed from the credit spreads above: the bought leg is the anchor (selector-driven), the sold leg is the wing.

Socket Blocks
Filters Time window 09:45
Expiry Next weekly — Min days to expiry 2
Structure Bull call spread — Wing width (pts) 200; LC selector OTM % 0.5 (SC needs no selector — it's placed at LC strike + width)
Exits (in order) Profit target 20 pts → Stop loss 30 pts → EOD 15:20
Sizing Fixed lots 1

Swap the structure for Bear put spread (mirror image, bearish): LP selector OTM % -0.5, wing (SP) placed at LP strike − width.


10. Naked short put (income leg)

The simplest building block: a single sold put, cash-secured-put style. No wing, no second leg — margin is the naked-option margin, not a spread margin, so size conservatively.

Socket Blocks
Filters Time window 09:45
Expiry Next weekly — Min days to expiry 2
Structure Short put — SP selector OTM % -1.5
Exits (in order) Profit target 15 pts → Stop loss 30 pts → EOD 15:20
Sizing Fixed lots 1

The other three single-leg structures (Short call, Long call, Long put) work the same way with one leg each — Long call/Long put are the momentum-style building block (buy and hold intraday or across days, no spread to manage).


11. Call calendar (same strike, two expiries)

Sell a near-term call, buy the same strike further out — a pure time-decay play that profits from the near leg decaying faster than the far one. Like the diagonal, this structure resolves its own two expiries (the Expiry socket disappears when you add it), but unlike the diagonal both legs share one strike selector instead of independent ones.

Socket Blocks
Filters Time window 09:45
Structure Call calendar — SC selector ATM (default); Short leg expiry = Next weekly (min DTE 0), Long leg expiry = Monthly (min days 7, relative to short)
Exits (in order) Profit target 20 pts → Stop loss 30 pts → Long leg exit — DTE trigger 1
Sizing Fixed lots 1

Swap the structure for Put calendar for the put-side mirror (same strike, same two expiries).


12. Weekly strangle with adjustment (roll the untested side)

The same fixed-distance strangle as example 2's simpler variant, but instead of letting a decayed leg just sit there while the other side takes the heat, it rolls: once one short leg has collected most of its premium (down to 30% of what it was sold for) while the other is at or above its own entry (under pressure), the decayed leg is closed and re-sold at a fresh strike from the same selector — recentring the position and banking the decayed leg's profit instead of riding it flat to expiry. Capped at 2 rolls per trade, and no rolls after 14:30 (no fresh short premium late in the day). nifty_strangle_adjustment_12jul2026 in this repo is this exact shape — open it via ⋮ → Edit in Composer to study it, or load the "Weekly strangle with adjustment" entry from the template dropdown to start from scratch.

Socket Blocks
Filters Time window 10:00 · VIX skip above 20 · Gap skip 0.9 %
Expiry Next weekly — Min days to expiry 2
Structure Short strangle — SC selector OTM % 1.0, SP selector OTM % -1.0
Exits (in order) Profit target 30 pts → Stop loss 50 pts → EOD 15:20
Adjustment Roll a legside: untested (default), roll when decayed to 30%, Max rolls 2, No rolls after 14:30
Sizing Fixed lots 1

The same block also has side: tested (rolls the pressured leg further out once it reaches trigger_mult× its entry, instead of the decayed one) and side: both (checks both legs each tick and rolls whichever qualify). Only fires on plain two-short-leg positions (strangle/straddle) — attach it to an iron condor or diagonal and it stays configured but inert, since rolling a wing-hedged or long-legged position needs different (not-yet-built) logic. See docs/strategy-composer.md for the full param reference.


13. Rent Collector Condor (weekly, carried to expiry)

An iron condor built for capital efficiency, not just intraday theta: wings cap the margin at a fraction of a naked strangle's, and the position is explicitly not closed every day — it's carried across the week via Carry position, so the trade actually collects the multi-day decay it sold instead of being cut short by a same-day EOD exit. Available directly from the Load template… dropdown as "Rent Collector Condor (weekly, carried to expiry)" — no hand-composing needed.

New to options? Read this first: this is a 4-leg trade, not a 2-leg one. The Structure row below only asks you to configure SC and SP because those are the two legs whose strike you choose — but "Iron condor" automatically adds two more legs on top of them: LC and LP, the "wings," bought 300 points further from spot than whatever strike SC/SP land on. So one click of "Enter" here places four separate option orders, not two: 1. SC — sell 1 call near spot (collects premium) 2. SP — sell 1 put near spot (collects premium) 3. LC — buy 1 call further out (protection — caps your loss if NIFTY rallies hard) 4. LP — buy 1 put further out (protection — caps your loss if NIFTY falls hard)

Why bother with the two bought legs at all? Without them (a plain short strangle, example 2) your loss is theoretically unlimited if NIFTY makes a big move, and your broker holds much more margin against that risk. The two bought wings (LC/LP) turn that into a defined max loss (wing width − credit collected) and free up a large chunk of margin — that's the "capital efficiency" this template is named for. The tradeoff: 4 legs means 4 fills to watch at entry (and up to 4 at exit), so slippage/brokerage is higher than a 2-leg strangle, and if the broker's data feed can't price the far-OTM wings you may see a partial fill — see Iron condor in the block catalog for how the wings get priced.

Wing width (pts) is a normal editable field, not a fixed constant300 below is just this template's starting value, same as any other number in any template. Click the Iron condor structure chip and change "Wing width (pts)" to 500 (or anything from 50 to 2000) before saving, same as you'd change any other param. What you can't do today: give the call wing (LC) a different width than the put wing (LP) — one "Wing width (pts)" field sets both, symmetrically — or drive the wing's placement off a selector (e.g. "wherever premium is ₹20") instead of a fixed point offset from SC/SP's strike. Both are deliberate, not oversights (see strategies/components/structures.py's IronCondor — a ponytail: comment there names the exact upgrade path if per-side or selector-driven wings are ever needed).

Socket Blocks
Filters Time window 10:00 · VIX + gap skip — VIX above 20, gap 0.9% · VIX floor below 11
Expiry Next weekly — Min days to expiry 3 (more runway than a same-day strangle needs, since this rides across days)
Structure Iron condor (4 legs total — see the callout above) — Wing width (pts) 300; on each of SC and SP set selector Premium target: Target premium 90, Min premium 60, Max premium 130. LC/LP need no setup — they're placed automatically at SC/SP's strike ± 300.
Exits (in order) Profit target (% of premium) 60% → Stop loss 45 pts → Volatility stop 25% → Carry position — DTE trigger 0, Exit time 14:30
Sizing Fixed lots 1

Because nothing in the exits list is a plain EOD block, the position is not force-closed at the end of each day — Carry position is what allows that, and it only closes once the trade's own expiry is 0 days away (expiry day itself), at 14:30. Every other day, the position just sits open, marked but untouched, which is the entire point: the credit collected reflects several days of decay, not one.

Two things worth knowing before you run this one:

  • This is the first built-in template designed to hold a position across days, which historically the multi-day backtest couldn't represent correctly — every simulated day ran as an independent subprocess that wiped and re-entered a fresh position from scratch, so carry_eod trades never realized any P&L in a multi-day sim (fixed 2026-07-25; see multi_sim.py and strategies/engine.py's run_fullday()). If your build predates that fix, backtest results for this template (or any carry_eod strategy) will show flat breakeven days and should not be trusted.
  • A day where the position is simply being held (no entry, no exit) shows as Holding in the multi-day results table, distinct from No Trade (no position exists at all that day).

Suggested backtest window: 12 months is enough to judge the shape (weekly cadence gives ~48 trades/year); compare against example 5's plain intraday iron condor over the same weeks to see whether the extra days of carry actually earn more than the added overnight gap risk.


14. Gamma-Fenced Daily Condor ("0DTE without the blowup")

Every other intraday condor in this doc places its shorts a fixed distance from spot (OTM % or a premium target). This one places them at a constant gamma instead, via the Gamma target selector — the one selector template still hadn't used. Gamma is what actually kills 0DTE short sellers: it's the rate at which a short option's delta (and therefore its loss) accelerates as spot approaches the strike, and it explodes on expiry day as time value collapses. Fencing gamma directly means the strike self-adjusts — further from spot on a high-gamma (expiry-day, high-vol) morning, closer in on a quiet one — instead of sitting at a static OTM % that's too tight on the days that matter most. Delta stop backs it up: once the position's net delta (BS-estimated per leg, same approximation the delta_target selector uses) leans past ±0.25, that's a directional move building before the P&L-based stop would even notice, so it exits first. Available from the Load template… dropdown as "Gamma-Fenced Daily Condor (0DTE without the blowup)".

Socket Blocks
Filters Time window 09:30 · Gap skip 0.7%
Expiry Next weekly — Min days to expiry 0 (today's expiry — this is the 0DTE case)
Structure Iron condor (4 legs — see example 13's callout for what SC/SP/LC/LP mean) — Wing width (pts) 200; on each of SC and SP set selector Gamma target: Target gamma 0.0008, Min OTM % 0.1, Max OTM % 3.0.
Exits (in order) Profit target (% of premium) 50% → Delta stop — Max |net delta| 0.25Stop loss 25 pts → EOD 15:15
Sizing Fixed lots 1

Narrowest margin footprint of the strategies in this doc — 200-pt wings on a same-day expiry, roughly ₹35–55k/lot (less again if your broker gives MIS-style intraday margin relief). Backtest 6 months is plenty to judge it (0DTE trades daily, so the sample size builds fast) — the thing worth watching in the results is which exit actually fires: if Delta stop rarely beats Stop loss to the exit, the 0.25 threshold is too loose for what you're trying to catch and should come down toward 0.20.


15. Put Calendar Skew Harvester

Example 11 covers the call calendar; this is its put-side mirror, but it isn't just a symmetric swap — puts are structurally the better side to sell on NIFTY. Index option skew means downside (put) IV consistently prices richer than equivalent upside (call) IV, since institutional hedging demand for downside protection outweighs demand for upside calls. Selling the near-weekly ATM put and owning the same strike on the monthly harvests that richness: the short weekly leg decays against an elevated IV while the long monthly you hold is an asset, not a margin drag — SPAN/exposure margin on a calendar is a fraction of a naked short put's, since the long leg caps the loss the same way a wing does. Available from the Load template… dropdown as "Put Calendar Skew Harvester (weekly vs monthly)".

Socket Blocks
Filters Time window 09:45 · VIX floor below 11 · VIX skip above 18
Structure Put calendar — SP selector ATM (default); Short leg expiry = Next weekly (min DTE 2), Long leg expiry = Monthly (min days 7, relative to short)
Exits (in order) Profit target 25 pts → Stop loss 35 pts → Volatility stop 30% → Long leg exit — DTE trigger 1, Exit time 15:20
Sizing Fixed lots 1

Same two-expiry mechanics as example 11: the Expiry socket disappears once you pick Put calendar, since the structure resolves both expiries itself. Capital is roughly ₹45–60k/lot all-in — a monthly ATM put debit around ₹15–18k plus the covered-short margin on the weekly (₹30–40k). This structure is long vega (a calendar's value rises with IV, unlike the short-premium strategies elsewhere in this doc), so the Volatility stop here is protecting against the opposite failure mode from usual: it exits if IV expands past entry, which for a long-vega position actually means giving back the calendar's edge as the spread narrows unpredictably around a vol spike, not a runaway loss. Worth backtesting once with that block removed to see how much it's actually costing vs. protecting. Suggested window: 18 months (Jan 2025 → Jul 2026) — long enough to see the position behave in both a low-VIX grind and at least one vol pop.


16. Self-Centering Condor (roll both sides)

Example 12's adjustment only rolls the untested (decayed) leg of a naked strangle — the pressured side just sits there and eats the stop. Roll a leg also supports side: both, and because an iron condor's short legs (SC/SP) get re-selected the same way a strangle's do, the same adjustment block works on a wing-hedged position too: both shorts re-center inside the fixed wing width as spot drifts, one rolling in for fresh credit as it decays, the other rolling out before it blows through its stop — margin stays fully hedged (wings never move) the entire time. It's a condor that follows the market instead of stopping out of it. Available from the Load template… dropdown as "Self-Centering Condor (roll both sides)".

Socket Blocks
Filters Time window 10:00 · VIX skip above 20 · Gap skip 0.9%
Expiry Next weekly — Min days to expiry 2
Structure Iron condor — Wing width (pts) 350 (wider than example 13's 300, to leave room for a short to roll before it reaches the wing); SC selector OTM % 1.0, SP selector OTM % 1.0
Exits (in order) Profit target (% of premium) 55% → Stop loss 50 pts → EOD 15:20
Adjustment Roll a legside: both, roll untested leg when decayed to 30%, roll tested leg at 1.6× entry, Max rolls 3, No rolls after 14:00
Sizing Fixed lots 1

One caveat worth backtesting explicitly: a short that rolls repeatedly toward its own wing narrows that leg's protection each time, and the engine's "don't cross the other leg" guard checks short-vs-short, not short-vs-wing — so nothing stops a heavily-rolled short from landing very close to its own long. Check the worst-case short-to-wing distance across your backtest window before sizing this up. Suggested window: 12 months (Jul 2025 → Jul 2026), compared head-to-head against example 5's plain intraday iron condor over the same weeks — the rolls only earn their keep if they beat the static condor after the extra slippage/brokerage of the roll trades themselves.


Index — any monthly-only underlying. Examples 17-18 — shape generalizes past NIFTY, numbers shown do not.

17. Monthly FD-Plus Condor ("Fixed Deposit Plus")

Every other condor here trades weekly or daily. This one steps back to Monthly as the expiry, used directly as the Expiry socket rather than nested inside a calendar/diagonal — one trade a month, deep OTM (2.5%), sized off a percentage of a capital base via Capital % sizing instead of a hardcoded lot count. The pitch is the closest thing in this doc to a set-and-forget income sleeve: low trade count means slippage barely matters, and the far-OTM strikes plus wide wings trade win-rate for drawdown control — the aim is a high fraction of months landing at or near the profit target, not maximizing credit collected. Available from the Load template… dropdown as "Monthly FD-Plus Condor (capital %, low-touch income)".

Socket Blocks
Filters Time window 10:00 · VIX skip above 22
Expiry Monthly — Min days to expiry 20 (enter with plenty of runway left, not near-expiry)
Structure Iron condor — Wing width (pts) 400; SC selector OTM % 2.5, SP selector OTM % 2.5
Exits (in order) Profit target (% of premium) 65% → Stop loss 80 pts → Volatility stop 30% → Carry position — DTE trigger 2, Exit time 15:00
Sizing Capital % — Capital ₹10,00,000, Percent deployed 100%

Capital % is otherwise unused by any template in this doc — instead of a fixed lot count, it deploys a percentage of a capital figure you set, always at least 1 lot (see docs/strategy-composer.md for the sizing reference). At ₹10L/100% it currently sizes to roughly 1 lot at typical NIFTY notional — scale the capital figure to your actual base rather than the percent. Like example 13, this rides across days via Carry position rather than a plain EOD, closing once 2 days from expiry. Monthly credit runs roughly ₹180–220 pts, which prices out to a 15–18% max return on margin — but the realistic target to underwrite is the 65% premium-capture exit, not the theoretical max. Monthlies only generate ~12 trades/year, so judging this one needs a much longer backtest than the weekly/daily strategies above — 24–36 months if the data goes back that far — and the window needs to include at least one 5%+ single-month move, or the far-OTM tail risk never gets priced honestly.


18. Positional bear put spread (one-shot directional view)

Every other recipe in this doc is a repeating, mechanical edge — sell premium, manage it, do it again next week. This one is the opposite and is included because it's the shape people actually reach for first: a single directional bet on a level, held for weeks. "I think NIFTY falls from ~24,400 to 21,500–22,000 by late September." Buy a put near spot, sell a much lower one to cut the cost, hold across expiries, close when the move happens or the thesis dies.

Three blocks exist specifically for this shape and appear in no other recipe here:

  • Strike (leg selector) — every other selector derives a strike from today's spot, which is wrong when the thesis is about a level. Strike 24000 stays 24000 whether the trade fires today at 24,383 or next week at 24,900.
  • Date window (filter) — a strategy re-arms after it exits, so the scheduler would open a fresh spread the next day. This is what makes the trade one-shot.
  • Carry position — without it the daily EOD close flattens the position on day one, and there is no multi-week trade at all.
Socket Blocks
Filters Time window 09:45 · Date window — from 2026-08-03, until 2026-08-28
Expiry Monthly — Min days to expiry 30, Relative to short expiry off
Structure Bear put spread — Wing width (pts) 2000; LP selector Strike 24000 (SP needs no selector — it's placed at LP strike − width, i.e. 22000)
Exits (in order) Profit target (% of premium) 200% → Stop loss 190 pts → Carry position — DTE trigger 7, Exit time 15:20
Sizing Fixed lots — set on the dashboard, not here (start at 1 in paper)

Why Min days to expiry 30. The Monthly block picks the nearest monthly expiry at least N days out. On 3 Aug 2026 the August monthly (25 Aug) is only 22 days away, so 30 skips it and lands on 29 Sep 2026 — the target expiry. Any entry from 3 Aug through 28 Aug resolves to 29 Sep; from 31 Aug it jumps to the October monthly (27 Oct), which is a different trade. That cliff is the real reason the Date window ends on the 28th, not just one-shot discipline.

Why a % target instead of points. A 2000-wide spread bought for ~380 has a max profit near 1620 pts, but the fill decides the real number. Profit target (% of premium) at 200% exits at twice whatever debit actually got paid, so it stays correct if the spread fills at 350 or 410. (This block used to be a silent no-op on debit structures — it only read net credit; it now uses the absolute entry premium, so "200% of what I paid" works.) The fixed-points equivalent is Profit target 760.

Three traps specific to this shape:

  • Do not add a Delta stop. A bear put spread is net short delta on purpose — around −0.3 at entry. The block's 0.20 default would fire on the first tick and close the trade before the thesis has a day to play out. Delta stops belong on positions that are meant to sit near delta-neutral.
  • The Estimate button over-states capital badly here. strategies/margin_estimate.py treats a fully-winged position's risk as the wing width, which is right for a credit spread but not a debit one — the most you can lose on a bear put spread is the premium you paid. For 8 lots at a 380 debit it reports roughly ₹17.1 L against a true max loss of ₹1.98 L. Type the min-capital figure in by hand (debit × lot size × lots) until that's fixed.
  • The Adjustment socket does nothing on this shape. Roll a leg only fires on plain two-short-leg positions; attach it here and it stays configured but inert.

Sizing is where this trade usually goes wrong. NIFTY's lot size is 65, so a 380-point debit is ₹24,700 per lot — not the ₹9,500 you get from the widely-quoted (and stale) lot size of 25. At 8 lots the max loss is ₹1,97,600 and the max profit ₹8,42,400, with breakeven at 23,620. Check that arithmetic against your own capital before enabling it, and paper-trade it first: unlike every other recipe here, a one-shot directional bet gives you no sample size to learn from.


Stock — F&O stocks (monthly-only). Examples 19-24.

19. Cash-secured put (F&O stock, income)

Sell an OTM put on a stock, sized so the margin held could actually buy the shares if assigned — same shape as example 10's naked short put, but the underlying is a single name instead of an index, which changes two things: expiry is monthly-only (no weeklies on stocks), and an ITM short carried too close to expiry becomes a delivery obligation, not a cash settlement. Available from the Load template… dropdown as "Cash-secured put (F&O stock, income)".

Socket Blocks
Filters Time window 09:45
Expiry Monthly — Min days to expiry 15
Structure Short put — SP selector OTM % 3.0
Exits (in order) Profit target 20 pts → Stop loss 40 pts → Carry position — DTE trigger 2, Exit time 15:20
Sizing Fixed lots 1

Carry position at DTE 2, not 0. NFO stock options are physically settled — NSE's delivery-margin schedule already escalates (10/25/45/70% of contract value) from four days before expiry, and an ITM short left open into expiry becomes an obligation to deliver shares, not a cash close. The engine now floors this exit's DTE trigger at 2 for any stock spec regardless of what's typed here, and the composer rejects a saved spec below that floor — this template just shows the floor explicitly instead of relying on the silent clamp. If assignment is actually the goal (this is a cash-secured put, after all — the cash is meant to be ready), that's a deliberate override of this template, not a bug in it: raise the DTE trigger's intent by removing Carry position and sizing for full contract value, don't just lower the number below 2.

OTM % 3.0 is a starting point, not a rule. Unlike an index, a single stock's realistic weekly/monthly move varies hugely by name — a low-beta FMCG stock and a high-beta metals name don't want the same OTM distance. Check the stock's own historical monthly range before trusting this number.


20. Covered call (F&O stock, income)

The mirror of example 19: sell an OTM call instead of a put. In a real covered-call program you already hold the shares in your demat and this leg is the income overlay on top — the composer never buys or sells the underlying equity itself, but the Short call structure's covered checkbox (on by default in this template) does verify the holding: before arming, the engine reads your broker's live demat holdings and refuses to enter unless you already hold at least one lot's worth of shares. min_capital also reflects the cover — it prices as the (near-zero) cost of an already-covered call instead of a naked call's full SPAN margin.

Leave covered unchecked (or use the sibling Short call (uncovered) template) to sell the same call with no holdings requirement — an explicitly naked, undefined-risk income position instead.

Socket Blocks
Filters Time window 09:45
Expiry Monthly — Min days to expiry 15
Structure Short call — SC selector OTM % 3.0, covered
Exits (in order) Profit target 20 pts → Stop loss 40 pts → Carry position — DTE trigger 2, Exit time 15:20
Sizing Fixed lots 1

Same physical-settlement note as example 19 applies here in the other direction: if the underlying rallies hard through the strike, the short call carried to settlement calls the shares away rather than closing for cash. Carry position's DTE 2 floor exits before that window opens by default.


21. Stock bull put spread (one-shot directional view)

The single-name version of example 18's positional bear put spread, but bullish and credit instead of debit: sell an OTM put, buy a further-OTM put for protection, hold across the month, close on the thesis or the target. Date window is what makes it one-shot — without it, a positional trade that exits just re-enters the next day.

Socket Blocks
Filters Time window 09:45 · Date window — from 2026-08-05, until 2026-08-20
Expiry Monthly — Min days to expiry 15
Structure Bull put spread — Wing width (pts) 50; SP selector OTM % 3.0 (LP needs no selector — placed at SP strike − width)
Exits (in order) Profit target (% of premium) 50% → Stop loss 15 pts → Carry position — DTE trigger 2, Exit time 15:20
Sizing Fixed lots 1

Wing width is rupees, not a percent, and 50 is the block's own floor — it only makes sense on a stock trading in RELIANCE's ~₹1,400 range. A ₹300 stock and a ₹4,000 stock don't want the same wing width any more than they want the same OTM %; resize both before saving, same caveat example 13 makes about NIFTY's wing width. Swap the structure for Bear call spread for the bearish mirror.


22. Pre-earnings long straddle (event volatility)

Buy the ATM call and put a day or two before an earnings print, betting the move (in either direction) is bigger than what the straddle's combined premium already prices in. This shape doesn't exist anywhere else in this doc — every other strategy here sells premium against an index that has no earnings date; a single stock does, and that's the whole trade. Available from the Load template… dropdown as "Pre-earnings long straddle (event volatility)".

Socket Blocks
Filters Time window 09:45 · Date window — from 2026-08-05, until 2026-08-06
Expiry Monthly — Min days to expiry 7
Structure Long straddle — LC and LP need no setup (ATM by definition)
Exits (in order) Profit target (% of premium) 40% → Stop loss 30 pts → Carry position — DTE trigger 2, Exit time 15:20
Sizing Fixed lots 1

There's no earnings-calendar filter yet (see roadmap below) — Date window is the manual substitute, and it needs re-typing before every cycle: narrow it to the one or two days before the actual print date each time you run this. Get the window wrong (too early) and theta bleeds the straddle for days before the event even happens; too late and you've missed the entry.

Both legs are long, physically-settled stock options — same delivery-obligation risk as examples 19/20, just on the buy side (you'd be the one receiving shares, not delivering them). Carry position's DTE 2 floor closes the straddle before that matters, which is what you want here anyway: the trade is about the earnings move, not about holding the position into expiry.


23. Post-earnings IV-crush short strangle

The mirror trade to example 22, run in the opposite direction on the calendar: instead of buying vol before the print, sell it right after — implied vol reliably collapses once the uncertainty resolves, and this harvests that collapse. Same underlying, same expiry, opposite side of the vol curve.

Socket Blocks
Filters Time window 09:45 · Date window — from 2026-08-07, until 2026-08-08
Expiry Monthly — Min days to expiry 10
Structure Short strangle — SC and SP selector Premium target: Target premium 15, Min premium 8, Max premium 25
Exits (in order) Profit target (% of premium) 50% → Stop loss 25 pts → Carry position — DTE trigger 2, Exit time 15:20
Sizing Fixed lots 1

Date window starts the day after the print, not before — entering while IV is still elevated (example 22's window) is the opposite trade. The two templates are meant to be run as a matched pair around the same earnings date, not interchangeably.

Premium target 15 is a placeholder, not a real number for any specific stock. Target/min/max premium depend entirely on the stock's price level and its typical post-earnings IV — check the option chain the morning after the print and reset these before entering, don't reuse the shipped values across different stocks or even across different quarters for the same one.


24. Stock premium-target short strangle (clone per name)

The stock equivalent of example 2's weekly premium-target strangle: sell a call and put whose premiums land near a rupee target, letting the strikes float with the stock's own volatility instead of a fixed OTM distance. Meant to be cloned — build once, save under a distinct name per stock (RELIANCE, then swap the underlying and re-save as a new strategy for the next name), each running independently so a bad print in one name doesn't touch the others. Available from the Load template… dropdown as "Stock premium-target short strangle (clone per name)".

Socket Blocks
Filters Time window 10:00 · Gap skip 1.5%
Expiry Monthly — Min days to expiry 15
Structure Short strangle — SC and SP selector Premium target: Target premium 12, Min premium 6, Max premium 20
Exits (in order) Profit target (% of premium) 55% → Stop loss 30 pts → Carry position — DTE trigger 2, Exit time 15:20
Sizing Fixed lots 1

Gap skip, not VIX skip, is the filter that actually reads this underlying. vix_skip/vix_floor/vix_and_gap_skip all read India VIX — a market-wide gate that means the same thing whether the spec trades NIFTY or a single stock, not a read on this stock's own volatility. Gap skip reads this underlying's own open vs. previous close, so it's the one filter here that's genuinely per-name; a market-wide VIX filter can still be layered on top as an optional macro overlay (skip trading everything on a panic day), but it isn't a substitute for a per-stock IV gate, because there isn't one yet.

No per-strike liquidity check. The composer's underlying picker only offers names from top_fno_stocks(), so an illiquid stock can't be selected at all — but option-chain spread on a liquid name's far-OTM strikes is unguarded. Watch the fills before scaling this past 1 lot.


25. Covered strangle (F&O stock, income)

Example 24's structure with the same covered checkbox as example 20, applied to the SC leg only: the short call is verified against your live demat holdings before the engine arms (refuses to enter unless you already hold at least one lot), while the SP leg trades exactly like example 24's short put — naked/cash-secured, no holdings check. min_capital drops accordingly: the call side prices near-zero (already covered) and only the put side's undefined-risk margin remains.

Socket Blocks
Filters Time window 10:00 · Gap skip 1.5%
Expiry Monthly — Min days to expiry 15
Structure Short strangle — SC and SP selector Premium target: Target premium 12, Min premium 6, Max premium 20; covered
Exits (in order) Profit target (% of premium) 55% → Stop loss 30 pts → Carry position — DTE trigger 2, Exit time 15:20
Sizing Fixed lots 1

Same asymmetry as example 20: only the call side is holdings-checked, because only the call side can be covered by owning the stock. The put side stays exactly example 24's naked put — same physical-settlement risk, same carry-position exit floor. Use example 24's plain Short strangle template instead if you don't already hold the shares.


Cross-underlying. Portfolios of specs, not one spec.

Dispersion and sector pairs (multi-spec patterns)

Two shapes worth naming even though neither is a single composer template — the composer builds and saves one spec at a time, and both of these are portfolios of specs, not one strategy:

  • Dispersion — short an index straddle (example 4's VIX-regime straddle, or a plainer example 1 shape, on NIFTY) as one saved strategy, and long straddles (example 22's shape, minus the earnings-specific date window) on 4-5 index heavyweights as separate saved strategies alongside it. The bet is that the index's realized correlation comes in below what its own option prices imply, without taking a view on any single name's direction.
  • Sector pairs — a bull put spread (example 21) on the stronger name in a sector, a bear call spread (example 21's structure swap) on the weaker one, saved as two independent strategies. Relative-value instead of a directional bet on either name outright.

Both are just "save example 21 or 22's shape twice, with different underlyings and opposite structures" — no new block or template needed, just running more than one strategy from the Strategies list at once and sizing each leg of the portfolio deliberately rather than letting position count grow by accident.


Not yet expressible (roadmap)

These common shapes need blocks that don't exist yet — don't try to approximate them with the current set:

  • Ratio spreads / jade lizard — need per-leg quantity multipliers.
  • "Expiry-day only" or day-of-week entry — no DTE/day filter yet; min DTE 0 enters every day, not just Tuesday. Example 3 above works around it by running daily with tight OTM strikes.
  • Delta-target OTM shorts (the optionstrat-style "sell the 16-delta strangle") — Delta target only scans deep-ITM strikes, it's for the diagonal's long legs. Use Premium target or OTM % for strangle shorts instead (example 2).
  • Earnings-calendar filter — no block reads an earnings date. Examples 22/23 use Date window as a manual stand-in, re-typed every cycle.
  • Per-stock IV filtervix_skip/vix_floor read India VIX, market-wide, not this underlying's own implied vol (example 24). gamma_target and delta_stop do solve a per-name IV from a live quote internally, but there's no filter block exposing it yet.

Applies to ThetaPrime v0.35.4 · Page last updated 2026-08-14