# Dhan feature investigation and Strike Lab implementation Investigation date: 3 November 2026 (Asia/Kolkata). Update, 4 November 2026: historical chain replay and six OI buying rules have been added in v0.2. See [OI_MODULE.md](OI_MODULE.md) for API sources, execution boundaries and browser verification. The original 20-test and browser results below describe the initial build; the OI update adds further checks. ## What was observed REA launched Microsoft Edge with temporary, empty browser storage and visited https://web.dhan.co/index/home. It redirected to https://login.dhan.co/?location=DH_WEB. Evidence ID: ev_42be882d95bb9bcedfcb7f08dea1136772a36e63fadb82d5bef37beea54abde0. Screenshot: dhan-login.png. This establishes the unauthenticated redirect, not the trading features behind login. The user subsequently signed in in the in-app browser. Its visible accessibility snapshot showed Dhan Home, a watchlist, and links named Advanced Option Chain, Power Scalper, Options Trader, Price Alerts, TradingView Webhook, Trader’s Controls and Trader’s Diary. This was a browser UI observation, not REA evidence. No private financial balances are reproduced here. On resuming, the browser adapter reported `browser.user is unavailable`; listing the tab worked, reading and interacting did not. Authenticated feature behavior remains unverified. No credentials were read or copied from that session. REA separately captured Dhan’s public Options Trader Web page: https://dhan.co/options-trader-web/. Evidence ID: ev_a984c10ce181e81f30c57e76d6ced467458001d4c24e69ea64d0e332d143c8e9. Screenshot: dhan-public-features.png. Retained public DOM: public-dom.json. Full original records: rea-bundle.json. The large MCP response exceeded its transport budget; the complete retained records were exported rather than repeating the capture. A public feature description is evidence of Dhan's claims, not proof of private implementation or live execution. ## How the documented feature flow works The public product page describes custom and preset strategies, a straddle chain, strategy chart comparisons, payoff graphs, directional ideas, scanners and an advanced chain. The chain organizes calls and puts by strike and expiry; the builder collects selected contracts; payoff visualizes expiry outcomes. Strategy comparisons let the user inspect alternative structures. Sources: https://dhan.co/options-trader-web/ and https://dhan.co/blog/option-trading/how-to-trade-using-the-option-chain-on-dhan/ . Strike Lab adapts the chain → configure legs → evaluate → compare workflow for option-buying historical research. Its historical indicator signals, risk simulation and comparison results are independently implemented design choices. They are not claimed to reproduce Dhan’s internal calculations. Live brokerage execution, selling legs and account/portfolio replication are outside this research app. ## Verified API contract from Dhan's documentation 1. https://dhanhq.co/docs/v2/option-chain/ documents POST /v2/optionchain and /v2/optionchain/expirylist. Authentication uses access-token and client-id headers. Chain rows include price, OI, previous OI, volume, IV, Greeks and top bid/ask. A three-second chain limit is documented; the adapter serializes these requests with spacing. 2. https://dhanhq.co/docs/v2/historical-data/ documents /v2/charts/intraday for active instruments, with minute OHLC and optional OI. Our fixed-contract adapter requests NSE index options. Contract ID, expiry and strike are supplied by the user and must agree with the instrument master. 3. https://dhanhq.co/docs/v2/expired-options-data/ documents /v2/charts/rollingoption, relative ATM strike history and a maximum 30-day request window. Strike coverage varies by contract. Our rolling-data route validates the request and labels its output exploration-only. Relative moneyness can switch contracts; silently treating the series as one held contract would be invalid. 4. https://dhanhq.co/docs/v2/instruments/ provides the instrument-master source for security ID, expiry, option type, lot size and strike. Quantity in this research app means units; verify the applicable historical lot size. No real token was provided, so successful live Dhan data access and the account’s entitlements are unverified. Fixture tests validate headers, normalization and routing; they do not establish production connectivity. ## Data and simulation limits Synthetic demo data is for exercising the app, not a performance claim. Imported candles must retain explicit timezone, contract identity and historical spot. The active-contract adapter accepts an optional historical index security ID and joins underlying closes by timestamp, rejecting missing matches. Without that ID it repeats the supplied reference spot and states this assumption in its warning: dynamic historical ATM selection requires actual synchronized historical underlying prices. Fetching one option contract cannot create a complete multi-strike or multi-leg dataset; merge verified contract histories before comparing those strategies. The engine evaluates indicator signals from completed premium candles and enters on the next exact interval. Single-leg OHLC ambiguity resolves stop before target; trailing changes apply to later candles. Basket thresholds use combined closing premiums and exit at a later synchronized opening, because individual option highs and lows need not occur together. Read the engine's returned warnings and limitations. Missing candles can leave unobserved price paths; do not interpret an OHLC backtest as tick-level execution. Comparisons allocate independent starting capital to each strategy. They are not a shared-capital portfolio. Costs are user-configured flat fees and slippage, not a complete exchange tax schedule. Drawdown is based on realized equity, not continuous mark-to-market. Research remains intraday and long premium only; historical Greeks/IV execution rules, exchange holidays, instrument-master reconciliation, production accounts and distributed jobs remain further work. ## Build verification 20 automated tests passed for the execution engine, Dhan adapter and local server. Fixtures cover exact-next-bar entries, stop/target ambiguity, gap stops, premium indicator triggers without future inputs, fixed contract identity, synchronized basket entries/exits, capital checks, trailing, daily limits, costs, imported-data rejection, independent comparison, historical spot joins and restricted upstream routing. REA browser scenario ev_0c77d6edbad26253229a517250dbee2d623468027dbbca62b8fccf024ed7489e clicked the builder and ran the default synthetic test: five trades appeared with no page-error events. The initial visual test found a number-input step mismatch that prevented submission; this was corrected before the successful capture. Desktop result: app-backtest.png. REA browser scenario ev_0d5e8b593d702182bbaf649d8944d19495402d8a63eaac9d8cb4d048235316c3 ran the builder at 390 × 844 pixels with no page-error events. Screenshot: app-mobile.png. REA browser scenario ev_9360ada3d643fe29f0733706fa78ca01ca61a078d2bae8bd55d56f881455306c selected all seven strategies and executed comparison. All seven rows displayed, with four or five synthetic trades each and no page-error events. These synthetic default results were negative after modeled costs and are not a profitability claim. Screenshot: app-comparison.png. Original records, including the failed initial UI captures, are retained in rea-verified-bundle.json. Compact outcomes: ui-verification.json. ## Outstanding coverage Answered: public feature flow, documented data API schemas, safe separation of chain snapshots and historical candles, independent implementation and fixture validation. Partially answered: Dhan feature inventory (public documentation and signed-in home navigation only). Unresolved: authenticated detailed feature interactions, internal Dhan algorithms, actual token/entitlement validation, complete expired fixed-contract reconstruction. This is a working research build, not verified full parity with Dhan.