mercoledì 13 maggio 2020

Brownian motion

Che cosa è il moto browniano ?

È il moto incessante e disordinato di piccolissime particelle sospese in acqua o gas. Lo scoprì il botanico scozzese Robert Brown, che nel 1827 osservò col microscopio particelle di polline.
Il moto browniano è un modello probabilistico utilizzato inizialmente per descrivere l’evoluzione nel tempo di fenomeni rilevanti del mondo fisico, come i movimenti nello spazio di particelle immerse in un fluido, e successivamente applicato con successo anche a problematiche di tipo economico-finanziario. In particolare è il moto browniano geometrico ad essere utilizzato per la descrizione dell’evoluzione nel tempo del prezzo delle azioni.  


Il moto browniano, noto anche come processo di Wiener, è un processo stocastico gaussiano in tempo continuo con incrementi indipendenti.
Un processo di Wiener W_{t} è caratterizzato dalle seguenti proprietà:

  • Il processo parte da 0, ovvero W_{{0}}=0 quasi certamente;
  • Le traiettorie, ovvero le funzioni t\to W_{t} sono continue quasi certamente;
  • Il processo ha incrementi indipendenti, ovvero, scelti quattro tempi0\leq s_{1}\leq t_{1}\leq s_{2}\leq t_{2} (gli intervalli (s_{1},t_{1}) e  (s_{2},t_{2}) non si intersecano), allora
\ W_{{t_{1}}}-W_{{s_{1}}} e \ W_{{t_{2}}}-W_{{s_{2}}}sono variabili casuali indipendenti.
  • Il processo ha incrementi gaussiani, ovvero scelti due tempi s\leq t
\ W_{{t}}-W_{{s}}\sim N\left(0,(t-s)\right) dove {\displaystyle \ N(0,(t-s))} denota una distribuzione normale con media {\displaystyle 0} e varianza {\displaystyle (t-s)}.
Esistono due tipi di Moto Browniani:
  • Moto Browniano Aritmetico;
  • Moto Browniano Geometrico, molto usato nell’ambito finanziario.
Nasce un problema legato al fatto che la distribuzione degli incrementi del moto browniano è proporzionale al tempo, quindi al passare del tempo la varianza diventa sempre piiù grande.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.

Significato del teorema funzionale del limite centrale per processi aleatori e la sua analogia con il teorema del limite centrale

Premessa

Precedentemente abbiamo visto la Random Walk bernoulliana, definita:
  •  in un tempo discreto → discrete time. 
Oltre al tempo discreto come è definita  la Random Walk, ci sono dei processi stocastici definiti
  •  in un tempo continuo  continuous time.

Cosa c'è dietro?

Se rendiamo fitto l'insieme dei tempi che consideriamo, cioè se prendiamo tempi sempre più vicini, ci avviciniamo ad una situazione di continuità, che  è quella che ritroviamo nei modelli matematici continuous time.  Il modello più importante e che nella teoria dei processi stocastici svolge il ruolo analogo a quello della  distribuzione normale nell'ambito delle distribuzioni, è il Moto Browniano o Processo  di Wiener. Quindi è l'analogo della distribuzione normale per le distribuzioni, cioè il risultato più importante della teoria statistica. Cioè  per le distribuzioni esiste il Teorema Centrale del limite che ci dice che sotto opportune condizioni se consideriamo la media di una successione di v.a  Sia  una delle  variabili aleatorie indipendenti e identicamente distribuite, se standardizzo la media sottraendo la media delle singole variabili e rapporto allo scarto quadratico medio delle media campionaria allora : se esistono   e , con  (ovvero ).
Posto  allora  presenterà una distribuzione normale standard, .
Abbiamo una convergenza in distribuzione  ad un normale standardizzata. Per i processi aleatori esiste un risultato analogo a questo,quindi  un risultato di convergenza, però che non riguarda la singola variabile aleatoria ma tutto il processo nel suo insieme. Cioè se partiamo da un Random Walk qualsiasi, sempre sotto opportune condizioni di regolarità. Non importa quale sia la variabile aleatoria che utilizziamo  all'infittirsi dei tempi tende ad un Moto Browniano ovvero è il limite teorico  a cui tende questo ti po di RW quando la differenza dei  tra i Ti → 0 (si infittiscono i tempi). Si parla di Teorema Centrale del limite funzionale per dire che è riferito a tutta quanta la funzione(tutto quanto il processo aleatorio) e non alla singola variabile aleatoria. Si parla anche di Teorema di Donsker, esistono  due tipi di Moto Browniano :
1) Aritmetic BM
2) Geometric BM

