Changelog

Changelog & Audit Log

Chronological record of every significant change to the bot. Each entry maps to a git commit. Run git show <hash> for the full diff.

AI Overhaul — Visibility / UI June 24, 2026

DateCommitChangeFiles
2026-06-24 pending AI visibility surfaces — New read endpoints /api/sentiment/latest, /api/sentiment/history, /api/ai-market/data-quality, and /api/ai-market/calibration. Frontend gains a SentimentGaugePanel (diverging-bar gauge) on the main Dashboard, a per-trade SENT ±N badge on open range trades in TradeTable, and wires the previously dead AIPredictionsPanel plus new data-quality and calibration cards into the AI Market page. Added vitest and a useSentiment hook test. dashboard_server.py
frontend/src/hooks/useSentiment.ts
frontend/src/components/dashboard/SentimentGaugePanel.tsx
frontend/src/components/dashboard/TradeTable.tsx
frontend/src/components/dashboard/AIPredictionsPanel.tsx
frontend/src/pages/Dashboard.tsx
frontend/src/pages/AIMarketPage.tsx

Strategy Factory Roadmap June 10, 2026

DateCommitChangeFiles
2026-06-10 pending Roadmap navigation re-pointed — Replaced the Autonomous Bot and Backtesting Engine Roadmap sub-links with direct Track 1 Strategy Pipeline, Track 2 Engine Build, and Strategy Factory Spec links. Authenticated dashboard endpoints now serve both boards and the two-track design spec. frontend/src/components/Sidebar.tsx
frontend/src/pages/AutonomousRoadmap.tsx
frontend/src/App.tsx
dashboard_server.py

Autonomous Bot Roadmap Week 1 June 8, 2026

DateCommitChangeFiles
2026-06-09 pending Backtesting Engine — Full historical replay + grid optimizer for DC/DCS/DCS_SKEW/DDC/IC/MDC. Real scanners run under patched now_ist() and validated Config overrides via a MockDhanClient; signals become live trade dicts, legs are repriced from NSE bhavcopy / IV snapshots / Black-Scholes, and exits reuse the live position_monitor helpers. Parallel grid search (ProcessPoolExecutor, db_path workers), CLI (python -m arb_bot.backtest), async API jobs, and a React /backtest tab. Three new SQLite tables. arb_bot/backtest/
arb_bot/storage.py
dashboard_server.py
frontend/src/pages/BacktestPage.tsx
frontend/src/hooks/useBacktestData.ts
2026-06-09 pending Controlled MDC scale-in safety — A second MDC position now requires a 90-minute cooldown, meaningful spot movement, and a healthy newest anchor. Execution rejects exact duplicate DC-family option security-ID sets across base and MDC_* names before simulation or broker orders. arb_bot/scanners/master_dc.py
arb_bot/execution/engine.py
arb_bot/bot.py
arb_bot/config.py
2026-06-09 pending Backtesting Engine roadmap documents — Added a Roadmap sidebar entry and a tabbed dashboard page for reading the approved backtesting design spec and implementation plan. Authenticated API endpoints serve both Markdown documents. frontend/src/pages/BacktestingEngineRoadmap.tsx
frontend/src/components/Sidebar.tsx
frontend/src/App.tsx
dashboard_server.py
2026-06-08 pending Go-live readiness and dashboard trade history repair — Readiness now measures positive realized dry-run P&L, excludes live/shadow records, maps SDCS to persisted DCS_SKEW trades, and the dashboard history table now supports newest-first server pagination plus strategy filtering. arb_bot/go_live_manager.py
dashboard_server.py
frontend/src/components/dashboard/TradeTable.tsx
frontend/src/hooks/useDashboardData.ts
2026-06-08 pending Risk envelope integration — Added the production dry-run risk envelope gate before new-entry scans, close-time envelope P&L updates, 7-day blocking-event lookahead, Telegram /envelope//resume_envelope confirm, dashboard /api/envelope/state, and a dashboard Risk Envelope panel. arb_bot/risk_envelope.py
arb_bot/bot.py
arb_bot/execution/engine.py
arb_bot/event_rules.py
arb_bot/command_handler.py
dashboard_server.py
frontend/src/components/dashboard/RiskEnvelopePanel.tsx

Production Performance Review June 7, 2026

