Binomial Model: Two Period

Extending the one-period binomial model to two periods — turns out it's the same trick applied twice, and the binomial weights just fall right out naturally.

Alright, picking up right where we left off — one period done, now two period. haha

You know that thing people say about physicists? That they only know three numbers?

I wonder if it’s the same for math people??? haha Those three numbers are, precisely: 1, 2, and n. lmaooo Well — financial engineering is basically what happened when mathematicians and physicists got hungry enough to throw themselves at Wall Street, so… haha

Yeah. We’re going to derive two period, and then immediately jump to n period for the full generalization. And then I think that’s that, heh.

Equation from the original notes

So for two period, there are three possible outcomes at maturity, like so. Simple!! heh We just came from one period, so this is honestly a piece of cake.

The whole trick is just: look at it one period at a time.

That’s why I went ahead and drew those blue lines and red lines in there on purpose. From the blue line’s perspective — it’s a one-period setup, exactly like what we just did. So the conclusion is the same as before.

What was it again?

Equation from the original notes

OK but — this is written entirely from the blue line’s perspective, as the present value of the Call. Since we now have three possible outcomes at maturity, we need to shift our reference point.

(And don’t forget — it’s European.)

So let’s shift over to that red underline. And if we look at it from there… this is just…

Equation from the original notes

Since it’s structurally the same thing, it’s gotta have the same form as the expression above — just with different subscripts!

So we can write $c_u$ and $c_d$ by swapping the subscripts.

Equation from the original notes

Now we need $c_{uu}$, $c_{ud}$, and $c_{dd}$ — and that’s easy too…!!! They’re just the call values at maturity.

Equation from the original notes

Done!! OK so now we need to express the present value of $c$ in terms of $c_{uu}$, $c_{ud}$, $c_{dd}$!!! First —

Equation from the original notes

Sub those in —

Equation from the original notes

Now simplify!!! Not hard at all!!!

Equation from the original notes

In one period it was a weighted sum of 2 terms. In two period it’s a weighted sum of 3 terms. And if we try to read the expression a bit —

Equation from the original notes

What’s in the blue box is the values we’re summing up. (Discounted to present value together with that exp term at the end, of course.) We add these three up with their respective weights: $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?

Those are the number of ways each outcome can occur.

Equation from the original notes

So for each possible value, (probability) × (number of paths) together acts as the “weight” — and that’s what the binomial model is doing. It’s pricing the option.

That’s the whole idea. T_T

(Heads up — the explanation above assumes $c_{uu}$, $c_{ud}$, $c_{dd}$ always come out as something like $S_{uu} - K$, but in reality those might be zero!!! So strictly speaking it’s a simplification. I just used concrete positive values because I figured it’d be easier to follow that way.)

Two period done. Now we’re heading toward n period — but let me quickly code this up first. The main thing to pick up here is how the With ~ End construct works. That’s really it, so I’m just going to —

Equation from the original notes

…Posting during the semester is… ugh. Sorry, time is absolutely chasing me… I’ll try to cover as much as I can with screenshots. T_T

Equation from the original notes

import numpy as np
import matplotlib.pyplot as plt
import os

path = r'C:\Users\GD Park\Desktop\financial-engineering'
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)

Comments

Discussion happens via GitHub Discussions. You'll need a GitHub account to comment.