Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

Grau en Matemàtica Computacional i

Analítica de Dades

HW 4 - Introducció a
l’enginyeria financera
Autors:
Pau Fuentes & Andrea González & Ona Sánchez & Judit Yebra
1600158 — 1603921 — 1601181 — 1603614

17 de Novembre de 2023
Contents
1 Exercici 1 3

2 Exercici 2 6

2
1 Exercici 1
We will program a binomial tree algorithm to compute option prices.

a) Building a tree: The required variables to build up a tree are the stock price S, the up-
ward allowed movement u and the downward allowed movement v. Remember that 0 < v < 1 < u.
We also need the number of time steps to be used N. Write a function with the following prototype
that outputs a binomial tree. Rows represent depth of the tree, while columns represent the nodes
in a particular depth.

Aquest exercici demana crear un arbre binomial de stocks, preus d’accions. Les variables que es
necessitaran són el preu inicial de l’acció, S, el factor de creixement ascendent, u, i el factor de
creixement descendent, v. Recordear que 0 < v < 1 < u. També es necessitarà el nombre d’estrats
temporals (el nombre de passos) a utilitzar, N .

Primerament, al codi s’inicialitza una matriu de preus de l’arbre demanat. Aquesta matriu té
dimensions (N +1) x (N +1). Els valors de la matriu s’inicialitzen a zero. A continuació s’estableix
el preu inicial en el primer node, que és S.

Posteriorment, la funció calcula els preus a la diagonal principal de l’arbre, començant pel segon
estrat. Per fer-ho, es fa servir la fórmula següent:

P (n, n) = P (n − 1, n − 1) ∗ u

Aquesta fórmula representa el preu d’una acció al node (n, n) de l’arbre, on u és el factor de
creixement ascendent.
Després, la funció calcula els preus als nodes restants de l’arbre, començant pel segon estrat. Per
fer-ho, es fa servir la fórmula següent:

P (n, j) = P (n − 1, j − 1) ∗ u + P (n − 1, j) ∗ v

Aquesta fórmula representa el preu d’una acció al node (n, j) de l’arbre, on u és el factor de
creixement ascendent i v és el factor de creixement descendent.

Finalment, es crida a la funció amb valors per les variables, a això se li assigna la variable result i
s’imprimeix per pantalla.

3
b) Risk neutral probability: Lets now compute the risk neutral probability of an upward
moment q. For this we need the values u, v and the interest rates r with the time step dt (recall
that the probability of a downward movement will be (1 − q)). Recall from the theory, that by a
no-arbitrage argument we have :

S ∗ (1 + r ∗ dt) = q ∗ u ∗ S + (1 − q) ∗ v ∗ S

Write a function with the following prototype that outputs q.

Per tal de crear la funció, primer s’aïlla la probabilitat de risc neutral, q, de la fórmula següent:

S ∗ (1 + r ∗ dt) = q ∗ u ∗ S + (1 − q) ∗ v ∗ S

Aquesta fórmula representa el preu de l’acció al final d’un interval de temps, on:

• S : Preu inicial de l’acció


• u : Factor de creixement ascendent
• v : Factor de creixement descendent

• r : Taxa d’interès
• dt : Interval de temps

Els passos que es segueixen per aconseguir aïllar q, han estat:

S ∗ (1 + r ∗ dt) = q ∗ u ∗ S + v ∗ S − q ∗ v ∗ S

S(1 + rdt) − vS = quS − qvS


1 + r ∗ dt − v = q ∗ u − q ∗ v
1 + r ∗ dt − v = q ∗ (u − v)
1 + r ∗ dt − v
=q
(u − v)
Ara sí, un cop aïllada q, la fórmula obtinguda representa la probabilitat que el preu de l’acció
augmenti en el següent interval de temps.
La funció q_prob() té els paràmetres r, dt, u i v, necessaris per al seu còmput, retornant el valor
corresponent.