DateCommitChangeFiles
2026-06-07 pending Metrics and AI diagnostic repair — Daily metrics now roll on the actual IST date, Strategy Analytics deduplicates closes by tag, journal rows retain original trade fields, and AI analysis rows persist downstream execution status/rejection reasons. AI entry-zone parsing now accepts descriptive numeric ranges. arb_bot/metrics.py
arb_bot/storage.py
arb_bot/autonomous_market.py
arb_bot/execution/engine.py
dashboard_server.py
2026-06-07 pending Phase 3 state and slot controls — Open option trades now persist an explicit position state (OPEN, PROFIT_LOCK, EXPIRY_APPROACH, CLOSING), and ExecutionEngine introduced persisted dc_family slot occupancy. The initial one-slot policy was later replaced by the controlled two-slot scale-in policy. arb_bot/config.py
arb_bot/execution/double_calendar.py
arb_bot/execution/engine.py
arb_bot/execution/position_monitor.py
public/sections/09_exits.html
public/sections/10_risk.html
public/sections/12_files.html
public/sections/14_config.html

IV Surface Tracker May 21, 2026

DateCommitChangeFiles
2026-05-21 pending AI market OpenAI parameter guardAIRunner now omits temperature for GPT-5-family models, reports incomplete Responses API calls before JSON parsing, and gives the scheduled web-search market analysis a larger output budget via AI_MARKET_MAX_OUTPUT_TOKENS. arb_bot/ai_runner.py
arb_bot/autonomous_market.py
arb_bot/config.py
tests/test_ai_runner.py
2026-05-21 pending IV Surface empty-state fixes — Dashboard IV endpoints now fall back from an empty current trading date to the latest captured session. IVSampler estimates smile CE/PE IV from option LTP when Dhan omits raw per-leg IV and labels estimated rows. The React IV Surface page shows the effective fallback date and renders near/far ATM IV history when skew history is unavailable. arb_bot/iv_sampler.py
arb_bot/storage.py
dashboard_server.py
frontend/src/pages/IVSurface.tsx
frontend/src/hooks/useIVSnapshots.ts
frontend/src/hooks/useIVSurface.ts
frontend/src/hooks/useIVHistory.ts

Trade Journal May 18, 2026

DateCommitChangeFiles
2026-05-19 pending AI debrief schema fix — Changed rejected-strategy delta generation from a free-form JSON object to strict structured-output rows, then normalized rows back into the existing journal delta map. This prevents OpenAI invalid_json_schema failures from leaving closed trades without an AI debrief. arb_bot/ai_debrief.py
arb_bot/prompts/trade-debrief.md
tests/test_ai_debrief.py
2026-06-08 pending Week 2 debrief schema alignment — Post-trade AI debriefs now also persist the roadmap's structured JSON payload with schema version, root cause, regime correctness, exit timing, theta/vega/spot attribution, suggested parameter deltas, and confidence while preserving the narrative debrief used by existing operator views. arb_bot/storage.py
arb_bot/ai_debrief.py
arb_bot/prompts/trade-debrief.md
arb_bot/command_handler.py
frontend/src/pages/TradeJournal.tsx
2026-05-19 pending Trade Journal slice 2 — Added operator notes, dashboard inline note editing via PATCH /api/journal/{tag}/notes, Telegram /note <tag> <text>, low-cost AI post-trade debriefs with AI_DEBRIEF_MODEL=gpt-5.4-nano, rejected-strategy delta, AI verdict outcome, and event-risk annotation stored on trade_journal. arb_bot/storage.py
arb_bot/ai_debrief.py
arb_bot/prompts/trade-debrief.md
arb_bot/execution/engine.py
arb_bot/command_handler.py
dashboard_server.py
frontend/src/pages/TradeJournal.tsx
frontend/src/hooks/useTradeJournal.ts
2026-05-18 pending Trade Journal slice 1 — Added trade_journal SQLite persistence, close-time journal snapshots, idempotent backfill from existing closed trades plus IV/battle/AI context, protected /api/journal endpoints, Telegram /journal <tag>, and a React /journal filterable list page. arb_bot/storage.py
arb_bot/execution/engine.py
arb_bot/command_handler.py
dashboard_server.py
frontend/src/pages/TradeJournal.tsx
frontend/src/hooks/useTradeJournal.ts

Broker Health Guard May 18, 2026

DateCommitChangeFiles
2026-05-18 pending Backend broker health guard — Added BrokerHealthMonitor, broker_health_samples SQLite persistence, scan-cycle no-trade/dry-run downgrades, Telegram /broker_health, and dashboard /api/broker/health. DEGRADED/UNSTABLE force dry-run entries; DOWN skips new entry scans after monitoring and reconciliation. arb_bot/broker_health.py
arb_bot/bot.py
arb_bot/execution/engine.py
arb_bot/storage.py
dashboard_server.py
arb_bot/command_handler.py

Strategy Battle Engine May 17, 2026

DateCommitChangeFiles
2026-05-17 7dd87b2 strategy_battle_log table + store methods — Added strategy_battle_log SQLite table (one row per scan cycle, now auto-pruned after 60 days) and three new SQLiteStore methods: append_battle_log(), list_battle_log(date, limit), list_battle_summary(days=90). Summary aggregates per-day eligible counts, MDC selection counts, and top rejection reasons per strategy. arb_bot/storage.py
tests/test_battle_storage.py
2026-05-17 5f8cc62 BattleAccumulator — New arb_bot/battle.py module. BattleAccumulator collects per-scanner results in memory during a scan cycle (strategy name, eligible flag, signal price, rejection reason) and flushes one row to the store at cycle end. No-op if no strategies recorded. arb_bot/battle.py
tests/test_battle_accumulator.py
2026-05-17 a9269f0 MDC _classify() returns (regime, rejections) tupleMasterDCScanner._classify() return type changed from str | None to tuple[str | None, dict[str, str]]. The second element maps every non-selected strategy to a human-readable rejection reason. scan() unpacks the tuple and embeds _mdc_rejections, _mdc_selected, _spot, _iv, _realized_range, _near_straddle into the returned signal dict. arb_bot/scanners/master_dc.py
tests/test_master_dc.py
2026-05-17 1585842 Strip battle metadata before order dispatchExecutionEngine.execute_master_dc() strips all _-prefixed metadata keys at entry so they never reach the broker or get persisted in trade records. arb_bot/execution/engine.py
tests/test_battle_accumulator.py
2026-05-17 77021a8 Bot scan-cycle wiringrun_scan_cycle() creates a BattleAccumulator after the paused_today guard. Each scanner block calls _battle.record() after scan(). MDC block additionally copies _spot/_iv/_realized_range/_near_straddle context onto the accumulator. _battle.flush() is called (under try/except) before the cycle-done log line. No row is written when blocked by guards, concurrency caps, or paused_today. arb_bot/bot.py
tests/test_battle_bot_wiring.py
2026-05-17 cf69f60 Dashboard API endpoints — Added auth-protected GET /api/battle/log?date=YYYY-MM-DD (returns all cycles for a date) and GET /api/battle/summary (per-day aggregated counts, 60-second cache). 6 tests covering empty state, populated state, and auth guards. dashboard_server.py
tests/test_battle_api.py
2026-05-17 3a840ca Strategy Battle dashboard page — New StrategyBattle.tsx page at /battle. Shows a daily summary table (date, cycle count, eligible counts per strategy) with clickable rows that load a cycle drill-down panel below showing per-cycle timestamps, spot/IV/range context, eligibility badges with rejection reasons, and the MDC selection. Added "Battle Log" nav item (Swords icon) to Sidebar between Analytics and AI Market. Added useBattleSummary and useBattleLog hooks. frontend/src/pages/StrategyBattle.tsx
frontend/src/hooks/useBattleSummary.ts
frontend/src/hooks/useBattleLog.ts
frontend/src/App.tsx
frontend/src/components/Sidebar.tsx

Unique Dashboard Session Management May 17, 2026

DateCommitChangeFiles
2026-05-17 a21c915 OTP session uniqueness — Dashboard login now enforces a single active session. Each OTP verification invalidates any previously issued JWT before issuing a new one. Prevents multiple concurrent logins from the same Telegram account and ensures that re-login from a new browser tab automatically expires the old session. dashboard_server.py
tests/test_dashboard_auth.py

AI Market Promotion Report May 17, 2026

DateCommitChangeFiles
2026-05-17 a6114d3 AI_MARKET promotion report — Added a SQLite-backed promotion report with AI verdict history, confidence-band performance, cost summary, DDC with-AI versus without-AI comparison, and hallucination/error log. /shadow AI_MARKET and /promote AI_MARKET now require the AI usefulness gate in addition to the normal confidence gate. Added Telegram /ai_promotion_report, dashboard /api/ai-market/promotion-report, and a Promotion Readiness section on the AI Market page. arb_bot/storage.py
arb_bot/go_live_manager.py
arb_bot/command_handler.py
dashboard_server.py
frontend/src/pages/AIMarketPage.tsx
tests/test_ai_market_storage.py
tests/test_dashboard_ai_market.py
tests/test_go_live_manager.py

Portfolio Greeks Runtime Gate May 17, 2026

DateCommitChangeFiles
2026-05-17 4f6401d Portfolio Greeks gate — Added portfolio-level Greek aggregation, configurable Δ/Γ/Θ/ν limits, pre-entry runtime blocking for SHADOW/LIVE option trades, Telegram /safety Greek totals, and a dashboard Portfolio Greeks panel. Dry-run entries continue by default while recording would-block safety events. arb_bot/portfolio_greeks.py
arb_bot/bot.py
arb_bot/execution/safety.py
dashboard_server.py
frontend/src/components/dashboard/PortfolioGreeksPanel.tsx

Position Reconciliation Auto-Healer May 17, 2026

