I’ve been observing the Gamma, Delta, and IV values on the Upstox API and trading platform,
and they are not updating or reflecting properly during live market hours.
This issue has been consistent for the past couple of weeks.
This impacts option traders like me who rely heavily on these metrics for decision-making.
I’m attaching a screenshot for your reference. Please check and confirm if there is a
technical glitch or delay in the data feed, and let us know the resolution timeline.
@BHARATHI This is because IV calculated is zero when market prices are input in the Black scholes model, as it is a theoretical model and market does not always follow underlying assumptions of the model.
I read the forum post about differences in IV across websites. I understand IV can be different because of spot/future price, time to expiry, interest rate, etc.
But my problem is different. On some strikes, Gamma, Delta and IV suddenly fall to zero, even when there is live trading at that strike.
This is not just a small difference. It goes completely to zero, which makes it very hard to use for trading.
Can you please check:
Why these values drop to zero even when the strike is active?
Is there any fix or alternate method (like exchange IV) to avoid this zero problem?
I have attached a screenshot for reference.
Please escalate this to the technical team.
@BHARATHI - There is a subtle difference between traded today and traded recently. Just because there is OI, doesn’t mean that the LTP represents what you can actually trade “at”. When a contract is near expiry, IV outputs will be more susceptible to differences between actual bid-ask prices that are available in the market and what the LTP is.
Let me walk through how this would work. Let’s use the one screenshot you provided where the Nifty is at 25294.35 and look at the 25450 Put strike. In the below image, I am using multiple values of volatility to calculate a modeled price for the Put and Call options. As I decrease my volatility assumptions, the Put option model price decreases (as expected). However, it never converges to the LTP of 141.45 (vs. 145.19 at a 1% IV). What this means is that the Nifty has moved and no one has traded recently enough in that strike resulting in the LTP assumption no longer making sense. By my calculations, assuming that the “real” IV for this 25450 contract at this time was 6.5% (slightly lower than the nearby strike), the Nifty should have been trading at around 25303 instead of 25294.
I am fairly confident that the NSE value would simply be the stale / last available IV value which wouldn’t provide correct insights. Seeing a ‘0’ value is a quick way to show that the LTP displayed is 100% not the price you are going to pay for the contract. If we were to provide the stale value (or last available value), you can’t compare the Greeks/IV to the nearby strikes because those values are based on fresh data. Of course, you wouldn’t know that the Greeks/IV are stale and if you are trading on volatility mispricing, you will be making a decision based on bad information.
We can explore using the bid-ask as the price to calculate the IV. Of course, we would need to use the midpoint value because some customers may be buying and others selling. As you start trading closer to expiry, this spread will widen for contracts that are a few strikes OTM/ITM leading to possibly still having ‘0’ values.
Thanks for the detailed explanation. I understand now that the zero values are shown when the LTP is stale and not tradable, and it is better than showing wrong/stale Greeks.
Using bid-ask midpoint for IV sounds like a good idea, even if spreads are wide, because at least it gives some reference instead of zero.
For traders like me, continuous Greeks are very important. Is it possible to give an option in API/platform to choose between last available IV vs zero? That way we can decide based on our trading style.