MOTO BROWNIANO GEOMETRICO: cosa è e come scriverlo in VB.NET

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.


In campo finanziario viene teorizzato per descrivere l'andamento dei prezzi del sottostante nel modello di Black & Scholes. Tale processo stocastico soddisfa l'equazione differenziale , dove con Wt si indica un moto browniano standard, mentre con e si indicano rispettivamente i coefficienti di drift e di volatilità




In VB.NET è possibile descrivere attraverso un moto browniano geometrico l'andamento dei prezzi di una serie storica con le seguenti linee di codice:





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

CAPM: Capital Asset Pricing Model

EREDITARIETÀ INFORMATICA

ORDER MATCHING: acquisti e vendite, come ordinarli?