DateCommitChangeFiles
2026-05-17 a34b52b Reconciliation auto-healer — Added ReconciliationService, the reconciliation_audit SQLite table, scan-cycle reconciliation guard, /confirm_recon, a protected dashboard log endpoint, and an inline dashboard Reconciliation Log. Confirmed-flat trades are removed only after two consecutive flat audits; quantity mismatches require operator acknowledgement before strategy scans resume. arb_bot/execution/reconciliation.py
arb_bot/storage.py
arb_bot/bot.py
arb_bot/command_handler.py
dashboard_server.py
frontend/src/components/dashboard/ReconciliationLog.tsx

Token Renewal Service May 17, 2026

DateCommitChangeFiles
2026-05-17 4316ef6 Standalone token renewal — Added SQLite-backed Dhan token state, token_refresher.py, a systemd unit template, bot-side token reload from SQLite, and a protected dashboard token-health panel. The bot no longer depends on its scan loop to renew the Dhan token. arb_bot/token_manager.py
arb_bot/storage.py
token_refresher.py
scripts/token-refresher.service
dashboard_server.py
frontend/src/components/dashboard/TokenHealthPanel.tsx
2026-05-17 d2c6e90 Token refresh failure alert — The standalone token refresher now retries failed due-refresh attempts every 5 minutes and sends one Telegram warning after 3 consecutive failures asking the operator to check Dhan manually. The alert resets after a successful refresh or healthy no-op check. token_refresher.py
arb_bot/token_manager.py
tests/test_token_manager.py

Market Event Fetch Automation May 17, 2026

DateCommitChangeFiles
2026-05-17 pending Official event-source refresh — Added rule normalization, official-source adapters for NSE holidays, MoSPI CPI/GDP/IIP, and OEA WPI, plus run_market_event_fetch_job(), scripts/fetch_market_events.py, and make fetch-events. Source failures are isolated so one broken feed does not stop seed or other source updates. arb_bot/event_rules.py
arb_bot/event_sources/
arb_bot/event_fetch_job.py
scripts/fetch_market_events.py
Makefile
2026-05-17 pending Warning-event regime supportEventCalendar.get_event_risk() now returns EVENT_RISK for matching non-blocking warning events while still allowing the scanner. Blocking events continue to skip entries before scanner execution. arb_bot/event_calendar.py
tests/test_event_calendar.py

Event Calendar / No-Trade Guard May 17, 2026

DateCommitChangeFiles
2026-05-17 a9b26d9 market_events table + storage — Added market_events SQLite table with upsert_market_events(), get_events_in_range(), and get_upcoming_events() store methods. Supports severity levels (BLOCK / WARNING / INFO) and per-strategy blocking flags. arb_bot/storage.py
tests/test_event_storage.py
2026-05-17 4c2a8ef EventCalendar class + seed data — Added arb_bot/event_calendar.py with get_event_risk() (returns BLOCK / WARNING / CLEAR for a given date and strategy), load_seed(), and symbol-match normalization. Added market_events_seed.json with Budget 2026, RBI MPC, CPI, FOMC, and other known market events. arb_bot/event_calendar.py
arb_bot/market_events_seed.json
tests/test_event_calendar.py
2026-05-17 29099f8 Event guard wired into scan cycleEventCalendar instantiated in ArbitrageBot.__init__. run_scan_cycle() calls _event_guard() before each strategy's scanner block. BLOCK events skip the scanner and log the reason; WARNING events allow scanning but record EVENT_RISK. Config.EVENT_GUARD_ENABLED flag. arb_bot/bot.py
arb_bot/config.py
2026-05-17 d879f1b Telegram event commands — Added /events (upcoming no-trade dates and warnings in a formatted table) and /why_blocked (explains what event is blocking a strategy today and when it clears). arb_bot/command_handler.py
2026-05-17 57c133f Dashboard event endpoints — Added auth-protected GET /api/events/upcoming and GET /api/events/today endpoints returning upcoming event list and today's blocking/warning events respectively. dashboard_server.py
2026-05-17 f2c7b9f EventCalendarPage dashboard — New EventCalendarPage.tsx at /events. Shows upcoming events with severity color coding (red=BLOCK, amber=WARNING, blue=INFO), today's blocking events banner, and a per-strategy impact matrix. Linked from Sidebar. frontend/src/pages/EventCalendarPage.tsx
frontend/src/App.tsx
frontend/src/components/Sidebar.tsx

Roadmap Page & AI Market Enhancements May 17, 2026

