In matematica, più precisamente
in teoria della probabilità, un processo
aleatorio è la versione probabilistica del concetto di sistema dinamico. Un
processo aleatorio è un insieme ordinato di funzioni reali di un certo
parametro (in genere il tempo) che gode di determinate proprietà statistiche. I
processi aleatori sono un'estensione del concetto di variabile aleatoria, nel
momento in cui viene preso in considerazione anche il parametro tempo.
Da un punto di vista pratico, un
processo stocastico è una forma di rappresentazione di una grandezza che varia
nel tempo in modo casuale e con certe caratteristiche. Facendo delle prove ripetute
dello stesso processo, si ottengono diversi andamenti nel tempo (realizzazioni);
osservando le diverse realizzazioni ad un istante t otteniamo una variabile
aleatoria X(t) che comprende i diversi valori che il processo può assumere in
quell'istante.
Una serie storica y(t) è la registrazione cronologica di osservazioni
sperimentali di una variabile ed è quindi, una successione di dati ordinati nel
tempo Y{t} da cui si vogliono estrarre informazioni per la caratterizzazione
del fenomeno in osservazione e per la previsione di valori futuri.
La serie storica viene spesso
utilizzata con il fine di fare previsioni, nel corso degli anni sono state
teorizzate diversi modelli stocastici atti a descrivere questi fenomeni.
Solitamente infatti la rilevazione y(t) viene considerata divisa in due parti,
una parte deterministica, ricavabile dalle informazioni estratte guardando la
storia passata della serie, e una parte stocastica o imprevedibile che spesso
viene sintetizzata con un “rumore bianco”.
I processi stocastici più
semplici sono il Random Walk e il Brownian Motion
Il Brownian Motion (Moto Browniano)
Il moto browniano nasce come
modello applicato nel mondo della fisica per studiare la dinamica imprevedibile
di particelle immerse in un fluido ma trova ben presto applicazione anche nel
settore economico-finanziario grazie alla sua capacità di descrivere al meglio l’andamento
aleatorio di un rendimento azionario.
Le particolari caratteristiche
del moto browniano sono:
– parte nell’origine
– incrementi sono indipendenti e distribuiti
come una Normale di media nulla e varianza pari all’ampiezza dell’incremento
–traiettorie continue e non
differenziabili
Nel mondo finanziario la sua
applicazione principale riguarda la formula chiusa ipotizzata da
Black-Scholes-Merton creata per costruire il pricing di contratti derivati
partendo dall’ipotesi che il sottostante di questi contratti abbia la dinamica
di un moto browniano geometrico.
Questo modello è talmente insito
nel mercato azionario che nonostante sia stato dimostrato essere non del tutto
esatto continua ad essere efficace in quanto viene utilizzato da tutti gli
operatori.
Applicazioni più sofisticate
considerano moti browniani geometrici multidimensionali che consentono di
analizzare l’evoluzione dei prezzi di portafogli di attività finanziarie e di derivati
su tali portafogli. Un’altra variante è costituita dai moti browniani
frazionari, ritenuti particolarmente utili nell’analisi di serie storiche per
le loro proprietà di autosimilarità (invarianza dei comportamenti rispetto alla
scala utilizzata per descrivere il fenomeno).
Un limite del moto browniano
geometrico è che, essendo un processo markoviano, dipende solo dall’ultima
osservazione, quindi si basa sull’assunzione che, applicato alle variazioni dei
prezzi nel tempo, esse siano tra di loro indipendenti. La soluzione sarebbe
considerare il fenomeno della Mean Reversion intesa come la tendenza dei prezzi
azionari ad essere “attratti” verso il loro valore medio di lungo periodo. La
differenza tra un processo di Mean Reversion ed il moto Browniano è semplicemente
nel termine di deriva: infatti esso è positivo se il livello di prezzo corrente
è inferiore alla media e negativa se il livello di prezzo è superiore,
indicando appunto che tale livello di equilibrio attrae verso di sé la deriva.
La Random Walk (Passeggiata Aleatoria)
In matematica, una passeggiata
aleatoria (random walk) è la formalizzazione dell'idea di prendere passi
successivi in direzioni casuali. Matematicamente parlando, è il processo
stocastico più semplice, il processo markoviano, la cui rappresentazione
matematica più nota è costituita dal processo di Wiener. Il termine fu
introdotto per la prima volta da Karl Pearson nel 1905.
In una passeggiata aleatoria
monodimensionale si studia il moto di una particella puntiforme vincolata a
muoversi lungo una retta nelle due direzioni consentite. Ad ogni movimento essa
si sposta (a caso) di un passo a destra (con una probabilità fissata p) o a
sinistra con una probabilità 1-p, ed ogni passo è di lunghezza uguale e
indipendente dagli altri. Quindi le passeggiate aleatorie possono essere
utilizzate per modellizzare le distribuzioni dei prezzi dei titoli finanziari,
sfruttando le loro proprietà di indipendenza tra le variazioni di prezzo
(assenza di memoria) e costanza dei primi due momenti delle variazioni di
prezzo. Dunque, secondo questo modello, il prezzo all’istante successivo è dato
dal prezzo all’istante corrente più una componente aleatoria con valore atteso
nullo e varianza costante e per questo la miglior previsione per un valore
futuro è il valore corrente.
Esempio di passeggiata aleatoria in VB.Net
Public Class Form1
Public r As New Random
Public WithEvents t As New Timer
Public b As Bitmap
Public g As Graphics
Public PosizioneCorrenteParticella As Point
Public PosizioneFuturaParticella As Point
Public Passo As Integer = 10
Public NumeroPasso As Long = 0
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'generazione oggetti per la grafica
b = New Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height)
g = Graphics.FromImage(b)
'avvio timer per animazione
t.Interval = 5
t.Start()
'inizializzazione posizione particella (al centro)
PosizioneCorrenteParticella = New Point(b.Width / 2, b.Height / 2)
Me.LabelNumeroPasso.Text = NumeroPasso
End Sub
Private Sub t_Tick(sender As Object, e As EventArgs) Handles t.Tick
Me.CalcoloNuovaPosizione()
Me.Ridisegno()
'aggiornamento posizione
PosizioneCorrenteParticella = PosizioneFuturaParticella
NumeroPasso += 1
Me.LabelNumeroPasso.Text = NumeroPasso
End Sub
Sub CalcoloNuovaPosizione()
' una di 4 direzioni a caso
'Passo = r.Next(10, 101) ' randomizzo anche il passo
Dim NumeroCasualeUniforme As Double = r.NextDouble
Select Case NumeroCasualeUniforme
Case Is < 0.25 ' sinistra
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X - Passo, PosizioneCorrenteParticella.Y)
Case Is < 0.5 'destra
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X + Passo, PosizioneCorrenteParticella.Y)
Case Is < 0.75 'alto
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X, PosizioneCorrenteParticella.Y - Passo)
Case Else 'basso
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X, PosizioneCorrenteParticella.Y + Passo)
End Select
'prova riflettenti
If PosizioneFuturaParticella.X > b.Width Then PosizioneFuturaParticella.X -= Passo
If PosizioneFuturaParticella.X < 0 Then PosizioneFuturaParticella.X += Passo
If PosizioneFuturaParticella.Y > b.Height Then PosizioneFuturaParticella.Y -= Passo
If PosizioneFuturaParticella.Y < 0 Then PosizioneFuturaParticella.Y += Passo
''prova lato opposto
'If PosizioneFuturaParticella.X > b.Width Then PosizioneFuturaParticella.X = 0
'If PosizioneFuturaParticella.X < 0 Then PosizioneFuturaParticella.X = b.Width
'If PosizioneFuturaParticella.Y > b.Height Then PosizioneFuturaParticella.Y = 0
'If PosizioneFuturaParticella.Y < 0 Then PosizioneFuturaParticella.Y = b.Height
End Sub
Sub Ridisegno()
Dim Colore As Color = Color.FromArgb(40, 0, 20, 255)
Dim penna As New Pen(Colore, 2)
g.DrawLine(penna, PosizioneCorrenteParticella, PosizioneFuturaParticella)
Me.PictureBox1.Image = b 'refresh immagine
End Sub
Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
End Sub
End Class
Public r As New Random
Public WithEvents t As New Timer
Public b As Bitmap
Public g As Graphics
Public PosizioneCorrenteParticella As Point
Public PosizioneFuturaParticella As Point
Public Passo As Integer = 10
Public NumeroPasso As Long = 0
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'generazione oggetti per la grafica
b = New Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height)
g = Graphics.FromImage(b)
'avvio timer per animazione
t.Interval = 5
t.Start()
'inizializzazione posizione particella (al centro)
PosizioneCorrenteParticella = New Point(b.Width / 2, b.Height / 2)
Me.LabelNumeroPasso.Text = NumeroPasso
End Sub
Private Sub t_Tick(sender As Object, e As EventArgs) Handles t.Tick
Me.CalcoloNuovaPosizione()
Me.Ridisegno()
'aggiornamento posizione
PosizioneCorrenteParticella = PosizioneFuturaParticella
NumeroPasso += 1
Me.LabelNumeroPasso.Text = NumeroPasso
End Sub
Sub CalcoloNuovaPosizione()
' una di 4 direzioni a caso
'Passo = r.Next(10, 101) ' randomizzo anche il passo
Dim NumeroCasualeUniforme As Double = r.NextDouble
Select Case NumeroCasualeUniforme
Case Is < 0.25 ' sinistra
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X - Passo, PosizioneCorrenteParticella.Y)
Case Is < 0.5 'destra
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X + Passo, PosizioneCorrenteParticella.Y)
Case Is < 0.75 'alto
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X, PosizioneCorrenteParticella.Y - Passo)
Case Else 'basso
PosizioneFuturaParticella = New Point(PosizioneCorrenteParticella.X, PosizioneCorrenteParticella.Y + Passo)
End Select
'prova riflettenti
If PosizioneFuturaParticella.X > b.Width Then PosizioneFuturaParticella.X -= Passo
If PosizioneFuturaParticella.X < 0 Then PosizioneFuturaParticella.X += Passo
If PosizioneFuturaParticella.Y > b.Height Then PosizioneFuturaParticella.Y -= Passo
If PosizioneFuturaParticella.Y < 0 Then PosizioneFuturaParticella.Y += Passo
''prova lato opposto
'If PosizioneFuturaParticella.X > b.Width Then PosizioneFuturaParticella.X = 0
'If PosizioneFuturaParticella.X < 0 Then PosizioneFuturaParticella.X = b.Width
'If PosizioneFuturaParticella.Y > b.Height Then PosizioneFuturaParticella.Y = 0
'If PosizioneFuturaParticella.Y < 0 Then PosizioneFuturaParticella.Y = b.Height
End Sub
Sub Ridisegno()
Dim Colore As Color = Color.FromArgb(40, 0, 20, 255)
Dim penna As New Pen(Colore, 2)
g.DrawLine(penna, PosizioneCorrenteParticella, PosizioneFuturaParticella)
Me.PictureBox1.Image = b 'refresh immagine
End Sub
Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
End Sub
End Class
Nessun commento:
Posta un commento