First of all, please excuse the potential naivety of my questions. I am new to financial modeling, for sure. Nonetheless, I hope my questions are well structured enough to result in good answers.

I am tasked with calculating the real time theoretical price of various options on futures in the energy commodity market (Oil, Natural Gas, etc). A description of the types of options I need to price follows:

A. Brent Crude American-style Option Contract is based on the underlying Brent Crude Futures Contract (B) and if exercised will result in a corresponding futures position.

B. Crude European-style Cash Settled Options which is based on the underlying Bullet and Crude Average Price Options, which are based on the underlying Brent 1st Line Swap.

Of the various subclasses of AnalyticOptionModel, I believe the BlackScholesMertonModel is the most widely used model. Will this model work for all of the cases above? The doc seems to suggest setting b=0 (cost of carry == 0), the model becomes a Black future option model, where I assume ‘future option’ corresponds to the type I need?

Some reading I’ve done indicates a different, more sophisticated option pricing model needs to be used when operating on spread commodities (WTI vs. Brent), or when operating on Average Price Options. Is this true, and if so, which OpenGamma model(s) should I use for these cases?

Will I gain any benefit (i.e. better accuracy) from using another subclass of AnalyticOptionModel, like Hull White, for example?

What are the performance differences between the European and American style calculations? Are the European calculations so much faster that it makes sense to always use a European calculation for performance, giving up some accuracy when pricing true American style options?

I have access to the real time underlying price (spot price) and time to expiration, but I’m not sure where/how to obtain or calculate the Interest Rate Curve and Volatility Surface that appear to be necessary for the calculation. Do I simply use a HistoricalVolatilityCalculator by passing in known historical data? If so, how far back do I need to go (30 days, 1 year, etc)? Or is there an open facility where I can download these values from the Internet on demand? The same question goes for the Interest Rate Curve. I’m not sure where to get that data; and is it safe to assume the Interest Rate curve affects the calculation only slightly, such that this value can be hard-coded once a quarter? Is this essentially the current risk free interest rate?

That’s about it. For now, at least. I’m sure I’ll have more questions as time goes on. Thank you in advance.

As such, if you have access to the exchange on which you might trade them, then you do not have to worry about estimating a theoretical price, as the true price will be available there. Even if you are not an exchange member, the first place to look for prices is the exchanges themselves. Most of them provide services of this sort, whether delayed and free, or at some reasonable cost.

The CME publishes some that you may be interested in here:cmegroup.com

Typical practice is to use market prices not as outputs from models but as inputs. Models are calibrated to estimate unobservable quantities: prices of other instruments, and vitally, sensitivities to moves in the underlying instruments.

American options, for instance, are normally priced off trees, but closed form approximations exist (BjerksundStenslandModel, JuZhongModel), for which the volatility smile discussed above would be an input. For average price options, Asians, there are no closed form solutions, and Monte Carlo is the standard method (with a geometric average option as a control - since this does have a analytic solution).

Now, you could compute the theoretical prices of the options you described with relatively simple, normal or log-normal, models using NormalPriceFunction or BlackPriceFunction. The real problem is to obtain the model parameters (volatilities and similar) that fit the market.

Say that you made a historical estimate and used this to price a bunch of options with different strikes. Your estimate is unlikely to match any of the options quoted. Suppose that you had all the actual prices and used these to imply the volatility (BlackImpliedVolatilityFormula). You’d find that the Black model required a different volatility for each option. Your historical estimate based only on the underlying would not be able to capture this.

A different vol for each strike also implies that the Black model isn’t rich enough to describe the dynamics of your asset. Perhaps the market is neither normal nor log-normal, but something in between and the volatilities are themselves changing. If you wish to look at the impact of this ‘volatility smile’, have a look at SABRHaganVolatilityFunctionTest.