Valutazione opzioni Europee:
• Formula per valutazione Call Europea
su albero binomiale:
n i
n i
i n i


q
(
1

q
)
max
Su
d  X ,0

i
i 0  

• Put Europea:
n
n i
n i
i n i


q
(
1

q
)
max
X

Su
d ,0

i
i 0  

n


Call Europea
Function EurCall(S, X, T, rf, sigma, n)
delta_t = T / n
up = Exp(sigma * Sqr(delta_t))
down = Exp(-sigma * Sqr(delta_t))
R = Exp(rf * delta_t)
q_up = (R - down) / (R * (up - down))
q_down = 1 / R - q_up
EurCall = 0
For Index = 0 To n
EurCall = EurCall + Application.Combin(n, Index) * q_up ^
Index * _
q_down ^ (n - Index) * Application.Max(S * up ^ Index *
down ^ _
(n - Index) - X, 0)
Next Index
End Function
Valutazione opzioni Americane
• Procedimento backward
• Ad ogni nodo il valore dell’opzione è pari
al massimo tra:
Il payoff se esercitata
Il valore attuale atteso sotto la probabilità
risk-neutral dei payoff nei due nodi
collegati al tempo successivo
Call Americana
Function AmericanCall(S, X, T, rf, sigma, n)
delta_t = T / n
up = Exp(sigma * Sqr(delta_t))
down = Exp(-sigma * Sqr(delta_t))
R = Exp(rf * delta_t)
q_up = (R - down) / (R * (up - down))
q_down = 1 / R - q_up
Dim OptionReturnEnd() As Double
Dim OptionReturnMiddle() As Double
ReDim OptionReturnEnd(n)

Dichiarazione
variabili ed
assegnazione
valori

For State = 0 To n
OptionReturnEnd(State) = Application.Max(S * _
up ^ State * down ^ (n - State) - X, 0)
Next State
Assegnazion
e valori ai
nodi finali
Call Americana (continua)
Ciclo che sconta i
payoff fino al tempo
0
ReDim OptionReturnMiddle(Index)
Assegna
For State = 0 To Index
dimensione
OptionReturnMiddle(State) = Application.Max(S * _
e valori al
up ^ State * down ^ (Index - State) - X, _
vettore dei
q_down * OptionReturnEnd(State) + _
nodi centrali
For Index = n - 1 To 0 Step -1
q_up * OptionReturnEnd(State + 1))
Next State


ReDim OptionReturnEnd(Index)
For State = 0 To Index
OptionReturnEnd(State) = OptionReturnMiddle(State)
Next State
Next Index
AmericanCall = OptionReturnMiddle(0)
End Function
Assegna
dimensione
e valori al
vettore dei
nodi finali
uguali a
quelli del
vettore dei
nodi centrali
Proprietà opzioni
Call E
Put E
Call A
Put A
S
+
-
+
-
X
-
+
-
+
T
?
?
+
+
sigma
+
+
+
+
R
+
-
+
-
Div
-
+
-
+
La Distribuzione Lognormale
• Assunzione centrale del modello di Black &
Scholes
• Proprietà ragionevoli dei prezzi delle azioni
• Esaminiamo i prezzi ed i rendimenti dell’S&P500
• Usiamo la funzione matrice FREQUENZA(matr
dati;matr classi) per i rendimenti e notiamo che
si distribuiscono normalmente.
La Distribuzione Lognormale
• St+Dt=SterDt
• Assumiamo che il tasso di rendimento abbia una
distribuzione normale, allora il prezzo dell’azione
ha una distribuzione lognormale
• St+Dt=Ste(mDt+sZradq(Dt))
• Estraiamo una serie di numeri casuali da una
distribuzione normale standard ed usiamo
l’equazione precedente per simulare il sentiero
di prezzo dell’azione
Generazione numeri casuali
• Strumenti / Analisi dati / generazione
numero casuale
• Stimiamo il valore dell’azione a fine anno
utilizzando la serie di numeri casuali
• Usiamo la funzione frequenza e facciamo
un istogramma che illustra la forma della
distribuzione lognormale
Simulazione in VBA
•
•
•
•
•
•
•
•
Sub simula()
Dim vettore(1 To 1000) As Double
For i = 1 To 1000
z = Application.NormSInv(Rnd)
vettore(i) = z
Cells(i, 1).Value = vettore(i)
Next i
End Sub
Black & Scholes
• Call Europea: C  SN (d1 )  Xe rT N (d 2 )
ln( S / X )  (r  s 2 / 2)T
d1 
s T
d 2  d1  s T
 rT
P


SN
(

d
)

Xe
N ( d 2 )
• Put Europea:
1
 rT
P

S

C

Xe
• Put Call Parity:
Black & Scholes
Function dOne(Azione, Esercizio, Scadenza, Interesse, sigma)
dOne = (Log(Azione / Esercizio) + Interesse * Scadenza) /
(sigma * Sqr(Scadenza)) _
+ 0.5 * sigma * Sqr(Scadenza)
End Function
Function BSCall(Azione, Esercizio, Scadenza, Interesse, sigma)
BSCall = Azione * Application.NormSDist(dOne(Azione,
Esercizio, _
Scadenza, Interesse, sigma)) - Esercizio * Exp(-Scadenza *
Interesse) * _
Application.NormSDist(dOne(Azione, Esercizio, Scadenza,
Interesse, sigma) _
- sigma * Sqr(Scadenza))
End Function
Black & Scholes
'Questo è il prezzo dell'opzione put B&S secondo la parità
put-call
Function BSPut(Azione, Esercizio, Scadenza, Interesse,
sigma)
BSPut = BSCall(Azione, Esercizio, Scadenza, Interesse,
sigma) + _
Esercizio * Exp(-Scadenza * Interesse) - Azione
End Function
Volatilità implicita
Function CallVolatility(Azione, Esercizio, Scadenza, Interesse,
Obiettivo)
High = 1
Low = 0
Do While (High - Low) > 0.0001
If CallOption(Azione, Esercizio, Scadenza, Interesse, (High + Low) /
2) > _
Obiettivo Then
High = (High + Low) / 2
Else: Low = (High + Low) / 2
End If
Loop
CallVolatility = (High + Low) / 2
End Function
Risolutore
• Componenti aggiuntivi
• Strumenti\Riferimenti\Solver.xla
• Solveradd ( cellRef, relation, formulaText)
Relation: 1 <=
2 =
3 >=
• SolverOk (SetCell, MaxMinVal, ValueOf, ByChange)
Value of: 1 max
2 min
3 al valore di
• SolverOptions
• SolverSolve
Scarica

Valutazione opzioni Europee: