Only Rolling ATM±3 strikes (OPTSTK) → cannot backtest fixed-strike positional trades

Hi Team, @Hardik @Tradehull_Imran

I’m trying to use Dhan Expired Options Data API (/v2/charts/rollingoption) for realistic backtesting of equity option positional strategies (monthly expiry OPTSTK).

:white_check_mark: What works

The API returns OHLC/volume (and other fields) for strikes selected as:

  • ATM, ATM+1, ATM+2, ATM+3 (and similarly ATM-1..ATM-3 for equity options as per docs)

This is great for near-ATM strategies only if the strike stays within the ±3 band.


:cross_mark: Limitation for positional backtesting (core issue)

For positional backtests, we must track the same exact contract after entry:

  • If I buy ATM CE at entry, I hold the same strike (it becomes ITM/OTM as spot moves).

  • But this endpoint is rolling by moneyness (ATM±N relative to spot), so once spot moves enough, the original strike goes outside ATM±3 and I can’t fetch its OHLC anymore.

Example (generic):

  • Entry day: Spot = X, ATM strike = K → I enter K CE (monthly)

  • Few days later: Spot moves strongly and now ATM is K+6 (or more)

  • I still need OHLC for K CE (the contract I actually hold)

  • But with rolling ATM±3, K CE is no longer available, so the backtest becomes incomplete/incorrect.

This creates 2 big problems:

  1. Data gap: cannot get OHLC for the actual held strike when it drifts beyond ±3

  2. Backtest bias: if we keep using “ATM” daily, we accidentally “switch contracts” (look-ahead / rolling bias), which is not what happens in real trading.


Why this matters

Many real strategies are positional and trend-based. A move of just a few sessions can push a previously ATM option far away from current ATM, and without fixed-contract candles, the backtest cannot be trusted.

Thanks!


Can you please update? Would be great if you can provide even for OPTSTK upto ATM±10 .

Thanks

Hey @Romesh ,

We understand your requirement about fetching the data for the particular contract throughout the time for backtesting. Please note that we had already taken this as a feedback at our end and will try to implement the same in future builds.

Thank You for consideration!