Pricing Options on Futures That Expire After the Option
Summary
The document addresses a European option expiring before the underlying currency futures contract. It distinguishes futures from forwards: futures are marked to market, so an option exercised at its own expiry produces a futures position whose value is realized through futures settlement. Under the simplified assumptions discussed, the option can be priced using a Black–Scholes-style formula with today’s price of the longer-dated futures contract as the underlying, the option’s time to expiry and volatility over that period, and no discounting in the futures-option setup.
A separate answer contrasts options on forwards, where delivery occurs later and discounting runs to the forward’s maturity rather than the option expiry. A lognormal underlying illustration motivates the futures result when the futures maturity is at or after option expiry. The discussion assumes away stochastic rates and volatility complications and does not develop a general calibration procedure; the formulas and examples are explanatory, not evidence of market performance.
Key ideas
- For a futures option, the underlying price can be the current price of the futures contract that outlives the option.
- Use the option expiry as the pricing horizon and the volatility for that horizon.
- Futures marking to market means settlement timing differs from delivery under a forward.
- For a later-maturing forward, discounting reflects the forward delivery maturity.
Tags
Full text
# Black option pricing model for the currency futures with different expiration dates
# Black option pricing model for the currency futures with different expiration dates
Now is the time $t_0$. Spot $CUR_2/CUR_1$ is traded on the market. There is also a $CUR_2/CUR_1$ futures contract $F^{*} \mathrel{:}= F(t_0; T_2)$ with an expiration date of $T_2$ (let's say it's $3$ months for certainty). I need to evaluate a European option $C^{*}$ on this currency futures $F^{*}$, but this option expires at $T_1$ (this is $1$ week from now).
- In Hull's book I found that Black's model is used to value the option on futures. The derivation of the BS equation uses a replicating portfolio method (i.e. we take the $\Delta$ of the futures contracts at the beginning).
Black model:
$$C = e^{-r_d (T_1-t_0)} \left[ F N(d_1) - K N(d_2) \right] $$
$$P = e^{-r_d (T_1-t_0)} \left[ K N(-d_2) - F N(-d_1) \right]$$
where $F\mathrel{:}=F(t_0; T_1)$,
$$d_1 = \dfrac{\ln\left(\dfrac{F}{K}\right) + \dfrac{1}{2} \cdot \sigma^2 \cdot (T_1-t_0)}{\sigma \sqrt{(T_1-t_0)}}$$
$$d_2 = d_1 - \sigma \sqrt{(T_1-t_0)}$$
$r_d$ - the domestic rate; $\sigma$ - corresponding implied vol
However, it seems to me that it is important here that the futures and the option are issued on the same expiration date, and if I had a futures $F\mathrel{:}=F(t_0; T_1)$ with an expiration date in $T_1$, this method would work.
But I want to price $C^{*} = C(F^{*}; \sigma^{*}; T_1 - t_0)$ at $t_0$ through the same formula and the option contract expires at $T_1$, giving the futures contract that will expire at $T_2$.
- Here, at the end of the portfolio replication, the second part of the portfolio does not give me a spot, but an open position in futures (if the option is executed in the money), which has 3 months left minus one week before expiration. I'm not sure if replication here would produce the same result.
Upd:
Is there a strict requirement in Black's model that the option on the futures contract and the futures contract itself must have the same expiration? If this condition is violated (the instruments have different expiry dates), will the solution of Black's model remain true (perhaps $\mathbb{E}^Q[F_{T_1}^{*}] \neq F_0^{*}$, or some other assumption leading to the solution will be violated)?
P.S. Since I have little expertise in this area, I am considering this question in a somewhat simplified form, so I do not consider the issues with volatility and stochastic rates etc.
## Answer by Andrea (score 4)
https://quant.stackexchange.com/a/81744
Now is 0, the option expires at $T_1$, the futures, at $T_2$. Everything is margined, so no discounting is required.
Take any lognormal asset $S_t$, with drift $\mu$, the futures price (at time $t$ for expiry $T_2$) is
$F(s, t, T_2) = s e^{\mu (T_2 - t)}$
so the price of the option is
$\mathbb{E}[(F(S_{T_1},T_1, T_2)-K)^+] = \mathbb{E}[(S_{T_1} e^{\mu (T_2 - T_1)}-K)^+]$
$S_{T_1} e^{\mu (T_2 - T_1)}$ is a lognormal with mean $F(S_0, 0, T_2)$ and standard deviation $\sigma \sqrt{T_1}$.
So, one can just use a BS formula with:
- spot = today's observable futures price: i.e. $F(S_0, 0, T_2)$
- time = option expiry: $T_1$
- discount = none
- volatility
As long as $T_2 \ge T_1$ it all works, and the actual value of $\mu$ is irrelevant.
## Answer by AKdemy (score 3)
https://quant.stackexchange.com/a/81737
What you have in mind matters for options on forwards expiring at time T̃ > T (expiry date of the option), where the payoff doesn't occur until T̃.
Futures contracts are marked to market. Therefore, the payoff is realized when the option is exercised / expires.
Some more detail With regards to discounting from T̃ or T
If you have a forward that expires later, you get the discounting from the expiry date (delivery date) of the forward. Everything else is identical. You can see this nicely at Matlab's website (where you can even run the code without having a license).
> optstockbyblk calculates option prices on futures and forwards. If ForwardMaturity is not passed, the function calculates prices of future options. If ForwardMaturity is passed, the function computes prices of forward options.
An intuitive explanation is given on Wikipedia. It can be replicated quickly in any programming language. Below, I will use Julia.
We first need to import relevant packages, define the CDF and Black pricer. Note that T and T̃ are needed for pricing with Black on forwards where T̃ > T.
```
using Distributions, DataFrames, Dates
N(x) = cdf(Normal(0,1),x)
# generic Black-76 allowing for futures and forwards
function Black(F,K,T,T̃,rd,σ)
d1 = ( log(F/K) + 0.5*σ^2*T ) / (σ*sqrt(T))
d2 = d1 - σ*sqrt(T)
c = exp(-rd*T̃)*(F*N(d1) - K*N(d2))
p = exp(-rd*T̃)*(K*N(-d2)-F*N(-d1))
return c, p
end
```
For the rates, we need to be consistent with the Matlab implementation, which uses 30/360 (SIA) in the examples on the webpage. Details for the so called `Basis` in the `intenvset` interest rate structure can be found here. EndTimes is the year fraction.
```
# rates
ValuationDate = Date(2014,1,1);
EndDates = Date(2015,1,1);
Rates = 0.03
# Matlab Basis set to 1 is 30/360 (SIA) https://uk.mathworks.com/help/fininst/intenvset.html#namevaluepairarguments
months = Dates.month(EndDates) - Dates.month(ValuationDate) # compute month difference
years = Dates.year(EndDates) - Dates.year(ValuationDate)
days = (years*12+months)*30
T̃ = days/360
println("Days = $days")
println("Disc $(exp(-Rates*T̃))" )
println("EndTimes = $(T̃)")
```
$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$
Now, all that is left is to define the option parameters to match Matlab exactly.
```
# option
Strike = (200,90) # call / put
AssetPrice = 107
Sigma = 0.28
Settle = Date(2014,1,1)
Maturity = Date(2014,10,1)
months = Dates.month(Maturity) - Dates.month(Settle) # compute month difference
years = Dates.year(Maturity) - Dates.year(Settle)
days = (years*12+months)*30
T = days/360
DataFrame(Call = Black.(AssetPrice,Strike,T,T̃,Rates,Sigma)[1][1],
Put = Black.(AssetPrice,Strike,T,T̃,Rates,Sigma)[2][2])
```
$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$
A bit more interesting is to check what happens when the expiry of the forward is set to a date far out. As mentioned above, if `ForwardMaturity` is not passed in Matlab, the function calculates prices of future options. If ForwardMaturity is passed, the function computes prices of forward options. For the same option, setting ForwardMaturity to 'Jan-1-2032' (you can try this out yourself on Matlab's website) will give the following results (note, that the second result is an option on a future (or where the forward expires at option expiry).
$Matlab \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; Julia$Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.