DateCommitChangeFiles
2026-05-17 2c284c5 Project roadmap restructureddocs/features.md rewritten into four sections: Shipped, Near-term (3–6 months), Medium-term (6–18 months), and Long-term Vision. Each item now has a concise "What to build" spec and a recommended build sequence. Covers all 11 near/medium-term items and the long-term ML, portfolio, multi-broker, and AI ensemble directions. docs/features.md
2026-05-17 903174e AIRunner → OpenAI Responses API — Migrated AIRunner from Chat Completions to the Responses API. Added temperature, max_output_tokens, and store=True parameters. AutonomousMarket now extracts the structured JSON verdict from the response output items. Tests updated to match the new response shape. arb_bot/ai_runner.py
arb_bot/autonomous_market.py
tests/test_ai_runner.py
2026-05-17 110f2fe Layout responsiveness fix — Removed max-w-* constraint from the main content wrapper in Layout so wide pages (analytics, AI market) use the full available width on large screens. frontend/src/components/Layout.tsx
2026-05-17 3bed16e Roadmap dashboard page — Added a GET /api/features endpoint (auth-protected) that reads docs/features.md from disk. Created FeaturesPage.tsx — a React page that fetches and renders the markdown via react-markdown + remark-gfm with full GFM table support, styled to match the dark theme using @tailwindcss/typography. Wired to route /features and added a "Roadmap" sidebar link (rocket icon) under the Main section on both desktop and mobile. dashboard_server.py
frontend/src/pages/FeaturesPage.tsx (new)
frontend/src/App.tsx
frontend/src/components/Sidebar.tsx
frontend/tailwind.config.js

AI Market Performance Tracking May 16, 2026

DateCommitChangeFiles
2026-05-16 ad50690 /api/ai-market/performance endpoint — Added auth-protected GET /api/ai-market/performance that delegates to load_ai_market_performance() and returns aggregated win rate, P&L, and trade counts split by dry-run vs live mode. Covered by 3 tests: auth guard, empty-DB shape, and one closed winning trade. dashboard_server.py
tests/test_dashboard_ai_market.py
2026-05-16 99fed5f AIMarketPage PerformanceSection — Added ModeStats / PerformanceData interfaces and three new components (StatRow, ModeCard, PerformanceSection) that fetch /api/ai-market/performance and display aggregated win rate, P&L, and trade counts for dry-run and live modes side-by-side above the per-day analysis history. frontend/src/pages/AIMarketPage.tsx
2026-05-16 7faa5bf AI_MARKET registered in GoLiveManager — Added AI_MARKET to the GoLiveManager.STRATEGIES list, assigned dedicated margin buffer (AI_MARKET_MARGIN) and dry-run flag (AI_MARKET_DRY_RUN) so the strategy participates in the DRY_RUN → SHADOW → LIVE state machine and confidence gate. arb_bot/go_live_manager.py

Autonomous AI Market Strategy May 16, 2026

