sabato 6 maggio 2017

Generazione Processi Aleatori

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





Nessun commento:

Posta un commento