La nozione di processo aleatorio e in particolare la Random walk


Premessa

Per quanto riguarda le applicazioni specifiche  di metodi statistici e probabilistici alla finanza quantitativa,uno strumento indispensabile è il concetto di processo aleatorio( stocastico).

Che cos' è un processo stocastico?

E' una collezione di variabili aleatorie  è un insieme ordinato di funzioni  reali di un certo parametro  che di solito è identificato con  il tempo. Esistono molti tipi di processi studiati, che vengono applicati in contesti diversi,come lo studio di serie storiche, quello dei  fenomeni fisici come il moto browniano o i processi connessi ad applicazioni termodinamiche. Per quanto riguarda le applicazioni  alla  finanza, i processi stocastici sono importanti perché ci consento di modellizzare  l'andamento di fenomeni di interesse, come i prezzi, le quantità scambiabili ecc. E'  possibile modellizzare  queste quantità attraverso il concetto di processo aleatorio. 

Strategia di trading 

E' il caso più semplice di processo stocastico, cioè   il caso  di quando andiamo a testare una strategia di trading.  La strategia di trading è un insieme di regole (algoritmo) prefissate  per la compravendita di uno strumento finanziario.

Quali sono i strumenti principali finanziari che ci interessano ?


  • Stock → azione
  • Futures →  Contratto a termine standardizzato con il quale le parti si impegnano a scambiare una certa attività (finanziaria o reale) a un prezzo prefissato e con liquidazione differita a una data futura.
  • ETFè l’acronimo di Exchange Traded Fund, un termine con il quale si identifica una particolare tipologia di fondo d’investimento o Sicav con due principali caratteristiche:
  • Stockoptions → Strumento finanziario derivato attribuito da una società ai propri dipendenti, generalmente dirigenti, che conferisce loro il diritto di acquistare a un determinato prezzo di convenienza azioni della società stessa entro un termine stabilito.
  • Futureoptions    si intende quel particolare tipo di contratto che conferisce al possessore il diritto, ma non l'obbligo  di acquistare o vendere il titolo sul quale l'opzione stessa è iscritta, in questo caso il sottostante è un future.

Il nostro strumento finanziario lo possiamo vedere come una traiettoria nel tempo, cioè come un processo stocastico(aleatorio) che è parametrizzato rispetto al tempo, che ad un certo istante assumerà un certo valore P(t). Rappresenta appunto il prezzo dello strumento finanziario  in un  certo istante.









Una volta definita la  nostra strategia di trading( set rules buy/sell) andiamo a testarla:

i tipi di Test sono :

1) fatti con i dati del passato(CSV o DBMS) → Back Test
2) fatti dati simulati, creare un processo aleatorio,non dati più letti in CSV o DBMS, ma generati al pc. 
3) test fatti   con dati che arrivano in tempo reale ForwardTesting  e spesso con transazioni simulate  Paper Trading
       

Dal punto di vista della modellizzazione del prezzo, quando andiamo a simulare una sequenza di prezzi, è necessario considerare le due sequenze più o meno  parallele :

  • La sequenza di BID è la sequenza di ASK
  • In qualunque stock exchange per qualunque  strumento finanziario, abbiamo sempre due prezzi quello BID e quello ASK
  • Per definizione il prezzo ASK  è quello che noi applichiamo quando compriamo un certo strumento finanziario. Prezzo applicato agli acquisti(Buy)
  • Per definizione il prezzo BID se allo stesso tempo c'è una persona che sta vendendo lo stesso strumento finanziario, è il prezzo applicato alle vendite(Sell).
  •  Lo Spread cioè la differenza di prezzo tra il prezzo  ASK e il prezzo BID che è sempre positiva.



Il prezzo si muove su intervalli definiti di tempo, le transazioni sono eventi discreti, causano movimenti nella curva di prezzi indicizzati in intervalli discreti, quindi immaginiamo che il prezzo vari in intervalli discreti.  La nostra non è una curva continua, il prezzo varia con salti finiti.


  • La minima variazione di prezzo di uno strumento finanziario viene chiamato Tick
  • La minima variazione di prezzo nel mercato dei cambi viene chiamato PIP
  • Non solo abbiamo uno spazio degli indici(del tempo) discreto ma anche lo spazio degli stati cioè i valori che possono essere assunti. 
  • Ad ogni istante le nostre curve sono costituite da gradini pari all'incremento minimo di prezzo. 
  • Nella microstructure vedremo plottati  degli scalini.
  • Nella macrostructure cioè quando andremo a plottare su ampi spazi temporali   non vedremo più  una curva a scalini, la nostra curva ci apparirà più regolare e sembrerà continua.
