sabato 13 maggio 2017

Moto Browniano

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:

{\displaystyle \ dS_{t}=\mu S_{t}dt+\sigma S_{t}dW_{t}}
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:
{\displaystyle \ S_{t}=S_{0}\exp \left\{\left(\mu -{\frac {1}{2}}\sigma ^{2}\right)t+\sigma (W_{t}-W_{0})\right\}}
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)
Private Sub Button1_Click(sender As Object, e As EventArgsHandles 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 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

Nessun commento:

Posta un commento