The European_option_value
function calculates analytic expressions of the value of European call and put options on futures contracts within the N-factor model. A European option on a commodity futures contract gives the holder
the right, but not the obligation, to buy (call) or sell (put) the underlying asset at option maturity. If the European option is exercised, the option devolves into buying or selling of the underlying futures asset.
State variables (i.e., the states of the factors of an N-factor model) are generally unobservable. Filtering the commodity pricing model using term structure data will provide the most recent optimal estimates of state variables, which can then be used to forecast and value European options.
Under the assumption that future futures prices
are log-normally distributed under the risk-neutral process, there exist analytic expressions of the value of European call and put options on futures contracts. The value of a European option on a futures contract
is given by calculating the current expected futures price and the average instantaneous variance of the futures return innovations over the life of the option.
Consider a European option with strike price KK and a risk-free interest rate of r_fr_f. The option maturity is at time T_0T_0 and futures maturity at time T_1T_1.
The particular model features a state vector of length NN (i.e., N-factors) x(t)x(t)
The value of a European call option would thus be:
e^-r T_0 E^*[max(F(x(T_0),T_0,T_1) - K, 0)]e^(-r T_0) E^*[max(F(x(T_0),T_0,T_1) - K, 0)]
The analytic solution to call and put options are given by:
Call options:
e^-r T_0(F(x(0), 0, T_1) N(d_1) - KN(d_2))e^(-r T_0) (F(x(0), 0, T_1) N(d_1) - KN(d_2))
Put options:
e^-r T_0(KN(-d_2) - F(x(0), 0, T_1) N(-d_1))e^(-r T_0) (KN(-d_2) - F(x(0), 0, T_1) N(-d_1))
Where:
Where:
d_1 = (F/K) + 12 v^2vd_1 = (ln(F/K) + 1/2 v^2) / v
d_2 = d_1 - vd_2 = d_1 - v
Parameter N(d) N(d) indicates cumulative probabilities for the standard normal distribution (i.e. P(Z < d)P(Z<d)).
Finally, parameter vv, the annualized option volatility, is given by:
Var^*[(F(x(T_0), T_0, T_1))] v^2 = _i.j=1 e^(-_i + _j)(T_1 - T_0)Cov^*(x_i(T_0), x_j(T_0))Var^*[ln(F(x(T_0), T_0, T_0))] = v^2 = sum_(i.j=1) e^((-kappa[i] + kappa[j])(T_1 - T_0)) Cov(x_i(T_0), x_j(T_0))
The annualized option volatility approaches _1^2 T_0sigma[1]^2 T_0 as both T_0T_0 and T_1T_1 increase, as most uncertainty about spot prices at futures contract maturity and option expiration
are a result of uncertainty about spot prices, rather than the cost of carry (Schwartz and Smith, 2000).
The presented option valuation formulas are analogous to the Black-Scholes formulas for valuing European options on stocks that do not pay dividends
When verbose = T
, the European_option_value
function numerically calculates the sensitivity of option prices to underlying option and model parameters. Gradients are calculated numerically through the
grad
function of the numDeriv
package.