Tale processo assume particolare rilevanza in ambito finanziario, in particolare nel calcolo del prezzo in quanto nel modello di Black-Scholes-Merton viene ipotizzato che il prezzo dell'azione sottostante segua un tale processo. Il moto browniano geometrico soddisfa la seguente equazione differenziale stocastica:
dove Wt
è un moto browniano standard mentre µ, il drift percentuale istantaneo, e σ, la volatilità percentuale istantanea, sono costanti reali.
In Visual Basic è possibile implementare la generazione di un moto browniano geometrico, tramite il seguente codice:
Imports System.IO
Public Class Form1Public ListaOsservazioniBid As List(Of osservazioneprezzo)
Public ListaOsservazioniAsk As List(Of osservazioneprezzo)
Public Class Form1Public ListaOsservazioniBid As List(Of osservazioneprezzo)
Public ListaOsservazioniAsk As List(Of osservazioneprezzo)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim PrezzoIniziale As Decimal = 1000
Dim DataIniziale As Date = Now
Dim Tick As Decimal = 1 Dim RandB As New Random()
Dim RandB As New Random()
Dim IntervalloT As New TimeSpan(0, 0, 0, 5, 0)
Dim PrezzoIniziale As Decimal = 1000
Dim DataIniziale As Date = Now
Dim Tick As Decimal = 1 Dim RandB As New Random()
Dim RandB As New Random()
Dim IntervalloT As New TimeSpan(0, 0, 0, 5, 0)
Dim PrezzoCorrente As Decimal = PrezzoIniziale
Dim TempoCorrente As Date = DataIniziale
Dim TempoCorrente As Date = DataIniziale
ListaOsservazioniBid = New List(Of osservazioneprezzo)
ListaOsservazioniAsk = New List(Of osservazioneprezzo)
ListaOsservazioniAsk = New List(Of osservazioneprezzo)
Do Dim ossbid As New osservazioneprezzo
With ossbid .istante = TempoCorrente
.prezzo = PrezzoCorrente
End With ListaOsservazioniBid.Add(ossbid)
With ossbid .istante = TempoCorrente
.prezzo = PrezzoCorrente
End With ListaOsservazioniBid.Add(ossbid)
Dim ossask As New osservazioneprezzo
With ossask .istante = TempoCorrente
.prezzo = PrezzoCorrente + RandS.Next(1, 10)
End With ListaOsservazioniAsk.Add(ossask)
With ossask .istante = TempoCorrente
.prezzo = PrezzoCorrente + RandS.Next(1, 10)
End With ListaOsservazioniAsk.Add(ossask)
Dim u1 As Decimal = RandB.NextDouble()
Dim u2 As Decimal = RandB.NextDouble()
Dim ossinc As Double Dim ossinc2 As Double‘ Moto browniano
ossinc = Math.Sqrt (-2 * Math.Log(u1)) * Math.Cos(2 * 3.14 * u2)
‘ Moto browniano geometrico
ossinc2 = Math.Exp(ossinc – u1/2) If RandB.NextDouble <= 0.5 Then
PrezzoCorrente = PrezzoCorrente + ossinc2
Else
PrezzoCorrente = PrezzoCorrente – ossinc2
End If
Dim u2 As Decimal = RandB.NextDouble()
Dim ossinc As Double Dim ossinc2 As Double‘ Moto browniano
ossinc = Math.Sqrt (-2 * Math.Log(u1)) * Math.Cos(2 * 3.14 * u2)
‘ Moto browniano geometrico
ossinc2 = Math.Exp(ossinc – u1/2) If RandB.NextDouble <= 0.5 Then
PrezzoCorrente = PrezzoCorrente + ossinc2
Else
PrezzoCorrente = PrezzoCorrente – ossinc2
End If
TempoCorrente = TempoCorrente + IntervalloT
If (TempoCorrente – DataIniziale).TotalHours > 24 Then
Exit Do
End If
Loop
End Class
If (TempoCorrente – DataIniziale).TotalHours > 24 Then
Exit Do
End If
Loop
End Class
Nessun commento:
Posta un commento