Noi ci interessa la generazione di processi aleatori:
Quindi abbiamo 
1) Spazio del tempo → discreto
2) Spazio degli stati → discreto
3) due curve di prezzi con spread aleatorio  e con incremento da un tempo all'altro pari a Tick

 Quindi a noi ci arriva una sequenza di variabili aleatorie indicizzate su uno spazio di tempi  discreti. Noi abbiamo un flusso di dati derivanti dallo  stock exchange del tipo ti(BIDi,ASKi).

Abbiamo una serie di regole e andiamo  a plottare gli ordini secondo la nostra  strategia, le nostre compravendite sono l' insieme di punti sulle nostre curve. Il profitto risulterà dall'opportuno conteggio dei profitti e perdite dovuti a questi ordini. La formula del profitto sarà:
 Profitto = Q(Sell - Buy) con Q intesa come quantità che ho acquistato e venduto.
Pofit & Loss(PNL) → dalla composizione di questi ordini si genererà una serie di profitti o perdite.
Cioè parallelamente alla strategia, immaginiamo un altro processo aleatorio che ci dice come sta andando il nostro profitto e perdite, perché ad ogni ordine corrisponderà una variazione della curva dei profitti e perdita.



Dal punto di vista statistico e della modellizzazione a noi interessa:

1) Generazione delle curve dei prezzi con il relativo spread
2) applicazione di una strategia
3) calcolo del PNL e altri parametri di interesse

Il PNL = 𝑓(ordini e prezzi correnti) funzione degli ordini e dei prezzi correnti.

Considerando con Ps = prezzo sell e con Pb = prezzo buy otteniamo con Q la rispettiva quantità.

Profitto(+) = Q( Ps - Pb)
loss(-) = Q( Ps - Pb)

I futures  o le future options hanno associato un moltiplicatore che non è altro che un numero che va a modificare la grandezza :
MQ( Ps - Pb)


E' la formula con cui calcolo il mio PNL relativo ad una semplice compravendita con una quantità uguale per i due ordini Buy e  Sell.

Nella realtà le quantità e le sequenze di Buy e Sell  posso essere diverse! Si parla di profitti Unrealized   e Realized :
Unrealized  quando siamo nella curva BID e il prezzo sale noi abbiamo un ipotetico realizzo o perdita
Realized   quando realmente abbiamo realizzato un profitto o una perdita
Posso  vedere il mio PNL  =  Realized + Unrealized.
Quindi vogliamo simulare i dati che arrivano da uno Stock Exchange o se vengolo dal passato(CSV,DBMS) cioè una : 
sequenza di tempi e un prezzo BID  e un  prezzoprezzo, ti(BIDi,ASKi)  
Possiamo utilizzare un processo di bernoulli per andare a generare questa salto uguale al Tick che può essere verso l'alto o verso il basso. Noi possiamo immaginare di generare per esempio la BiD  e otteniamo l'ASK sommando lo Spread  che potrà essere aleatorio. Cioè noi partiamo da Pi al tempo ti   e noi al tempo ti+1 avremmo un prezzo Pi+1 che dipende alla variazione di prezzo  che è data dalla variazione positiva o negativa del Tick. Poi il prezzo in questo caso della ASK la otteniamo come somma del Prezzo BID più lo spread.




 l'oggetto Random  → è una funzionalità base che serve a generare numeri (pseudo) casuali nell'intervallo  compreso tra zero e uno. Otteniamo un numero compreso tra (0,1) con distribuzione uniforme continua in (0,1)
 Il metodo Next Double → ci rilascia questo valore u ∈ (0,1) compresa tra 0 e 1. Quindi il nostro punto di partenza grazie all'oggetto random è l'uniforme continua. Noi vogliamo passare da un uniforme continua ad una bernoulliana che  assume valori {0,1} cioè o  zero o 1 .
Ripartiamo l'intervallo {0,1 in due parti proporzionali a P e 1-P(cioè le rispettive probabilità)
Se u cade nell'intervallo lungo P assocerò 1 se invece cade su 1 - P assocerò zero.

Questo  è un esempio di Random Walk(passeggiata aleatoria) Bernoulliana, dove a partire da un perto P0 il punto di origine come asse delle ordinate, e corrispettivamente come asse del tempo quello delle ascisse t0, andiamo ad effettuare un salto la cui identità può essere + - 1  cioè un Tick(incremento minimo del prezzo)  quindi salti unitari, indipendenti cioè ciascun incremento generato indipendetemente  da quello accaduto nel  passato. Inoltre tutti questi incrementi appartengono tutti alla stessa distribuzione che è la  Bernoulli con il parametro P:
  • Incrementi IID e identicamente distribuiti cioè di incrementi stazionari.
  • Questo processo appena visto è una  sequenza di variabili aleatorie, questa Randow Walk è :
  • Definita nel tempo discreto


