I want to calculate the 30/60/90/180 day 100% moneyness implied volatility for a stock. I think I know how to do it but would like to share my thought processes with the group to verify I'm on the right track. I roughly followed the process given in this white paper from Bloomberg (top hit for google search terms "bloomberg implied volatility calculation").

I'm going to run through an example using AAPL.


  • AAPL has European-style options
  • As of 2016-04-29 compute the 60-day IV
  • Stock closed at 93.75
  • My calculations are correct :)

The process is as follows:

  1. 60-day IV would be for expiration as of June 28, 2016. Find option series bracketing that date. The June 17 and July 15 series both bracket it.

  2. For each series, find 4 calls and 4 puts around 93.75. Two should be ITM, two should be OTM. This gives us the 90, 92.5, 95, and 97.5 strikes.

  3. Compute cubic interpolation of a "synthetic" 93.75 strike for the calls and puts on both expiration dates.

June 17 Call, 3.1005

June 17 Put, 3.5855

July 15 Call, 4.0283

July 15 Put, 4.4095

  1. Compute the minutes to settlement from 2016-04-29T15:00:00 (CST) to the June 17 and July 15 dates.

June17_settlement = 70500

July15_settlement = 110820

60day_minutes = 86400

  1. Compute the time-weighted average using #4

June17 = (110820 - 86400) / (110820 - 70500) = 0.6057

July15 = (86400 - 70500) / (110820 - 70500) = 0.3943

Sanity check... 0.6057 + 0.3943 = 1.0

  1. Compute weighted average Call and Put prices for synthetic 60-day option


(3.1005 * 0.6057) + (4.0283 * 0.3943) = 3.4663


(3.5855 * 0.6057) + (4.4095 * 0.3943) = 3.9104

  1. Compute time to settlement for 60-day option

(60 / 365) = 0.1643835

  1. Use Black-Scholes to back out the IV of a Call and Put with stock price 93.75, strike 93.75, rfr 0.25%, time to maturity 0.1643835, and prices of:

Call(3.4663) = 22.7% IV

Put(3.9104) = 25.7% IV

Am I on the right path here? Any suggestions or corrections would be welcome.

  • 1
    $\begingroup$ I would careful as to the risk-free rate you're using... where are the expected dividends and equity funding costs.... you would be better off estimating the implied forwards at both listed expires (use call-put parity since you have already assumed European options) and interpolate as you did with the option prices IMHO. Also it would be better to use an interpolation method in the spatial domain which precludes arbitrage opportunities (prices should stay monotonic and convex). $\endgroup$
    – Quantuple
    Commented Jun 20, 2016 at 16:06
  • 2
    $\begingroup$ Remember that an implied volatility is nothing if you don't specify the forward price to which it is associated (or in your case if the forward price used to compute the volatility is not realistic?) $\endgroup$
    – Quantuple
    Commented Jun 20, 2016 at 16:08
  • $\begingroup$ Okay so the formula for implied forward is: forward = strike +( e^(rfr * t)) * (atm_call_price - atm_put_price). Now I have a forward price for the near term and a forward price for the next term (just like when using the CBOE VIX formula). What should I do with these numbers then? Do a time-weighted interpolation like in step 5 above? Hold my hand here a little bit... $\endgroup$ Commented Jun 20, 2016 at 17:28
  • 1
    $\begingroup$ Your formula is not quite right, it should be: $F(0,T) = K + e^{rT} (C(K,T) - P(K,T))$, for any listed expiry $T$, and any strike $K$. Let $T_1$ denote the near term and $T_2$ the next term. For $T_i, i=1,2$ get the pair of listed call/puts that trade as close as possible to the money, apply the C/P parity to that pair to get $F(0,T_i)$. Now indeed, interpolate $F(0,T)$ from $F(0,T_1)$ and $F(0,T_2)$ as you did with your option prices. With $F(0,T)$ and the interpolated option price $V(S_0;K,T)$ you can now compute the implied volatility by inverting BS formula. $\endgroup$
    – Quantuple
    Commented Jun 20, 2016 at 18:36
  • $\begingroup$ As a reminder, BS formula for a European call can for instance be written in the form: $C(K,T)=e^{-rT}(F(0,T)N(d_1)-KN(d_2))$ with $d_{1,2} = (\ln(F(0,T)/K) \pm 0.5 \sigma^2 T)/(\sigma\sqrt{T})$, so once the forward price $F(0,T)$ is known, you can easily solve for $\sigma$ given the option price and the other model parameter/option characteristics. $\endgroup$
    – Quantuple
    Commented Jun 20, 2016 at 18:45

1 Answer 1


Thanks to @Quantuple I was able to modify the steps listed above to give a more accurate calculation. I'll run through the modified steps with real numbers all the way to the result.

