Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 16:58
da AZ13
Calcolo del Vega della Put e della Call formula di Black-Scholes-Merton
- Codice: Seleziona tutto
Function Vega(Prezzo, Strike, Giorni, Tasso, Volatilità, Optional Dividendo)
Tempo = Giorni / 365
If IsMissing(Dividendo) Then
d1 = (Log(Prezzo / Strike) + (Tasso + Volatilità ^ 2 / 2) * Tempo) / (Volatilità * Sqr(Tempo))
Vega = Round(Prezzo * Sqr(Tempo) * Normale(d1), 4)
Else
d1 = (Log(Prezzo / Strike) + (Tasso - Dividendo + Volatilità ^ 2 / 2) * Tempo) / (Volatilità * Sqr(Tempo))
d2 = d1 - (Volatilità * Sqr(Tempo))
Vega = Round(Prezzo * Sqr(Tempo) * Normale(d1) * Exp(-Dividendo * Tempo), 4)
End If
End Function
Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 17:00
da AZ13
Calcolo del Theta della Call formula di Black-Scholes-Merton
- Codice: Seleziona tutto
Function Call_Theta(Prezzo, Strike, Giorni, Tasso, Volatilità, Optional Dividendo)
Tempo = Giorni / 365
If IsMissing(Dividendo) Then
d1 = (Log(Prezzo / Strike) + (Tasso + Volatilità ^ 2 / 2) * Tempo) / (Volatilità * Sqr(Tempo))
d2 = d1 - (Volatilità * Sqr(Tempo))
A = Prezzo * Normale(d1) * Volatilità / (2 * Sqr(Tempo))
B = Tasso * Strike * Exp(-Tasso * Tempo) * Application.NormSDist(d2)
Call_Theta = Round(-A - B, 4)
Else
d1 = (Log(Prezzo / Strike) + (Tasso - Dividendo + Volatilità ^ 2 / 2) * Tempo) / (Volatilità * Sqr(Tempo))
d2 = d1 - (Volatilità * Sqr(Tempo))
A = Prezzo * Normale(d1) * Volatilità * Exp(-Dividendo * Tempo) / (2 * Sqr(Tempo))
B = Dividendo * Prezzo * Application.NormSDist(d1) * Exp(-Dividendo * Tempo)
C = Tasso * Strike * Exp(-Tasso * Tempo) * Application.NormSDist(d2)
Call_Theta = Round(-A + B - C, 4)
End If
End Function
Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 17:05
da AZ13
Calcolo del Delta della Call formula di Black-Scholes-Merton
- Codice: Seleziona tutto
Function Call_Delta(Prezzo, Strike, Giorni, Tasso, Volatilità, Optional Dividendo)
Tempo = Giorni / 365
If IsMissing(Dividendo) Then
d1 = (Log(Prezzo / Strike) + (Tasso + Volatilità ^ 2 / 2) * Tempo) / (Volatilità * Sqr(Tempo))
Call_Delta = Round(Application.NormSDist(d1), 4)
Else
d1 = (Log(Prezzo / Strike) + (Tasso - Dividendo + Volatilità ^ 2 / 2) * Tempo) / (Volatilità * Sqr(Tempo))
Call_Delta = Round(Application.NormSDist(d1) * Exp(-Dividendo * Tempo), 4)
End If
End Function
Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 17:07
da AZ13
Calcolo del prezzo teorico della Put formula di Black-Scholes-Merton
- Codice: Seleziona tutto
Function Put_Europea(Prezzo, Strike, Giorni, Tasso, Volatilità, Optional Dividendo)
Tempo = Giorni / 365
If IsMissing(Dividendo) Then
d1 = (Log(Prezzo / Strike) + (Tasso + 1 / 2 * Volatilità ^ 2) * Tempo) / (Volatilità * Sqr(Tempo))
d2 = d1 - (Volatilità * Sqr(Tempo))
Put_Europea = Round(Strike * Exp(-Tasso * Tempo) * (1 - Application.NormSDist(d2)) - Prezzo * (1 - Application.NormSDist(d1)), 4)
Else
d1 = (Log(Prezzo / Strike) + (Tasso - Dividendo + Volatilità ^ 2 / 2) * Tempo) / (Volatilità * Sqr(Tempo))
d2 = d1 - (Volatilità * Sqr(Tempo))
Put_Europea = Round(Strike * Exp(-Tasso * Tempo) * (1 - Application.NormSDist(d2)) - Prezzo * Exp(-Dividendo * Tempo) * (1 - Application.NormSDist(d1)), 4)
End If
End Function
Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 17:09
da AZ13
Calcolo della volatilità implicita della Call formula di Black-Scholes-Merton
- Codice: Seleziona tutto
Function Call_Volatilità(Prezzo, Strike, Giorni, Tasso, Prezzo_Call, Optional Dividendo)
Tempo = Giorni / 365
High = 1
Low = 0
If IsMissing(Dividendo) Then
Do While (High - Low) > 0.0001
If Call_Europea(Prezzo, Strike, Giorni, Tasso, (High + Low) / 2) > _
Prezzo_Call Then
High = (High + Low) / 2
Else: Low = (High + Low) / 2
End If
Loop
Call_Volatilità = (High + Low) / 2
Else
Do While (High - Low) > 0.0001
If Call_Europea(Prezzo, Strike, Giorni, Tasso, (High + Low) / 2, Dividendo) > _
Prezzo_Call Then
High = (High + Low) / 2
Else: Low = (High + Low) / 2
End If
Loop
Call_Volatilità = (High + Low) / 2
End If
End Function
Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 17:10
da AZ13
Calcolo della volatilità implicita della Put formula di Black-Scholes-Merton
- Codice: Seleziona tutto
Function Put_Volatilità(Prezzo, Strike, Giorni, Tasso, Prezzo_Put, Optional Dividendo)
Tempo = Giorni / 365
High = 1
Low = 0
If IsMissing(Dividendo) Then
Do While (High - Low) > 0.0001
If Put_Europea(Prezzo, Strike, Giorni, Tasso, (High + Low) / 2) > _
Prezzo_Put Then
High = (High + Low) / 2
Else: Low = (High + Low) / 2
End If
Loop
Put_Volatilità = (High + Low) / 2
Else
Do While (High - Low) > 0.0001
If Put_Europea(Prezzo, Strike, Giorni, Tasso, (High + Low) / 2, Dividendo) > _
Prezzo_Put Then
High = (High + Low) / 2
Else: Low = (High + Low) / 2
End If
Loop
Put_Volatilità = (High + Low) / 2
End If
End Function
Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 21:06
da carlolanzerotti
Domandina speciale, Antonio ... DOVE le copio quelle formule per farle funzionare ???
Con excel ho molto da imparare ...
Grazie
Re: La cassetta degli attrezzi
Inviato:
16/01/2012, 21:16
da AZ13
carlolanzerotti ha scritto:Domandina speciale, Antonio ... DOVE le copio quelle formule per farle funzionare ???
Con excel ho molto da imparare ...
Grazie
Alt F11 e passi da Excel all’ambiente di programmazione VBA.
Clicchi sulla voce inserisci e selezioni Modulo.
Re: La cassetta degli attrezzi
Inviato:
18/01/2012, 15:53
da livio
ciao Antonio, nei listati VB riportati c'è forse un errore di scrittura?
Nelle formule per il calcoloo di theta, gamma e vega c'è scritto "Normale (d1)", se eseguito mi da errore, devo sostutuire con "Application.NormSDist(d1)"?