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:
End Class
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
Commenti
Posta un commento