IFRS 2.1 explicitly defines the objective of the Standard as the specification of the “expenses associated with transactions in which share options are granted to employees”. IFRS 2.2 requires the expensing of “equity-settled share-based payment transactions, in which the entity receives…services as consideration for equity instruments of the entity (including shares or share options)”. IFRS 2.10 requires the determination and recognition of “fair value” of this expense: “For equity-settled share-based payment transactions, the entity shall measure…the fair value of the…services received”. IFRS 2.11 provides further clarification on the definition of “fair value” : “To apply the requirements of paragraph 10 to transactions with employees and others providing similar services, the entity shall granted…The fair value of those equity instruments shall be measured at grant date.”
An option-pricing approach to the assignment of fair value is stipulated in IFRS 2.33: “The liability shall be measured, initially and at each reporting date until settled, at the fair value of the share appreciation rights, by applying an option pricing model, taking into account the terms and conditions on which the share appreciation rights were granted, and the extent to which the employees have rendered service to date.”
The Standard is not prescriptive regarding which valuation models should be used though it does describe the factors that should be taken into account when estimating the fair value. In IFRS 2.47, detailing disclosure requirement, assumes that “inputs to the model” will comprise at least “the weighted average share price, exercise price, expected volatility, option life, expected dividends, the risk-free interest rate…the method used and the assumptions made to incorporate the effects of expected early exercise”.
Appendix B offers more insight into the suitability or otherwise of certain models. IFRS 2 B.5 notes that the Black-Scholes-Merton may prove insufficiently flexible: “[M]any employee options have long lives, are usually exercisable during the period between vesting date and the end of the options’ life, and are often exercised early. These factors should be considered when estimating the grant date fair value of the options. For many entities, this might preclude the use of the Black-Scholes-Merton formula, which does not allow for the possibility of exercise before the end of the option’s life and may not adequately reflect the effects of expected early exercise. It also does not allow for the possibility that expected volatility and other model inputs might vary over the option’s life.” IFRS 2 B.17 highlights the advantages of a more flexible lattice-based model: “[E]xpected early exercise could be modelled in a binomial or similar option pricing model that uses contractual life as an input”.
The model framework should be sufficiently flexible to account for:
The restrictiveness of the assumptions inherent in Black-Scholes-Merton option pricing model mean that it is generally unsuitable for valuing Employee Stock Option Plans (ESOP). Moreover, the failure to account for employee behaviour and volatility of volatility in the application of BSM could lead to inaccurately high or low option values.
If we begin by allowing for early exercise, and the non-constant volatility and dividend payments of the underlying whilst ignoring the existence of a vesting period and the possibility of option rights forfeiture, one can view the ESOP as a long-dated American-style call option granted by the Company to the employees. Traditional closed-form analytical1 or Monte-Carlo simulation2 solutions fail to incorporate the possibility of early exercise. Lattice-based models are a favoured approach to value those path-dependent options such as American options, where the timing of exercise is at the holder’s discretion. We refer to the binomial model for valuing American Options as the Basic Model, which we employ for largely pedagogical purposes en route to building the Final Model.
1 A 2008 paper gives an analytical derivation of the value of employee stock options. The formula stretches over 16 pages of typescript. Due to its complexity, the approach has failed to supplant binomial models as the preferred approach for ESO valuation. See Cvitanić, Jakša, Z. Wiener and F. Zapatero. “Analytic Pricing of Employee Stock Options.” Review of Financial Studies 21 (2008): 683-724.
2 A 2001 paper by Longstaff & Schwartz presents a new approach for approximating the value of American options by simulation. To date the model has not been adapted to incorporate the more complex characteristics particular to Employee Stock Option Plans. See Longstaff, Francis & Schwartz, Eduardo. (2001). Valuing American Options by Simulation: A Simple Least-Squares Approach. Review of Financial Studies. 14. 113-47.
Variable | Notation | Description | Value |
---|---|---|---|
Stock | Underlying asset. Stock price of the Sponsoring Company | €100 | |
Strike Price | The price at which option holders can exercise the right to buy the underlying. The difference between stock and strike is the intrinsic value (IV). IV is floored at zero as rational actors will only exercise if | €115 | |
Volatility | The volatility of the underlying. An input in the Binomial model which determines the magnitude of the up and down moves. May be based on historic or implied volatility. | 30% | |
Timestep | The fractions of time into which the Tree is segmented from the initial node at to terminal nodes at . | 50 | |
Time to Expiry | Time in years to maturity of option. | 10 | |
Risk Free Rate | The riskless interest rate. An important input to computing risk neutral probabilities | 5% | |
Dividend Yield | The dividend yield on the underlying. Also an important input to computing risk neutral probabilities | 2.5% |
3 Cox, J., S. Ross, and M. Rubinstein (1979): “Option Pricing: A Simplified Approach.” Journal of Financial Economics, Volume 7, Issue 3, pp. 229–263
The probability of reaching a particular node in the binomial tree depends on the numbers of distinct paths to that node and the probabilities of the up and down moves.
The binomial grid of 4 time steps below shows all asset price paths to each node. "u" represents an up-move and "d" a down-move.
The probability of reaching a particular node in the binomial tree depends on the numbers of distinct paths to that node and the probabilities of the up and down moves. The tree below displays the probability of reaching each node. "p" denotes the probability of an up-move and 1-p the probability of a down-move.
Recall that the binomial tree model is formed by building forward the “tree” of interim and terminal asset prices then performing backward induction, which values the option at each node as the probability-adjusted, discounted value of its child nodes. The option price is the sum of these discounted expected values.
The underlying asset price path is determined by the number of time steps and the magnitude of “up-moves” and “down-moves” at each node.
The magnitude of these moves is an exponential function of volatility scaled by square root of time:
Risk neutral valuation allows us to infer the probability of an “up-move”. Risk neutral probabilities are the implied probabilities, which equate the current market price of the option to the discounted expected payoff. They are the outputs of a function which takes the market value, future expected value and the discount rate as the inputs. The fundamental assumption is that the call option seller can form a riskless portfolio by going long a fraction of the share - determined by delta - and writing a call option ():
The payoff at each up and down node - the sum of (delta*stock) PLUS the intrinsic value of option - will be the same.
Delta is the fraction which equates the payoff at up and down nodes.
The seller of the option has delta hedged his exposure. The portfolio is riskless and, for there to be no arbitrage opportunities, it must earn the risk-free interest rate. The payoff at each node - the future portfolio value, composed of option and fraction of share - is discounted to the present value at the risk-free rate:
Rearranging, we find the option value at each node to be the discounted value of the fractional share position and the discounted intrinsic value of the option:
Or, equivalently:
Which, upon removing the terms, simplifies to:
Which can be expressed in terms of a risk neutral probability:
Where:
The Financial Accounting Standards Board4 proposed a two-step adjustment procedure to the classic American Binomial Model in order to better reflect early exercise and option rights forfeiture.
We can represent the adjusted price of an American Options by the so-called FASB 123 method in a simple formula:
4 Financial Accounting Standards Board. 1995. FASB 123: Accounting for Stock-Based
Compensation. Appendix B
In their 2004 paper5, Hull and White made a number of criticisms of the FASB 123 model.
The Hull-White Enhanced model, segments the Binomial Tree into 4 regions:
REGION 1: At the terminal nodes of a tree comprising N time steps, the value of the option is the option’s intrinsic value:
REGION 2: During the vesting period , the option prices at the at the j node of the tree at time it (where t v) are computed as:
Note the similarity to pricing of a European style option within a Binomial model framework.
REGION 3: After the vesting period (where it V), if the stock price is greater than or equal to the exercise criterion (,) then the option will be exercised:
REGION 4: After the vesting period (where it v), if the stock price is less than the exercise criterion, (,), then the option will be held:
Note the effect of weighting achieved with the combination of the and terms.
We can visualize this model in the following image which preserves the original notation of the Hull White 2004 paper.
denotes a continuous discount factor whereas 𝑒𝛿𝑡 denotes the product of the exit rate and the time step interval.The double use of to denote both exponential and exit rate tends to confuse for which reason I opt for less ambiguous notation above.
5 Hull, J, and White, A: How to Value Employee Stock Options Financial Analysts Journal, Vol. 60, No. 1, January/February 2004, 114-119
6 Huddart S, Lang M (1996) Employee stock option exercises: an empirical analysis. J Account Econ 21:5–43
7 Carpenter JN (1998) The exercise and valuation of executive stock options. J Financ Econ 48:127–158
import numpy as np
def Binomial(n, S, K, r,q, v, t, PutCall):
# Solved Parameters
At = t/n #Timestep
u = np.exp(v*np.sqrt(At)) # Upmove
d = 1./u # Downmove
p = (np.exp((r-q)*At)-d) / (u-d) # Risk-Neutral Probability
#Binomial price tree
stockvalue = np.zeros((n+1,n+1)) #Create symmetrical zero-filled array with dimensions of Timesteps + 1
stockvalue[0,0] = S #Location of current stock price in matrix (1st element in 1st column)
# Note the rows express time progression and columns tree level
for i in range(1,n+1): #Outer loop: For each timestep...
stockvalue[i,0] = stockvalue[i-1,0]*u # Compute future stockprice as product of prev. price and upmoves
for j in range(1,i+1): # Inner Loop: For each time step at each tree level...
stockvalue[i,j] = stockvalue[i-1,j-1]*d # Compute associated downmove stock value for each upmove
# (Nested for loop."Inner loop" will be executed one time
# for each iteration of the "outer loop").
#Option value at terminal nodes
optionvalue = np.zeros((n+1,n+1)) #Create symmetrical zero-filled matrix with dimensions of Timesteps + 1
for j in range(n+1): # For each node at the terminal time step...
# Compute instrinsic value based on put or call position
if PutCall=="C": # Call
optionvalue[n,j] = max(0, stockvalue[n,j]-K)
elif PutCall=="P": #Put
optionvalue[n,j] = max(0, K-stockvalue[n,j])
#Backward induction process for option values at interim nodes
for i in range(n-1,-1,-1): # For each time step, working backwards, from penultimate to first...
for j in range(i+1): # For each node at each of above time step...
# Compute the maximum of the expected value and the current intrinsic val.
if PutCall=="P":
optionvalue[i,j] = max(0,
K-stockvalue[i,j],np.exp(-r*At)*(p*optionvalue[i+1,j]+(1-p)*optionvalue[i+1,j+1]))
elif PutCall=="C":
optionvalue[i,j] = max(0,
stockvalue[i,j]-K,np.exp(-r*At)*(p*optionvalue[i+1,j]+(1-p)*optionvalue[i+1,j+1]))
#return optionvalue[0,0]
return optionvalue[0,0], stockvalue, optionvalue, n, S, K, r, q, v,t
from tabulate import tabulate
# Inputs
n = 25 #number of steps
S = 100 #initial underlying asset price
r = 0.05 #risk-free interest rate
q = 0.025 #risk-free interest rate
K = 115 #strike price
v = 0.3 #volatility
t = 10 #time to expiry
result = Binomial(n, S, K, r, q, v, t, PutCall="C")
header3 = ['Opt. Val.(Basic Model)','Spot', 'Strike', 'Rfr','Div. Yld.', 'Vol.',
'Time to Exp.', 'Time Steps']
table3 = [[result[0], result[4],result[5],result[6],result[7],result[8],result[9],result[3]]]
print(tabulate(table3,header3))
As we shall in our extended discussion of the Final Model, the optimal number of tree steps, in terms of computational expense versus results accuracy/convergence, is around 2000. It is impractical to view node results as a tree when the time steps exceed 25-30, as can be apreciated below. It is therefore more instructive to shift to generating node values in the form of list.
# Import required libraries
import matplotlib.pyplot as plt
import numpy as np
import networkx as nx
# Plot Binomial Grid
def binomial_grid(n):
G=nx.Graph() # Empty Grid
for i in range(0,n+1): # Outer Loop: For each time fraction of time Initial to Terminal
for j in range(1,i+2): # Inner Loop: For each node at each time step first to final
if i<n: # Add connectors between all pre-terminal nodes
G.add_edge((i,j),(i+1,j))
G.add_edge((i,j),(i+1,j+1))
posG={} # Situate Nodes
for node in G.nodes():
posG[node]=(node[0],n+2+node[0]-2*node[1])
nx.draw(G,pos=posG)
# Plot Price and Option Tree
def plot_binomial_tree(initial_spot, asset_array, option_array):
s = initial_spot
px = asset_array
opx = option_array
# displaying the title
plt.figure(figsize=(14, 12))
plt.suptitle('Binomial Tree: 30 Time Steps', fontsize=20)
# Start
plt.figtext(-0.07,0.50, 'S = '+str(s))
plt.figtext(-0.07,0.47, 'V = '+"{:.2f}".format(opx[0,0]))
binomial_grid(25)
px = result[1]
opx = result[2]
# Plot a 30-Step Binomial Tree
# displaying the title
plot_binomial_tree(px[0,0], px, opx)