DateCommitChangeFiles
2026-05-16 pending AI_MARKET foundation — Added OpenAI runner, autonomous-market prompt/config, NSE holiday gate, SQLite analysis/trade tables, daily 09:05 analysis scheduling, dry-run single-leg AI_MARKET execution, target/stop/EOD close routing, and DDC weak-trend hint support. arb_bot/ai_runner.py
arb_bot/autonomous_market.py
arb_bot/nse_holidays.py
arb_bot/storage.py
arb_bot/execution/engine.py
arb_bot/bot.py
arb_bot/scanners/diagonal_calendar.py
2026-05-16 pending AI_MARKET operator and dashboard visibility — Added Telegram safety/risk formatting for AI_MARKET, protected dashboard APIs for latest/list/detail/trade data, and a React AI Market page showing analysis history, parsed verdicts, token costs, and linked simulated trades. arb_bot/command_handler.py
dashboard_server.py
frontend/src/pages/AIMarketPage.tsx
frontend/src/App.tsx
frontend/src/components/Sidebar.tsx
2026-05-16 pending AI_MARKET docs update — Documented strategy behavior, class map, scan-cycle schedule, dry-run order flow, exit rules, risk controls, SQLite tables, config, gotchas, safety view, and rebuilt generated docs. public/sections/*.html
public/index.html

Go-Live Readiness May 15, 2026

DateCommitChangeFiles
2026-05-15 pending Paper-to-live controls — Added GoLiveManager, SQLite records persistence, confidence gate, shadow mode, 10% live margin buffer, runtime execution-state routing, shadow metrics snapshots, startup state logging, and Telegram commands for /golive_status, /confidence_report, /shadow, /promote, and /revert. arb_bot/go_live_manager.py
arb_bot/execution/engine.py
arb_bot/command_handler.py
arb_bot/bot.py
tests/test_go_live_manager.py
tests/test_go_live_integration.py
2026-05-15 pending Dashboard go-live visibility — Added /api/go-live/status, shadow trade classification, shadow-safe summary/analytics filtering, dashboard Go-Live Readiness panel, shadow badges, and separate shadow counts in Strategy Analytics. dashboard_server.py
frontend/src/pages/Dashboard.tsx
frontend/src/pages/StrategyAnalytics.tsx
frontend/src/components/dashboard/GoLiveStatusPanel.tsx
tests/test_dashboard_api.py
tests/test_strategy_comparison.py

Master DC Regression Fix May 11, 2026

DateCommitChangeFiles
2026-05-11 pending MDC option-chain parsing — Fixed MasterDCScanner to read live ce / pe row data when classifying regimes, with a backward-compatible fallback for older call_options / put_options payloads. This restores correct MDC routing to MDC_DDC, MDC_DCS_SKEW, MDC_DCS, MDC_DC, or MDC_IC based on the actual chain data. arb_bot/scanners/master_dc.py
tests/test_master_dc.py
public/sections/06d_master_dc.html
public/sections/19_changelog.html

Master DC Meta-Strategy May 10, 2026

Added the Master DC wrapper, which classifies each scan cycle and routes to the best DC-family scanner while tagging the resulting trade as MDC_*.
DateCommitChangeFiles
2026-05-10 pending MasterDCScanner orchestration — Added the MDC wrapper, engine prefix-strip routing, bot scan-cycle integration, and MDC-aware operator formatting. MDC trades now coexist with standalone strategies under their own persistent MDC_* identity. arb_bot/scanners/master_dc.py
arb_bot/execution/engine.py
arb_bot/bot.py
arb_bot/command_handler.py
public/sections/01_class_map.html
public/sections/02_scan_cycle.html
public/sections/09_exits.html
public/sections/14_config.html
2026-05-10 pending MDC docs page — Added a standalone Strategy 7A section with example routes, a scan-flow animation, and an interactive calculator so operators can see how Master DC classifies a cycle before it delegates. Tightened the calculator notes to show the exact routing thresholds and added a no-trade example above the IC ceiling. public/_shell.html
public/sections/00_overview.html
public/sections/06d_master_dc.html (new)
public/sections/19_changelog.html
public/index.html

Operator Coverage May 10, 2026

Expanded Telegram safety, risk, and signal-explanation coverage for the newer option strategies.
DateCommitChangeFiles
2026-05-10 pending New strategy operator visibility/risk, /positions, /safety, and /explain_signal now cover DCS_SKEW, DDC, and IC. DCS_SKEW trades keep their own strategy identity in persistence while reusing DCS-style P&L, Greeks, monitoring, and close routing. arb_bot/command_handler.py
arb_bot/execution/engine.py
arb_bot/execution/double_calendar.py
arb_bot/execution/safety.py

Phase 4 — Iron Condor Fallback May 10, 2026

Added a dry-run Iron Condor fallback scanner and execution path. IC scans only when DC, DCS, DCS_SKEW, and DDC are idle.
DateCommitChangeFiles
2026-05-10 pending IronCondorScanner + dry-run execution — Added 4-leg weekly NIFTY IC fallback. Filters: DTE 3-7, ATM IV 18-26%, realized range ≤ 60% of near straddle, and net credit ≥ 20% of wing width. Execution simulates fills only and persists entry_credit, wing_width, max_loss, and all four leg ids/strikes. Exit rules: 50% credit capture, 1.5× credit stop, or DTE ≤ 1. arb_bot/scanners/iron_condor.py (new)
arb_bot/execution/engine.py
arb_bot/execution/pnl.py
arb_bot/execution/position_monitor.py
tests/test_iron_condor.py (new)
2026-05-10 pending Docs update — Added Strategy 7 page, sidebar entry, overview card, scan-cycle step, exit rules, class map entries, config reference, order flow, and rebuilt public/index.html. public/_shell.html
public/sections/00_overview.html
public/sections/01_class_map.html
public/sections/02_scan_cycle.html
public/sections/06c_iron_condor.html (new)
public/sections/07_order_flow.html
public/sections/09_exits.html
public/sections/14_config.html
public/sections/19_changelog.html

Phase 3 — Directional Diagonal Calendar May 10, 2026

Added the dry-run Directional Diagonal Calendar strategy. DDC buys the far-month ATM option and sells the near-week OTM option on the same side after a strong intraday trend.
DateCommitChangeFiles
2026-05-10 pending DirectionalDiagonalScanner — Added dry-run 2-leg DDC scanner. Captures day open, requires absolute intraday trend ≥ DDC_TREND_THRESHOLD_PCT, chooses BULLISH CE or BEARISH PE diagonal, filters near-week DTE 5-9 and ATM IV 20-25%, and selects near short strike at ATM ± DDC_OTM_DISTANCE_PTS. arb_bot/scanners/diagonal_calendar.py (new)
arb_bot/config.py
tests/test_diagonal_calendar.py (new)
2026-05-10 pending DDC dry-run execution + exits — Added execute_diagonal_calendar(), DDC trade persistence, live-LTP P&L, close-leg routing, and monitor exits for 30% profit target, 20% debit stop, short-strike breach, and near-week DTE ≤ 1. Wired scanner into run_scan_cycle() after DCS_SKEW and before IC fallback. arb_bot/execution/engine.py
arb_bot/execution/double_calendar.py
arb_bot/execution/pnl.py
arb_bot/execution/position_monitor.py
arb_bot/bot.py
tests/execution/test_engine_pnl.py
2026-05-10 pending DDC docs update — Added Strategy 6 page, sidebar entry, overview card, class map entries, and documented DDC config parameters plus dry-run entry/close flow in the generated documentation. public/_shell.html
public/sections/00_overview.html
public/sections/01_class_map.html
public/sections/06c_directional_diagonal.html (new)
public/sections/07_order_flow.html
public/sections/14_config.html
public/index.html

Phase 2 — Adaptive + Skew-Aware DCS May 9–10, 2026

Added adaptive IV-regime wing sizing, intraday realized-range entry filters, put/call skew detection, and a new parallel DCS_SKEW strategy class for side-by-side comparison. All changes are dry-run only. 8 tasks, 10 commits.
DateCommitChangeFiles
2026-05-10 ee94050 Docs update — Playground sections updated with adaptive wings, skew, realized range, SDCS calculator, and this changelog. Fixed STRIKE_STEP rounding (50→100) in JS calcWing. public/sections/06_stretched_dc.html
public/sections/06b_skewed_dc.html (new)
public/sections/14_config.html
public/sections/19_changelog.html (new)
2026-05-10 7cb500d Wire SDCS + DC selectorSkewedDCSScanner imported and instantiated in ArbitrageBot; wired to metrics; SDCS scan block added to run_scan_cycle(). _spot_history and _realized_range_today() moved from StretchedDoubleCalendarScanner up to DoubleCalendarScanner parent so all three scanners inherit. DC range check added: skip DC if range > 45% of straddle (prefer DCS). DC_REALIZED_RANGE_MAX_PCT = 0.45. arb_bot/bot.py
arb_bot/config.py
arb_bot/scanners/double_calendar.py
arb_bot/scanners/stretched_double_calendar.py
tests/test_adaptive_dcs.py
2026-05-09 a27b784 Refactor: _find_row + SDCS_DRY_RUN_find_row() extracted as @staticmethod on DoubleCalendarScanner base class (was duplicated inline in both DCS and SDCS scan methods). SDCS_DRY_RUN wired into execute_stretched_double_calendar() — was previously a dead config param. arb_bot/scanners/double_calendar.py
arb_bot/scanners/stretched_double_calendar.py
arb_bot/scanners/skewed_double_calendar.py
arb_bot/execution/engine.py
2026-05-09 284e44a SkewedDCSScanner (DCS_SKEW) — New file skewed_double_calendar.py. Subclass of StretchedDoubleCalendarScanner with strategy name "DCS_SKEW". Overrides scan() with two-step wing logic: base_wing → OTM row lookup → _calc_skew_wings() → re-lookup if strikes changed. Uses net_greeks_sdcs(ce_wing, pe_wing). Signal dict adds ce_wing_offset, pe_wing_offset. 11 tests, 61/61 passing. arb_bot/scanners/skewed_double_calendar.py (new)
tests/test_skew_aware_dcs.py
2026-05-09 9b1c7c6 _calc_skew_wings() + skew config — Added to StretchedDoubleCalendarScanner. Reads implied_vol from OTM chain rows, computes put_skew/call_skew vs ATM IV, and returns asymmetric (ce_wing, pe_wing) when skew gap exceeds threshold. Three new config params: DCS_SKEW_THRESHOLD=2.0, DCS_SKEW_CE_WING_PCT=0.45, DCS_SKEW_PE_WING_PCT=0.60. arb_bot/config.py
arb_bot/scanners/stretched_double_calendar.py
tests/test_skew_aware_dcs.py
2026-05-09 0069815 net_greeks_sdcs() — Added to greeks.py with independent ce_wing/pe_wing args for asymmetric 8-leg Greeks calculation. net_greeks_dcs() refactored to delegate to it with ce_wing=pe_wing=wing. Three tests: symmetric equality, asymmetric difference, key set. arb_bot/greeks.py
tests/test_skew_aware_dcs.py
2026-05-09 6b27798 Fix: spot history memory leak_spot_history list in StretchedDoubleCalendarScanner was never cleared between trading days. Added dcs_scanner._spot_history.clear() to EOD cleanup block in bot.py. arb_bot/bot.py
2026-05-09 d73b1d5 DCS realized-range filter — DCS scanner tracks intraday spot history and skips entry when realized range (high−low) exceeds DCS_REALIZED_RANGE_MAX_PCT × near_straddle (default 80%). Prevents entering 8-leg positions when market has already made a large directional move. arb_bot/config.py
arb_bot/scanners/stretched_double_calendar.py
tests/test_adaptive_dcs.py
2026-05-09 51565a8 Adaptive wing sizing_adaptive_wing_pct() added to StretchedDoubleCalendarScanner. _calc_wing() updated to use it. Three IV tiers: <22.5%→45%, 22.5–24%→52%, >24%→60%. Tests for all three tiers plus wing ordering. arb_bot/scanners/stretched_double_calendar.py
tests/test_adaptive_dcs.py
2026-05-09 3fd81df Config: adaptive wing tier params — Replaced single DCS_WING_PCT=0.52 with five new params: DCS_IV_REGIME_LOW=22.5, DCS_IV_REGIME_HIGH=24.0, DCS_WING_PCT_LOW_IV=0.45, DCS_WING_PCT_MID_IV=0.52, DCS_WING_PCT_HIGH_IV=0.60. Also added SDCS_DRY_RUN=True, SDCS_MAX_CONCURRENT=1. arb_bot/config.py
tests/test_adaptive_dcs.py

Infrastructure & Safety Layer May 8, 2026

DateCommitChangeFiles
2026-05-08 a3d0462 Operator safety module — Added /safety command, safety event tracking in metrics, and a read-only audit layer for keeping operator's account view consistent with bot state. arb_bot/ safety files
public/sections/18_safety.html
2026-05-08 3a97dc7 Live P&L aggregation — Total live P&L added to hourly reports and /positions command output. New validation tests. arb_bot/bot.py
arb_bot/metrics.py
2026-05-08 aed68c0 Operator risk & replay tools — Added risk inspection and session replay tooling for post-trade analysis. arb_bot/
2026-05-08 3dd2e64 Execution engine split — Refactored engine.py helpers into smaller, independently testable units. arb_bot/execution/engine.py

Live Execution Enabled May 3–4, 2026

DateCommitChangeFiles
2026-05-04 b13cd6d Real-time P&L at time-stop exits — DC and DCS time-stop exits now compute actual P&L from current LTP at close time rather than showing the expected value from entry. arb_bot/execution/engine.py
2026-05-03 96e0159 Live execution for DC and DCSexecute_double_calendar() and execute_stretched_double_calendar() both enabled for live MARKET orders when dry-run flags are False. Far legs bought first, near legs sold second to minimize directional exposure during fill. arb_bot/execution/engine.py
arb_bot/config.py

Strategy Enhancements Apr 25 – May 1, 2026

DateCommitChangeFiles
2026-05-01 97ff2fb DCS concurrent position limits — Max concurrent DCS positions cap, duplicate entry prevention (same ATM + near expiry), improved hourly error logging. arb_bot/scanners/stretched_double_calendar.py
arb_bot/config.py
2026-04-28 dcab08f Live P&L in hourly reports — Estimated live P&L for all open positions added to the hourly Telegram summary. arb_bot/bot.py
arb_bot/metrics.py
2026-04-28 866c73c Black-Scholes Greeks — Added arb_bot/greeks.py with bs_greeks(), net_greeks_dc(), net_greeks_dcs(). Entry Greeks snapshot stored in trade record and displayed in Telegram notifications and /positions output. arb_bot/greeks.py (new)
arb_bot/scanners/
2026-04-27 613c634 Fix: DCS expiry look-ahead — DCS now looks to the next-next Tuesday when the nearest is too close (inside DCS_MIN_DTE). Fixes stale stop message formatting. arb_bot/scanners/stretched_double_calendar.py
2026-04-26 d17bf2a STRIKE_STEP=100 + IV threshold tuning — Wing rounding changed from 50-pt to 100-pt steps to match listed NIFTY strikes. IV regime thresholds adjusted in scanner config. arb_bot/scanners/stretched_double_calendar.py
arb_bot/config.py
2026-04-25 66ca4d1 Modular docs + DCS strategy — Playground documentation split into public/sections/*.html with make build-html. StretchedDoubleCalendarScanner (DCS) strategy added. public/_build.py (new)
public/sections/ (all new)
arb_bot/scanners/stretched_double_calendar.py (new)
Disabled strategies (not in changelog above) Box Spread was disabled after live testing Apr 16–20 (0/19 fills — IOC too sensitive on BANKNIFTY options OTM legs). Calendar Spread was disabled after Budget 2026 raised futures STT to 0.05%; round-trip STT alone (~₹1,591/lot) exceeds typical gross (~₹500/lot at 2σ entry).

Battle Log Rejection Visibility June 9, 2026

Actionable no-trade reasons — Battle Log now renders MDC rows and records MDC concurrency, market-data, regime, and delegated scanner rejection reasons. It also records when the IC fallback is skipped because another primary options position is open.