Bachelier Exchange Option Prices Near Expiry
Summary
The document reports unexpectedly low values from a Bachelier-style formula for an exchange option on futures. The author observes that a plotted price surface appears to approach half the intrinsic value at maturity, questions whether this is consistent with the model’s normal distribution assumption, and asks whether the formula should be overridden at expiry. The post includes a Python implementation and refers to a published spread-option formula and a correction discussed elsewhere.
An edit says a missing parenthesis was responsible for the maturity-convergence behavior, but the author still asks whether values below intrinsic value before expiry are logical. The document therefore identifies an implementation issue and a remaining pricing question, but it does not include a complete answer or independent validation. Its code and reported behavior should be treated as diagnostic clues, not as a confirmed pricing method; the exact conventions for volatility, time scaling, and discounting are not established in the text.
Key ideas
- The author investigates a Bachelier formula for exchange options on futures and reports unexpectedly low prices.
- The original implementation appears to contain a parenthesis error affecting the behavior at maturity.
- After editing the formula, the author still questions why pre-expiry values lie below intrinsic value.
- The document does not provide a complete derivation or verified resolution of the remaining pricing question.
Tags
Full text
# Bachelier exchange option value at maturity doesn't converge to intrinsic value?
# Bachelier exchange option value at maturity doesn't converge to intrinsic value?
I'm implementing a pricing option review of some models and there something I can't wrap my head around with Bachelier's. Values seem too small at every time step but that I though was from the normal assumption difference. Nonetheless, as I plot the price variations I have observed that the price converges to exactly half the intrinsic value at maturity. How can this be correct? I thought that negative values could exist because of normality assumption, but I see no assumption that could explain this behaviour.
The top surface represents the BSM prices with the log normal assumption, while the one below is Bachelier surface. I'm modelling exchange options on futures and have been following the formulas from "Spread Options, Exchange Options and Arithmetic Brownian Motion" by Michael Poitras 1998. My Bachelier price comes from the formula in this article that I corrected thanks to this post (Bachelier futures exchange formula corrected)
The code is the following, I have read it a million times so I really hope there is no mistake:
```
def bachelier_spread_option(X0,Y0,volx,voly,corr,T,r,K=0, verbose=False):
sigma_mix = corr*volx*voly
sigma = np.sqrt(volx**2 + voly**2 - 2*sigma_mix)
u = (X0 - Y0 - K)/sigma*np.sqrt(T)
return np.exp(-r*T)*((X0 - Y0 - K)*norm.cdf(u) + sigma*np.sqrt(T)*norm.pdf(u))
```
Any explanation to this behavior? Is it normal? Should I just override the function to have the intrinsic value at T=0?
(edit) There is a missing parenthesis in the code that solves the maturity convergence, but the prices for bachelier are still below intrinsic value until maturity is that logical?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.