giovedì 25 maggio 2017

Il moto browniano geometrico

Il moto browniano geometrico (detto anche moto browniano esponenziale) è un processo stocastico definito nel continuo in cui il logaritmo della variabile aleatoria nel tempo segue un moto browniano.

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:
{\displaystyle \ dS_{t}=\mu S_{t}dt+\sigma S_{t}dW_{t}}
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)
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 Class

Risultati immagini per moto browniano geometrico

Nessun commento:

Posta un commento