Il moto browniano geometrico (a volte detto moto browniano
esponenziale) è un processo stocastico in tempo continuo in cui il logaritmo
della quantità variabile nel tempo segue un moto browniano, o, forse più
precisamente, un processo di Wiener. Il processo è ritenuto appropriato per
modellizzare alcuni fenomeni dei mercati finanziari. In particolare, è usato
nell'ambito dell'option pricing, in quanto una quantità che segue un moto
browniano geometrico può assumere soltanto valori maggiori di zero, il che
riflette la natura del prezzo di un'attività finanziaria.
Un processo stocastico segue un moto browniano geometrico se
soddisfa la seguente equazione differenziale stocastica:
Dove è un processo di Wiener, o moto browniano standard e (drift istantnaeo) e (volatilità istantanea) sono costanti reali.
L'equazione ha soluzione analitica nella forma:
La variabile causale ha distribuzione normale con valore atteso e varianze
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 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 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