La nozione di ricorsione confrontata con quella di iterazione

Cosa hanno in comune?

Sia nella  ricorsione che nella  iterazione vi è la necessità di ripetere delle parti di codice all'interno di cicli operativi con dati via via diversi ad ogni ciclo.

Differenze 

Nell'iterazione → il Loop è tutto contenuto all'interno di una stessa funzione,viene definito un ciclo con una serie di comandi da eseguire ad ogni passo, fino a quando non si verifica una condizione di uscita.



Nella ricorsione invece → il Loop  viene realizzato mediante una funzione R(x) che al suo interno ha una chiamata a se stessa.In questo modo si innesca il Loop che avrà bisogno di una condizione di uscita che può essere utilizzata attraverso l'utilizzo della IF.


All'interno della ricorsione avremo:

1) Caso ricorsivo La definizione della chiamata a se stessa 
2) Caso Base → La definizione che ne detta le condizioni di uscita dalla ricorsione.


Vediamo un esempio concreto dei due casi :


  • caso iterativo :







  • Caso ricorsivo:







Uso della memoria da parte di un programma, nozione di stack e Heap

Premessa

Abbiamo visto fin'ora  parlando di eccezioni, il concetto di CallStack  (pila delle  chiamate) →  la funzionalità  del debug che ci consente di vedere la catena o la pila delle chiamate. Mettendo le chiamate correnti in alto mentre quelle precedenti in basso. Il concetto di Stack →  un'area di memoria destinata per l'utilizzo  delle funzioni. Quest'area è destinata ha mantenere informazioni su queste call. Questa memoria ha diversi utilizzi: 



Una prima parte per di questa memoria code  →  destinata ha contenere le istruzioni eseguibili del programma stesso, cioè il codice

Un'altra area variabili globali →  che servono all'esecuzione di tutto il programma, che non sono definito all'interno delle funzioni ma al di fuori, valgono globalmente nel programma.

La parte Heap → area che serve per l'allocazione di oggetti che sono destinati a crescere indefinitivamente come i reference type e le classi, quindi è un 'area di memoria riservata all'allocazione dinamica degli oggetti che non hanno una dimensione predefinita.

Per quanto riguarda la parte di memoria Stack →  è un' area di memoria specializzata  che serve  a contenere tutti i dati dei nostri meotodi(funzioni) che andiamo ad eseguirle, abbiamo questa struttura a  pila contenente i  Value Type.

Ciascuna di queste funzioni causa l'allocazione di un area riservata per ciascuna funzione e viene chiamata Stack Frame via via che ci sono nuove chiamate ci sono  nuovi Stack Frame.  Quindi nello Stack Frame ci sono un sacco di informazioni, sono presenti le variabili locali definite all'interno della funzione. Le New entry  vengono aggiunte in cima e vengono definite LiFO(Last In First Out)  che sono le ultime ad entrare e le prime ad uscire.
La dimensione della Stack di solito è 1GB per 32 bit
La dimensione della Stack di solito è 4GB per 64 bit



E' possibile che il programma  ecceda la dimensione messa a disposizione e si genera questa eccezione chiamata Stack  Overflow.



Applicazione9

