A novice’s description of the Bachelier model for option pricing.
Let’s unpack that.
How do you price an option now that may or may not have value at a pre-defined expiration date? A common approach in quantitative finance is to assign a dynamic to the underlying asset price. Given this assumed dynamic, one can either use stochastic calculus or simulate several trajectories of the underlying to determine a price based on this ensemble of possible trajectories.
The Bachelier Model is the simplest such model.
The threat of arbitrage forces the underlying’s price to be a martingale: that is, in expectation, the price at the next period must be the price at the current period (otherwise, a risk-free profit could be obtained).
By assumption, we’ll fix the volatility of the asset and assume each period’s change in follows a Normal distribution.
Therefore, the change in price each period can be modeled as a random normal with mean 0 and a fixed standard deviation.
Assume the change in price of the underlying at each period is normally distributed with mean 0 and standard deviation .
Assume there are T discrete periods until expiration.
A basic result from probability is that the sum of independent normals is itself a normal, where the summation’s mean is the sum of the combined means and the summation’s variance is the sum of the combined variances.
Then the price of the underlying asset at time T is the initial price plus a normally distributed variable.
\[ P_t = P_0 + \sum_{i = 1}^{T}(N(0, \sigma)) \]
Each period’s variance is \[\sigma ^ 2\].
The variance for T periods is \[T(\sigma ^ 2)\].
The standard deviation for T periods is \[\sqrt{T} * \sigma\].
Assume the current price of an underlying is $100. Assume the underlying’s daily price movements follow a normal distribution with mean 0 and standard deviation 1. Price a binary call option that expires after 25 days and is either (1) worth $1 if the underlying’s price exceeds $110 or (2) expires worthless otherwise.
After 25 days, the change in the underlying’s prices is normally distributed with standard deviation \[\sqrt{25}*1 = 5\].
What’s the probability of a $10 price increase for the underlying? That’s two standard deviations above the mean of 0. Using the usual rules of thumb, about 4% of observations are greater than 2 standard deviations away from the mean (above or below). So a $10 increase should be have about a 2% chance.
[1] 0.023
Therefore, the expected value of this binary call (under this model’s assumptions) is roughly $0.02.
sim_trajectory <- function(price_init = 100, mean = 0, period_sd = 1, periods = 25){
p_0 <- price_init
p_t <- rep(NA_real_, periods)
period_price_changes <- rnorm(n = periods, mean = mean, sd = period_sd)
for(i in 1:periods){
if(i == 1){
p_t[i] = p_0 + period_price_changes[i]
} else {
p_t[i] = p_t[i -1] + period_price_changes[i]
}
}
return(p_t[periods])
}
final_prices <-
replicate(10000, sim_trajectory())
hist(final_prices)
[1] 0.02