Thursday, February 13, 2014

My approach to option pricing

The most known and popular tool for option price assessment is the Black-Scholes model. It has its power in simplicity and analytical form, and it has its weakness in being not very much useful.

The problem is the Black-Scholes model makes an assumption about price returns being normally distributed. Maybe there are some asset classes where such an assumption holds, but for most interesting asset classes like equity indexes – this assumption is just wrong.

Everyone who looked at price return distributions, for example, of S&P 500, knows that you can’t find any normality there. But you can find asymmetry, excess kurtosis and volatility clustering. Maybe you can make option prices assessments using the Black-Scholes model for near-the-money strikes, but step far enough out of money and the model estimates become inadequate. That’s why in real life option traders use the Black-Scholes model not for option price estimates, but as a basis for more complicated constructions, like volatility smile, volatility surface, and other shamanic tools.

That’s why I use another approach for option prices assessment. I take historical data and extract the empirical price returns distribution out of it. Then I use this distribution to numerically calculate option prices.

What's important, I normalize historical data using local volatility estimate. I am a big fan of local volatility normalization because it is always a good thing to do. This normalization greatly increases the homogeneity of data and so increases the chance that our reasoning about future market behavior makes sense.

For example, we have an option contract of our interest expiring in 30 days. Let’s take 30-day price returns from all the historical data and normalize every return on its local volatility estimate. Gather the results in a distribution. Then using current price, current volatility estimate, and this empirical distribution, we can numerically calculate option prices for all the strikes we need.

I developed a small framework for testing simple option strategies using my option pricers. I’ve tested this pricer and got very interesting results for a strategy of buying underpriced far-out-of-money index calls. The strategy of selling overpriced (almost always) far-out-of-money index puts also looks very promising but requires strong risk-control implementation.

In general, I can say that this algorithm is no doubt successful in finding overpriced/underpriced situations, at least for equity indexes.

I tried to further improve this algorithm, by adding parameterization or distribution approximation, but what I’ve got is a bit surprising – all the improvements just make it work worse. The simplest approach works better than more elaborated versions. So I gave up trying to fix what’s already working.

Lately, I’ve decided to get all my code about the algorithm together and make a real software product. And now we release Cognitum Option Pricer.

Our software uses data from Yahoo.Finance and (optionally) TWS, it shows the situation on the whole option chain and you can easily see underpriced/overpriced chain areas. You can also construct option combinations and make a price/delta assessment for them.

How it looks:



More info on the product page: http://www.cognitum-research.com/en/option-pricer

4 comments:

  1. Hi can you further elaborate on how you do local volatility normalization?

    ReplyDelete
    Replies
    1. The norm I use is the average of ln(High/Low) in N-day rolling window.
      A price log-return divided by norm gives me normalized log-return.

      Delete
  2. Lets take the data from your example. Call with strike 1820. Can you pls comment the results? Does that mean that from historical prospective current option price 25.979 is much less then normal one 60.887?

    ReplyDelete
    Replies
    1. That's right, that means these options are under-priced comparing to the model.

      Delete