The process is as follows:

  1. 60-day IV would be for expiration as of June 28, 2016. Find option series bracketing that date. The June 17 and July 15 series both bracket it.

  2. For each series, find 4 calls and 4 puts around 93.75. Two should be ITM, two should be OTM. This gives us the 90, 92.5, 95, and 97.5 strikes. (We'll use the "last" posted on 2016-04-29 for these strikes.)

  3. Compute time to maturity for the near-term and next-term options (fractions of a year) from today (2016-04-29)

    • June 17 expiration = 70500 minutes
    • July 15 expration = 110820 minutes
    • maturity-day-minutes = 86400 minutes (60 days)
    • t1 = (70500 / 525600) = 0.1341324200913242
    • t2 = (110820 / 525600) = 0.21084474885844748
  4. Compute the forward price in each series for the strike with the smallest difference between put/call prices.

    • June 17 forward
      • f1 = 92.5 + (e^(0.0025 * 0.1341324200913242)) * (3.80 - 3.02) = 93.28026160207838
    • July 15 forward
      • f2 = 92.5 + (e^(0.0025 * 0.21084474885844748)) * (4.69 - 3.80) = 93.39046925322982
  5. Compute the weighted average components for both expirations

    • (110820 - 86400) / (110820 - 70500) = 0.6056547619047619
    • (86400 - 70500) / (110820 - 70500) = 0.3943452380952381
  6. Interpolate the forward price for our specific time T

    • (93.28026160207838 * 0.6056547619047619) + (93.39046925322982 * 0.3943452380952381) = 93.3237214645116
  7. Compute time to maturity for a 60-day option

    • (60 / 365.0) = 0.1643835616438356
  8. Use Black-Scholes to compute implied volatility of puts and calls using the interpolated implied forward price instead of spot and the interpolated put/call prices

    • forward price = 93.3237214645116
    • strike = 93.75 (for 100% moneyness)
    • time to maturity = 0.1643835616438356 (60 / 365)
    • risk free rate = 0.25% (feel free to look up and interpolate better value)
    • call option price = 3.4663
    • put option price = 3.9104
    • these inputs into BS produce
      • Call IV
        • 0.24188995361328125
      • Put IV
        • 0.24555206298828125
  9. Average the call and put IV to get mean 60-day IV which is an annualized value

    • (0.24188995361328125 + 0.24555206298828125) / 2 = 0.24372100830078125
    • 24.37% annualized

To do this calculation for a 90-day IV, follow these steps. Replace the option series for two series that bracket the maturity date, calc t1, t2, and a 90-day maturity minutes and plug-and-chug.

I'll mark this as the accepted answer unless someone speaks up with any corrections or clarifications in the next day or so.

  • 1
    $\begingroup$ Compared to your first attempt, this looks far better IMHO. Due to call-put parity, European call and put implied volatilities should indeed be exactly the same at the end of the day (else this would represent an arb opportunity). The large discrepancy observed with your original method came from the fact that you did not account for the right forward price. The discrepancy is smaller now. I guess that the remaining error lies in the risk-free rate estimation, and the interpolation assumptions. But it is still a decent accuracy. $\endgroup$
    – Quantuple
    Commented Jun 21, 2016 at 21:18
  • $\begingroup$ As long as the error is roughly the same for all IV computations relative to each other, I'll be satisfied. That is, if I compute the 30, 60, 90, and 180-day IVs using this methodology and they are are off by roughly the same amount, the calc is good enough. I'm primarily interested in the values for comparative purposes anyway. Thank you for your help. $\endgroup$ Commented Jun 22, 2016 at 12:19
  • $\begingroup$ I've just noticed the "VIX" tag associated to your question. It's worth noting that the approach you propose serves a completely different purpose from the VIX methodology: your approach is useful if you want to evaluate the implied volatility at which fresh-start ATM European vanilla options with 30/60/90/180 days left to expiry would trade. The VIX (at least his subindices) on the other hand amounts to calculating the expected log-returns' variance that the market believes will realise over the horizon [0,T=30/60/90/180 days], and that, regardless of the moneyness. $\endgroup$
    – Quantuple
    Commented Jun 22, 2016 at 13:12
  • $\begingroup$ Hi Chuck, just wanted to add that this is an excellent tutorial, totally deserving of an upvote. I only have one verification - are the interpolated call and put prices (3.4663 and 3.9104, for the strike of 93.75) at your final step performed using cubic spline with the 4 specified call and put options? Or are they done with all the available option price data? $\endgroup$
    – KaiSqDist
    Commented Mar 8 at 23:25
  • 1
    $\begingroup$ @KaiSqDist Thanks, I haven't thought about this in close to a decade now. I believe the answer to your question is I used the 4 specified call/put options. This is why I showed all of the steps. This is documentation for me too since I know I always move on from earlier problems and if I don't write down the details then they fade with time. That has definitely happened here. If you look at the numbers used, you can see it only used the 4 prices. $\endgroup$ Commented Mar 10 at 2:57

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.