Volatility risk premium is the edge.
Implied volatility on Indian indices reliably trades at a premium to realised. Kyoto is biased — by design — toward systematically selling that premium through defined-risk structures. Not predicting direction.
A field manual for nine MCP servers placing defined-risk options trades on Indian indices under one unforgiving SEBI risk gate. Read the tape. Compute volatility. Weigh open interest. Structure the trade. Ask permission. Route. Journal.
A trading system is the sum of the assumptions it refuses to violate.
Implied volatility on Indian indices reliably trades at a premium to realised. Kyoto is biased — by design — toward systematically selling that premium through defined-risk structures. Not predicting direction.
A model that can place an order is not a trading system. A model that cannot place an order without passing eighteen SEBI-aware pre-trade checks — ELM, calendar margin, illiquid-strike guards, cost hurdle, vega event warning — is.
Nine narrow servers, each fluent in one concern, expose tools through MCP. The language model orchestrates. Every server is independently deployed, individually testable, owned by a single phase.
Read top to bottom: data, then decision, then survival, then edge. Servers within a phase converse through Redis Streams; events between phases follow a small set of standardised contracts.
Upstox v3 REST + WebSocket. Protobuf-decoded ticks into Redis pub/sub + a `live_ticks` hypertable. Instrument-master ingester resolves ~96k NSE keys.
Newton-Raphson + Brent solver matched broker IV within 0.5%. 12 years of EOD IV across four indices. India VIX feed wired to `iv_history`.
3-minute chain snapshots + 30-second synthetic interpolator (confidence ≥0.7). PCR, max-pain, velocity, support/resistance, institutional flow.
Cost-adjusted POP is PDF-weighted (chunk 2.6a) — near-spot mass dominates ranking, not far-tail grid points. Wide + narrow IC, iron fly, credit spread, calendar, vix-fade evaluators.
18 pre-trade checks — 12 prudential + 6 SEBI. `check_risk` writes a `sebi_compliance_snapshots` row on every invocation. Rolling-Sharpe capital allocation in v0.
Upstox v3 broker. Sandbox synthetic-fill for paper. LIFO partial-fill unwind. Order Book Imbalance guard (opt-in). Portfolio netting v0 (observation-only).
Every fill writes a `journal_entries` row tagged with `strategy_template`. Per-minute MtM tick. Per-template P&L attribution feeds the EOD reflection agent.
SEBI + RBI + NSE feeds. Keyword classifier + INT8 FinBERT sidecar. Emits `events:institutional` stream at high/critical severity — wakes orchestrator out-of-band for emergency hedge.
Replays historical tick data through the same strategy + risk + executor pipeline. Per-strategy attribution, drawdown curves, Sharpe.
OpenRouter Gemma primary + Anthropic Claude standby. Four trigger paths: cron · continuous · regime-flip listener · event-driven (high-severity news). EOD reflection agent emits per-template recommendations at 15:45 IST.
Every paper trade walks the same seven stages. The arrow points one way; the journal feeds the next loop.
Hover any card to see the tools that ship. Numbers in green are paper-soak live. Numbers in amber are gated on Phase L graduation.
Upstox v3 REST + WS. Tick persistence into Redis + Postgres hypertables. Instrument-master.
Newton-Raphson + Brent IV solver. 12yr historical IV across four indices. India VIX → iv_history.
3-min chain snapshots + 30s synthetic interpolator. PCR, max-pain, OI velocity, S/R, FII/DII.
Cost-adjusted POP, PDF-weighted. Range strategies (IC narrow + wide, iron fly), directional (credit spread), volatility (calendar, vix-fade, long-straddle), arbitrage (long-butterfly, long-box).
18 pre-trade checks. Drawdown auto-de-risk. Dynamic capital weights (opt-in). Kill switch.
Demo / paper / live. Sandbox synthetic-fill. LIFO unwind. OBI guard. Portfolio netting v0.
Per-fill row. Per-template attribution. Per-minute MtM. Annotation API.
RSS · webhook · keyword + FinBERT INT8. Emits institutional stream that wakes the orchestrator.
LLM agent loop. 4 trigger paths: cron · continuous · regime-flip · event-driven (S8 wake).
Plain-English read of every strategy template the platform knows. Each runs in its own worker; each obeys the same risk gate.
Sells two out-of-the-money options (one above, one below the current price) and buys two further-out options as insurance. Profits if NIFTY / BANKNIFTY stays inside the range until expiry. Used in calm or theta-harvest regimes.
A tighter, higher-credit version of the iron condor. Sells at-the-money options + buys protective wings. Best when implied vol is mid-range and the market is expected to pin near a level (often a NIFTY expiry day).
Two-leg directional bet — sell one option, buy a further-out one — that defines maximum loss upfront. Fires when the regime classifier confirms a trend bias (bull-put when up, bear-call when down).
Sells a near-expiry option and buys the same strike on the next-expiry. Profits when implied volatility rises and the front leg decays faster than the back leg. Long-vega play.
When India VIX spikes >5% inside 15 minutes, sells a short strangle (with protective wings) on the index. Closes when VIX reverts halfway back to the day's open. Pure mean-reversion of the fear gauge.
Buys an at-the-money call + put together (a "straddle"). Profits whenever the index moves sharply — up or down. The platform continuously rebalances by trading futures to stay direction-neutral, so the only thing left to capture is the size of moves.
Continuously scans option chains for three neighbouring strikes where the middle option is briefly overpriced versus its neighbours. The platform buys the wings, sells the middle (twice), and captures the small risk-free edge if the mispricing closes.
A four-leg structure (a call spread + a put spread on the same two strikes) acts as a synthetic short-term loan. When the market prices that loan at the wrong interest rate, the platform locks in the gap. Always closed before 14:30 IST to avoid the tax-on-exercise hit at expiry.
Nine layers between a strategy and a bad day. Each fires automatically; the operator sees the audit trail.
The margin kill-switch now compares actual exposure (margin used minus cash on hand) against the cap, not raw margin used. Credit-spread positions that look "over-leveraged" on paper but are fully cash-collateralised no longer trip the switch.
When a container restarts during market hours (an update or fix), the first 90 seconds of broker-init noise (network warm-up, token refresh) are ignored by the risk gate. Real errors are still logged; only the startup blips are silenced.
Some exchange endpoints return contract-error responses for option lookups by design. The platform now ignores those for kill-switch purposes — they're API gaps, not risk signals — while still recording genuine failures.
If a position needs the same adjustment three ticks in a row but every attempt fails, the platform freezes further adjustments on that one symbol. Other symbols keep trading normally. Protects against burning the regulator's 20-orders-per-hour cap on a single broken position.
Live option prices stream from the WebSocket feed straight into a fast in-memory cache. Mark-to-market and pricing decisions now read the cache first, falling back to the exchange API only on a miss. Cuts latency and removes a class of intermittent errors.
The risk gate now blocks any new position when the regime classifier's conviction sits below a floor — a single, universal backstop so a strategy can never open into an unclassified or borderline market, even if its own entry filter misses it.
Every leg now carries its live Greeks into the gate, which sums them across the whole book and blocks a trade that would push net delta, gamma, or vega past their envelopes — turning portfolio risk from a report you read after the fact into a hard pre-trade limit.
Defined-risk structures now size themselves to the account's per-trade max-loss cap — an iron condor automatically narrows its wings to fit a small book and widens them on a larger one. The strategy adapts to the safety limit; the limit is never loosened to fit the strategy.
Before any strategy graduates from paper to live capital, its realised paper Sharpe must sit within one standard deviation of a walk-forward backtest baseline. A paper run that looks "too good to be true" on a thin sample is held back, not promoted.
Three modes share the executor, risk gate, and journal. Only the broker connection and capital flag differ.
Pure local-sim fills. No external calls. Used for risk-pipeline regressions + chunk-3.4 demo.
Routes through Upstox sandbox. Synthetic-fill on sandbox + slippage overlay. ₹5L paper seed.
Real Upstox account. Gated on R-G1..R-G8 paper-soak graduation. Live-confirm flow available.
Every `place_strategy` is preceded by `check_risk` against the same legs in the same loop iteration. The router refuses the place tool until the gate clears.
Four phases. Three shipped. One in paper-soak. Phase L (live trading) is gated on R-G1..R-G8 staying green for 30 calendar days.