# How should I calculate the implied volatility of an American option in a real-time production environment?

There are many models available for calculating the implied volatility of an American option. The most popular method, employed by OptionMetrics and others, is probably the Cox-Ross-Rubinstein model. However, since this method is numerical, it yields a computationally intensive algorithm which may not be feasible (at least for my level of hardware) for repeated re-calculation of implied volatility on a hundreds of option contracts and underlying instruments with ever-changing prices. I am looking for an efficient and accurate closed form algorithm for calculating implied volatility. Does anyone have any experience with this problem?

The most popular closed-form approximation appears to be Bjerksund and Stensland (2002), which is recommended by Matlab as the top choice for American options, although I've also seen Ju and Zhong (1999) mentioned on Wilmott. I am interested in knowing which of these (or other) methods gives the most reasonable and accurate approximations in a real-world setting.

-

I have worked on this topic extensively (pricing and calculating IV in production) and believe can offer an informed opinion. First of all Mathworks - the company that creates Matlab is not a trading firm so you should probably not rely on their advice so much.

There are few closed form options pricing models, and all have practical shortcomings. Barone-Adesi and Whaley (please correct my spelling of last names as I'm typing from memory) model is simple approximation for American options but is unfortunately not very accurate, and does not deal with dividends. Roll-Geske-Whaley deals with dividends, but not very well - there are arbitrage situations that are possible in the model. Ju and Zhong have another approximation but again not very accurate. Finally Bjerksund and Stensland seem to have the best approximation (2002 version, not 1993) but that still does not solve the discrete dividend problem.

In my experience the tree is the way to go. CRR trees are slow but Leisen and Reimer came up with a scheme that converges much faster. Also Mark Joshi created his own binomial scheme that converges slightly faster. Instead of discrete dividend you can use discrete proportional dividend - so you don't end up with a bushy tree. Alternatively you can try a trinomail tree and extra DF will give you better resolution on dividend, but I did not find that big of an improvement in production. That in my opinion is the best combination for speed and accuracy. If you're looking for alternative opinions check out these two articles - http://www.nccr-finrisk.uzh.ch/media/pdf/ODD.pdf about discrete dividend problem, and http://ssrn.com/abstract=1567218 on pricing American options.

Still the most important speed improvements will come in from your code. Ok I'm tired of typing, check out my blog maybe I'll post about this sometime next week.

-
Here is a link to the Leisen-Reimer article: u.cs.biu.ac.il/~mschaps/finance/readings/options/… – zoom Sep 17 '11 at 18:00

To me this aims at computing a daily implied volatility surface. For some stocks/indices you may have either vanillas options or american options quoted in the market. If your implied volatility is computed from hybrid vanilla/american call/put options then your implied volatility computation methodology should be as close as possible. You should not directly consider approximating here as we would like to stay close to, for instance, a Monte-Carlo local volatility pricing framework where the dividends are detached accurately and so on.

You may want to consider PDE solving in a production environment (with update rule for discrete dividends handling). If well implemented it is fast and well-behaved. You should use Newton-Raphson for high vega zones (close to ATM and more and more widespread for long maturities) and Brent for the rest. Good first guess will speed up the process.

-

Without using any tricks or optimization, I wrote some C++ code that prices an American option with 5 different variations of the binomial method, including CRR. It calculates all five prices and prints them on the console seemingly instantly (far less than 1 second; I didn't measure). I would say if your computation is taking long time, the problem is the implementation, not the algorithm.

Recommendation: get something coded specific to your needs. This is high-level form of optimization. For example, if you are usually working in a given time frame to expiration, you can experiment to find out the number of branchings needed to get your target precision. Or, you might use a lower target precision on the full set of contracts, then "zoom" to a higher precision for contracts of interests.

-

If you think it is too computationally intensive, you are probably not using enough numerical analytic "tricks", such as control variates. Using them, you will generally find american option pricing to be faster on trees than with the analytic approximations.

-
Thanks! Do you know of any good references on control variates? I am not familiar with the technique. What is it, broadly? Are there other techniques? Are any of these already built in to the Matlab CRRTree toolbox function? – Tal Fishman Aug 12 '11 at 18:03
I have not looked at Matlab in a while. For tricks, I suggest Quantitative Methods in Derivatives Pricing by Domingo Tavella. – Brian B Aug 12 '11 at 18:09
Control variates? He's pricing vanillas, why would he be doing MC? – onlyvix.blogspot.com Sep 14 '11 at 17:18
Control variates are not just for Monte Carlo. – Brian B Sep 15 '11 at 19:54
@Brian, please elaborate. – onlyvix.blogspot.com Mar 4 '12 at 15:33