Il Moto Browniano Geometrico
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.
Descrizione formale del processo
Un processo stocastico segue un moto browniano geometrico se soddisfa la seguente equazione differenziale stocastica:
dove
L'equazione ha una soluzione analitica nella forma:
La variabile casuale
Di seguito viene riportato il codice in VB.NET per generare una serie storica dei prezzi che segua un moto browniano geometrico (tralasciando la componente grafica):
Imports System.IO
Public Class Form1
Public 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 PrezzoCorrente As Decimal =
PrezzoIniziale
Dim TempoCorrente As Date =
DataIniziale
ListaOsservazioniBid = 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)
Dim ossask As New osservazioneprezzo
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
TempoCorrente = TempoCorrente +
IntervalloT
If (TempoCorrente – DataIniziale).TotalHours > 24 Then
Exit Do
End If
Loop
End Sub
Commenti
Posta un commento