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. 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 following analytic expression follows from that presented by Schwartz and Smith (2000) extended to the N-factor framework. The value of a European option on a futures contract
is given by calculating its expected future value using the risk-neutral process and subsequently discounting at the risk-free rate.
One can verify that under the risk-neutral process, the expected futures price at time tt is:
E^*[F_T,t] = exp(_i=1^Ne^-_iTx_i(0) + ^*t + A(T-t) +
12(_1^2t+_i.j1e^-(_i+_j)(T-t)_i_j_i,j.1-e^-(_i+_j)t_i+_j)) F_T,0
E^*[F[T,t]] = exp(sum_i=1^N (e^(-kappa[i]*T) * x[i](0) + mu^* * t + A(T-t) + 1/2 (sigma[1]^2 + sum_[i.j != 1] (e^(- (kappa[i] + kappa[j])(T-t)) * sigma[i] * sigma[j] * rho[i,j] * (1 - e^(-(kappa[i] * kappa[j])t))
/(kappa[i] + kappa[j]))) equiv F[T,0]
This follows from the derivation provided within the vignette of the NFCP package as well as the details of the Futures.Price.Forecast
package.
The equality of expected futures price at time tt being equal to the time-tt current futures price F_T,0F[T,0] is proven by Futures prices
being given by expected spot prices under the risk-neutral process
(F_T,t=E_t^[S_T])F[T,t] = E[t]^*(S[T]) and the law of iterated expectations (E^[E_t^[S_T]]=E^[S_T])E^*(E[t]^*(S[T])) = E^*(S[T])
Because future futures prices are log-normally distributed under the risk-neutral process, we can write a closed-form expression for valuing European put and call options on these futures. When T=0T=0
these are European options on the spot price of the commodity itself. The value of a European call option on a futures contract maturing at time
TT, with strike price KK, and with time tt until the option expires, is:
e^-rtE^[(F_T,t-K,0)]e^(-rt) * E^*(max(F[T,t] - K, 0))
= e^-rt( F_T,0N(d) - KN(d-_(t,T)))e^(-rt) * (F[T,0] * N(d) - K * N(d - sigma[phi](t,T)))
Where:
d=(F/K)_(t,T)+12_(t,T)d = ln(F/K) / sigma[phi](t,T) + 1/2 sigma[phi](t,T)
and:
_(t,T) = (_1^2t+_i.j1e^-(_i+_j)(T-t)_i_j_i,j.
1-e^-(_i+_j)t_i+_j)
sigma[phi](t,T) = sqrt( sigma[1]^2 + sum_[i.j != 1]( e^(-(kappa[i] + kappa[j])(T-t)) sigma[i] sigma[j] rho[i,j] * (1 - e^(-(kappa[i] + kappa[j])t))/(kappa[i] + kappa[j])))
Parameter N(d) N(d) indicates cumulative probabilities for the standard normal distribution (ie, P(Z<d)P(Z<d)).
Similarly, the value of a European put with the same parameters is given by:
e^-rt E^*[max(K-F_T,t,0)]e^(-rt) E^*(max(K - F[T,t],0))
=e^-rt(-F_T,0N(-d)+KN(_(t,T)-d))e^(-rt) * (- F[T,0] * N(-d) + K * N(sigma[phi](t,T) - d))
The presented option valuation formulas are analogous to the Black-Scholes formulas for valuing European options on stocks that do not pay dividends
Under this terminology, the stock price corresponds to the present value of the futures commitment (e^-rtF_T,0)e^(-rt) F[T,0] and the equivalent annualized volatility would be _(t,T)/ tsigma[phi](t,T) / sqrt(t)
When verbose = T
, the European.Option.Value
function numerically calculates the sensitivity of option prices to the underlying parameters specified within the N-factor model, as well as some of the most common
"Greeks" related to European put and call option pricing. All gradients are calculated numerically by calling the grad
function from the numDeriv
package.