4
c) Recursive valuation: Let’s now write a function that computes the value of an option recur-
sively. The first task of the option is to create an empty tree which we will fill with the option
value recursively. Fill the last nodes of the tree with the payoff function (the function should take
a call or a put option). Now use a loop to fill in the nodes one step backward using the formula:

V (t + dt)+ ∗ q + V (t + dt)− (1 − q)
V (t) =
(1 + r ∗ dt)

V (t+dt)+ means the value of the option at t + dt in the upward node, and similarly for V (t+dt)− .

El codi d’aquest exercici es separa en dues condicions depenent del tipus d’opció que es vol valorar:
call o put.

En el cas d’una opció ’call’, només es poden obtenir beneficis si el preu de l’acció al final del període
és superior al preu d’exercici de l’opció. Per tant, només cal calcular els valors de V per a aquells
nodes de l’arbre on S > K.
Els primers valors de V a omplir-se són els últims, ja que es calculen com la diferència del valor
’final’ de l’stock i el valor de l’stock l’instant de temps ’inicial’. Un cop obtinguts aquests valors,
es es va retrocedint per l’arbre, calculant els valors de V per als nodes de les files anteriors. (no es
calculen tots els valors de cada columna).
Per cada nou valor que es vulgui calcular, cal utilitzar la fòrmula proprcionada a l’enunciat On:
• V (t + dt)+ és el valor de V en el node successor del node donat en la direcció ascendent

• V (t + dt)− és el valor de V en el node successor del node donat en la direcció descendent

Aquests valors ja han estat calculats en passos anteriors. El valor de q s’obté amb la funció q_prob,
que s’ha explicat en l’apartat b.
En el cas de l’opció ’put’, només es poden obtenir beneficis si el preu de l’acció al final del període
és inferior al preu d’exercici de l’opció. Per tant, només cal calcular els valors de V per a aquells
nodes de l’arbre on S < K.
El procediment per calcular els valors de V en el cas d’una opció put és exactament el mateix que
en el cas d’una opció call.

• Calcular els valors de V per als nodes de la fila final.

• Retrocedir per l’arbre, calculant els valors de V per als nodes de les files anteriors.

d) Final price: Put all previous functions together to build up a function that gives the price of
the option.

Aquest apartat requereix de les funcions creades prèviament a a, b i c. La idea del codi és la
següent:
• S’usa la funció buildstocktree() per crear l’arbre corresponent a l’opció a valorar

• Es passa l’arbre creat a la funció value_binomial_option(), encarregada de computar els


valors de les opcions de forma recursiva.
• Aquesta funció retornarà l’arbre de l’opció amb els seus valors calculats. (option_tree())
• S’extreu de l’arbre retornat el valor de l’opció (primer valor de la matriu).

5
2 Exercici 2
Use the function you just build, to compute the price of a CALL option with strike ATM, with
underlying currently trading at USD 100 and maturing in one year. Use a monthly time step, and
an annualized interest rate of 10%. The stock is allowed to move upwards or downwards by 1%
each month.

Per fer el segon exercici s’ha utilitzat la funció binomial_option(), creada en l’exercici 1

Per escollir els valors de les variables, s’han tingut en compte els paràmetres:
• u : Factor de creixement ascendent
• v : Factor de creixement descendent

• dt : Pas del temps en mesos


• r : Taxa d’interès anual
• K : Preu d’exercici

• S : Preu inicial de l’acció


• N : Nombre de passos

En aquest cas, com el preu de l’acció pot pujar o baixar un 1% cada mes, els valors de u i v són
1, 01 i 0, 99, respectivament. La variable dt és 1/12. La taxa d’interès anual és del 10%, per tant,
r és 0, 1. Els preus de K i S són els mateixos, 100. Finalment, N és 12, que representa el temps
de maduració en mesos.

Amb aquests valors, s’ha obtingut el següent resultat: 9, 478797U SD

You might also like