I am trying to use the Expired Options Data API for options backtesting, and I’ve identified a structural limitation that makes realistic backtesting impossible.
Issue:
The API does not allow fetching OHLC data for a specific strike price. It only accepts "ATM", "ATM+1", "ATM-1", "OTM±X", etc.
Because ATM is dynamically recalculated for the entire date range, the strike mapped to "ATM" changes as the underlying price changes.
Example:
-
At 9:30, NIFTY = 25234 → ATM = 25250
-
I take a trade in 25250 CE
-
At 11:15, NIFTY = 25310 → new ATM = 25300
When I call the API for "ATM" over the 9:30–11:15 range, the API returns 25300 CE, not 25250 CE.
This makes it impossible to exit the same strike that I entered.
Impact:
-
Fixed-strike backtesting becomes impossible
-
Entry ATM ≠ exit ATM
-
Multi-leg strategies, hedging, directional trades, spreads, and realistic exit conditions all break
-
Only very basic ATM-only strategies work, and even those are unreliable because ATM is recalculated globally