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).
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.
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±3and 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:
-
Data gap: cannot get OHLC for the actual held strike when it drifts beyond ±3
-
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!