## Exam questions¶

The following notions should be described in words: zero coupon bond price, yield (curve), simple forward rate, maturity time, short rate, caplet, cap, floorlet, floor, swap, swaption, hedging strategy, binomial model (one step), Black-Scholes Delta.

The following concepts should be described in words:

Why is the fair value of a contract calculated by the value of a hedging portfolio? Describe the economic reasoning behind.

Why is the interest rate market referred to as a large financial market? Describe traded products and their structure.

Do we need to know market returns to calculate hedging strategies in the Black-Scholes or the binomial model or are fluctuation quantities like volatility enough?

The following one step binomial tree describes the evolution of the simple forward rate over one period from $0$ to $T^* = 1$ in time: we start at $4$ percent and move other to $8$ percent or $2$ percent. The simple forward is considered with $T = 0.5$ and $T^* = 1$. The zero coupon bond price for this period is $P(0,T^*) = 0.9$. Describe why the price of the caplet with strike value $0.04$ is given by $$\operatorname{Cplt}(0,T,T^*) = 0.9 * 0.66 .$$ What is the numeraire (benchmark) in this setting? How would a hedge look like. Instruments are the bond $P(.,T^*)$ whose value rises deterministically from $0.9$ to $1.0$, and $P(.,T^*) F(.,T,T^*)$ whose value rises from $0.9*0.04$ to $0.08$ or $0.02$.

In [18]:
import numpy as np
from itertools import product

# EUROPEAN
S0 = 0.04
u  = 2.
d  = 0.5
payoffE = lambda S: (S >= S0)

timesteps = 1
bin = set((0,1))
trajectories = set(product(bin, repeat = timesteps))

import pygraphviz as PG
from IPython.display import Image
binomialtreeforward = PG.AGraph(directed=True, strict=True)
binomialtreeforward.edge_attr.update(len='2.0',color='blue')
binomialtreeforward.node_attr.update(color='red')
process = {(omega,0):S0 for omega in trajectories}

#construct process by forward steps
for time in range(1,timesteps+1):
for omega in trajectories:
shelper = process[(omega,time-1)]*u**(omega[time-1])*d**(1.-omega[time-1])
process.update({(omega,time):shelper})

for time in range(1,timesteps+1):
for omega in trajectories:

def condprob(omega,omegahelper,time):
if omega[0:time]==omegahelper[0:time]:
prod = 1
for i in range(time,timesteps):
prod *= ((u-1)/(u-d))**omegahelper[time]*(((1-d)/(u-d))**(1-omegahelper[time]))
return prod
else:
return 0.0
binomialtreebackward = PG.AGraph(directed=True, strict=True)
processbackward = {(omega,timesteps):(payoffE(process[(omega,timesteps)])) for omega in trajectories}
#backwardssteps: European
for time in reversed(range(1,timesteps+1)):
for omega in trajectories:
shelper=0
for omegahelper in trajectories:
shelper += processbackward[(omegahelper,time)]*condprob(omega,omegahelper,time-1)
processbackward.update({(omega,time-1):shelper})

for time in range(1,timesteps+1):
for omega in trajectories:

Image(binomialtreebackward.draw(format='png',prog='dot'))