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  è un processo di Wiener, o moto browniano standard, e (drift percentuale istantaneo) e  (volatilità percentuale istantanea) sono costanti reali.

L'equazione ha una soluzione analitica nella forma:



La variabile casuale ha distribuzione normale con valore atteso e varianza .
 

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
End Class

Commenti

Post popolari in questo blog

Resampling dei dati

Indici di performance di una strategia di trading. Calmar Ratio, Sharpe Ratio, Sortino Ratio

Metodi di calcolo del PNL