Inserire il calcolo delle distribuzioni semplici e bivariate di alcune variabili di interesse nella vostra precedente applicazione (HW 15) di analisi dati. Aggiungere anche una rappresentazione grafica a piacere di variabili del vostro dataset, programmata con la libreria GDI+ di .NET. Svolgere l'esercizio in VB.NET e C#
Estendere a piacere a funzionalità della classe di chart interattivo (in VB.NET o C#) aggiungendo la capacità di ridimensionare il rettangolo ponendo il mouse sui lati o sugli angoli del rettangolo e altre eventuali funzionalità che pensate possano essere utili (es. rotazioni, etc.).

martedì 5 maggio 2020

Trasformazione di coordinate: dal "mondo reale" al "mondo virtuale"

Premessa
Il nostro obiettivo  è  quello di fare delle elaborazioni statistiche, per fare  ciò, si necessita di attuare delle rappresentazioni grafiche. Noi partiamo dalle coordinate che ci vengono dal mondo reale, i punti li dobbiamo rappresentare in un sistema virtuale che lavora in pixel. Quindi prendiamo questi  punti del mondo reale e li proiettiamo nel mondo virtuale. Facciamo una  trasformazione  dalle  coordinate reali  → alle coordinate  virtuali :



Si passa da un rettangolo reale ad un rettangolo virtuale, prendendo (x_i,y_i) e  proiettandoli nel rettangolo virtuale.  Ci serve una formula  che per ciascun coordinata di punti mi dia il corrispondente valore nel rettangolo che considero all'interno del mio bitmap. E' un tipo di trasformazione lineare quindi dobbiamo trasformare ogni coppia di coordinate reali  nel seguente modo :

W indica larghezza del rettangolo e L(left) indica quanto si scosta il rettangolo dal suo riferimento. Per quanto riguarda le coordinate y:




dove H indica l’altezza del rettangolo virtuale e T (top) indica quanto si scosta il rettangolo  dall' alto. Bisogna stare attenti perchè l'asse delle y è dall'alto verso il basso cioè è inverso il punto rispetto all'asse delle y delle coordinate reali. Questo significa che nel mondo virtuale occorre fare il complemento a H.

Principali oggetti grafici

Premessa
Abbiamo visto come leggere i nostri dati da un file  di dati qualunque immagazzinandoli all'interno di una struttura che contiene gli oggetti che andiamo ad utilizzare per le nostre elaborazioni. Abbiamo anche fatto una semplice "rappresentazione grafica" ASCII. Ma noi vogliamo ora vogliamo passare ad una rappresentazione grafica vera e propria! Vogliamo lavorare  con un interfaccia più generale attraverso la Reflection cioè una funzionalità di Visual Studio che ci da la possibilità di leggere i meta dati(real time) delle classi. Così da lavorare in generale con qualunque struttura di dati. 

Scopo

Ora però il nostro scopo è quello della rappresentazione grafica vera e propria: vogliamo fare lo Scatter Plot tra due variabili. Per quanto riguarda la grafica in Visual Studio, abbiamo GDI+  che è la libreria all'interno dell'ambiente .NET per la rappresentazioni grafiche statistiche in 2D o in 3D. Unisce l'esigenza di una relativa semplicità ad una adeguata potenza. Vediamo i vari step

1) Creazione del bitmap → un' area di memoria che contiene l'immagine che vogliamo creare, è un'area rettangolare, che contiene i pixel di punti luminosi che possiamo accendere  spegnere e colorare a nostro  piacere. Quest'area è caratterizzata da un'altezza(height) e larghezza(width).

2) Istanziazione del nostro oggetto grafico Graphis(GDI+) per lavorare sul bitmap

3) Realizzazione della parte grafica(disegni vari, display..)

4) Display bitmap usando la PictureBoxe

La complicazione sta nel punto 3) gli altri  punti vengono eseguiti attraverso una riga di codice. Quindi nella parte grafica troveremo i seguenti oggetti:

Pen  rappresenta il tratto di penna colora lo spessore cioè la parte esterna dei perimetri.

Rectangle  → sono due oggetti già definiti nel linguaggio sono  Structure By Value  che consentono  di disegnare un rettangolo. Richiede 4 dati : x, y, w, h che sono, rispettivamente, le coordinate del punto in alto a sinistra, l’altezza e la larghezza del rettangolo;

Font    consente di aggiungere un piccolo testo alle label del grafico e definisce uno specifico formato di testo

Brush  →  permette di colorare le superfici della  figura.

DrawRectangle  → consente di disegnare  un rettangolo identificato da una coppia di coordinate,  larghezza e altezza.
Color: rappresenta un colore utilizzabile tra i seguenti (alfa, rosso, verde, blu);

PointF  → rappresenta una coppia ordinata di coordinate x e y a virgola mobile, che definisce un punto in un piano bidimensionale

SizeF  → archivia una coppia ordinata di numeri a virgola mobile, generalmente la larghezza e l’altezza di un rettangolo.

size →  possiamo impostare il modo con cui l'immagine viene rappresentata

FillEllipse  →  ha due argomenti  2  Brush e Rectangle consente di permette riempire  l’area interna di un’ellisse definita da un rettangolo di delimitazione specificato.

Point →  Si può rappresentare  una coppia ordinata di coordinate di valori interi x e y per definire un punto in un piano a due dimensioni

Clear →  metodo che permette di cancellare l’intera area grafica

applicazione13

- Svolgere l' Esercizio 4  indicato nel video 49 (processo aleatorio + ordini e calcolo PNL) - Completare l' Esercizio 4  aggiungen...