Binomial Model: Two Period
We crank through the two-period binomial model one step at a time, build up the call price formula, and peek at how it naturally generalizes to n periods — heh heh.
Alright, let’s keep rolling — we did one period last time, so today it’s two period. lol
You know,,,, have you heard this one? They say physicists only know three numbers.
I wonder if math people are the same?? haha
Those three numbers? 1, and 2, and then n. lololololol
I mean, financial engineering is supposedly the field that got built when starving mathematicians and physicists charged into the financial markets… so yeah. haha
Right. So we’re going to derive the two-period case, and then immediately roll into the n-period case to generalize.
And then we’re done. heh heh.

OK so for two period, at maturity there are 3 possible cases like this.
Easy!! heh We just came off one period, so this is gonna be a piece of cake.
The trick is to look at it one period at a time. That’s why I deliberately drew those blue lines and red lines underneath.
From the blue reference point: this is exactly the one-period setup we just did,
so the conclusion is the same as before.
Which was:

Ahh but — this is written with the present call value, all the way back at the blue reference point.
Now, since we’ve got those 3 cases at maturity, we need to shift the reference point so we can express them.
(And don’t forget, this is European.)
So let’s slide the reference point over to those red underlines.
And once we slide over to the red underlines and look from there…..this……….is just…………

It’s the same as looking at it like this — so it has to take the same form as the thing above, just with different subscripts!!!!
Hmm… in that case,
we can write down $c_u$ and $c_d$ by literally just swapping subscripts.

OK now we need the values $c_{uu}$, $c_{ud}$, and $c_{dd}$ — which is also easy…!!!
These are call values at maturity, so:

Done!!
Ah, and now we have to express the present value of $c$ in terms of $c_{uu}$, $c_{ud}$, $c_{dd}$!!!?!??
First,

We substitute like this,

Now if we tidy this up!!!!!!!!
Tidying up isn’t hard!!!

In one period it was a weighted sum of 2 terms,
and in two period it’s become a weighted sum of 3 terms.
Now, let’s interpret the formula a little.

First, the things in the blue boxes are the ‘values’ we’re adding up. (Of course they’ve been ‘present-valued’ along with the exp term.)
We’re adding these three with weights on each.
$S_{uu} - K$ shows up with probability $\rho^2$,
$S_{ud} - K$ shows up with probability $\rho(1-\rho)$,
and $S_{dd} - K$ shows up with probability $(1-\rho)^2$.
And the black numbers are ‘how many ways each one can happen.’

Ahh I see — so
for each value that can show up, probability × number of ways together is the ‘weight’ —
and that’s what the binomial model means: we priced today’s option once, like this… (sob)
(In the explanation above, I described things assuming $c_{uu}, c_{ud}, c_{dd}$ definitely come out as $S_{uu}-K$ and so on —
but in reality those values might not come out like that, they could be zero!!!!! So strictly speaking the description above is wrong.
Buuut I figured explaining with concrete values is easier to grasp, so I just expanded the formula with ’numbers’.)
So we’re done with two period, and we should head into n period next —
but let’s do a quick coding exercise before we move on.
What we’ll learn here is
how to use With ~ End??????
Other than that there’s nothing, so I’ll just

… Posting in the middle of the semester is… (sob)
I’m sorry, I’m pressed for time…. I’ll lean on photos as much as I can (sob)

import numpy as np
import matplotlib.pyplot as plt
import os
path = r'C:\Users\GD Park\Desktop\FinancialEngineering'
os.chdir(path)
def Binomial_European_Two_period(S, K, up, rf):
dn = 1/up
t = 1
n = 2
dt = t/n
r = np.exp(rf * dt)
df = 1/r
rho = (r - dn) / (up - dn)
cuu = max(S*up*up - K, 0)
cud = max(S*up*dn - K, 0)
cdd = max(S*dn*dn - K, 0)
cu = ((rho * cuu) + ((1-rho) * cud)) * df
cd = ((rho * cud) + ((1-rho) * cdd)) * df
c = ((rho * cu) + ((1-rho) * cd)) * df
return c
Binomial_European_Two_period_ex = Binomial_European_Two_period(S=100, K=100, up=1.1, rf=0.05)
print(Binomial_European_Two_period_ex)
SS = np.linspace(0, 200, 1000)
YY = np.zeros(len(SS))
for i in range(len(SS)):
YY[i] = Binomial_European_Two_period(S=SS[i], K=100, up=1.1, rf=0.05)
plt.figure(figsize=(6, 4))
plt.plot(SS, YY)
plt.xlabel('S')
plt.ylabel('P')
plt.title('Binomial_European_Two_period')
plt.savefig('Binomial_European_Two_period.png', dpi=200)
Originally written in Korean on my Naver blog (2016-10). Translated to English for gdpark.blog.