giovedì 9 aprile 2015

Oggetti principali per la grafica e simulazione di palline in una PictureBox

In questo post andremo ad analizzare gli oggetti principali necessari per poter creare animazioni di qualsiasi tipo, grafici e immagini.

  1. PictureBox: è un oggetto nel quale possiamo inserire le nostre immagini o i nostri grafici.
  2. Bitmap: è una rappresentazione di una immagine o di un grafico su una finestra (picturebox). Per ottenere un bitmap ci sono due modi: è possibile creare un nuovo bitmap oppure utilizzarne uno già esistente. Per utilizzarne uno già esistente, basta inizializzare una nuova istanza dell'oggetto Bitmap passandogli come parametro l'immagine esistente: Bitmap(image).Altrimenti, bisogna creare una  istanza dell'oggetto passandogli come argomenti le dimensioni del bitmap: Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height).
  3. Graphics: questo oggetto rappresenta l'area di disegno ed è utilizzato per la creazione di immagini grafiche

In seguito, riporto l'implementazione in VB.NET di una serie di "palline" che si muovono all'interno di una Picturebox:










































































































In seguito, riporto l'output del programma.
Ad ogni click sul bottone si generano tre palline, le quali si muovono all'interno della PictureBox battendo contro la superficie dei bordi.


mercoledì 8 aprile 2015

Apllicazione dell'algoritmo di Knuth per il calcolo della media e della varianza

Consideriamo i dati relativi alla lettura e conversione di un file di dati finanziari.
A tale riguardo dobbiamo calcolare la media e la varianza degli "Open", seguendo l'algoritmo di Knuth enunciato in Algoritmo di Knuth per il calcolo di media e varianza.

VB.NET:








Ciò che dobbiamo fare è aggiungere questa parte di codice a quello già esistente( nel ciclo do while):



















C#:









 Dobbiamo aggiungere questa parte di codice nel ciclo while:























Metodi e Oggetti utilizzati:
  • Parse: tramite l'istanza dell'oggetto "double" posso richiamare il metoto "Parse" per convertire un array di stringhe in un tipo di dato double.
  • Cdbl: è un metodo che converte un array di stringhe in un tipo di dato double.
  • Replace: è un metodo che converte un carattere specifico con uno scelto dall'utente (nel nostro caso, nel nuovo array di stringhe "dividi[1]", il carattere '.' è stato sostituito con il carattere ','

Algoritmo di Knuth per il calcolo di media e varianza

Media:
Prendiamo in considerazione la media aritmetica:

Se questa formula la poniamo in forma di algoritmo per eseguirla con un software apposito, possiamo andare incontro a diverse anomalie. Infatti, se i dati osservati sono particolarmente numerosi (ad esempio dati di grandi imprese o di banche), il calcolo della media semplice porta a risultati inefficienti  con tempi di calcolo e memoria abbastanza elevati e, a lungo andare, i risultati possono rivelarsi totalmente sbagliati a causa del fenomeno della catastrophic cancellation.
Per rimediare a questo problema, utilizzeremo l'algoritmo di Knuth.
L'informatico Donald Knuth ha proposto delle formule alternative per media e varianza che permettono di calcolare queste grandezze con una complessità computazionale ridotta.

Per calcolare la media con l'algoritmo di Knuth si applica una media ponderata che permette di aggiornare l'informazione ricavata fino al passo n-1 con quella fornita dall'ennesimo dato immesso:

  • Calcolo della media con l'algoritmo di Knuth:

Da tale risultato si è sviluppato un algoritmo che permetta di calcolare la media in maniera sequenziale ovviando alla problematica della catastrophic cancellation.

Varianza:
Prendiamo in considerazione la varianza:

Poichè la varianza indica la concentrazione, allora:

  • Minore è la varianza e maggiore è la concentrazione dei dati attorno al valore medio
  • Maggiore è la varianza e più i dati si disperdono attorno al valore medio.

Anche in questo caso, come nella media, se poniamo tale formula in forma algoritmica possiamo andare incontro a diverse anomalie.
Anche per la varianza, Knuth ha proposto un algoritmo che permette di evitare di trovarsi di fronte al fenomeno della catastrophic cancellation:

  • Calcolo della varianza con l'algoritmo di Knuth:


Codice algoritmo di Knuth (running algorithm) :


Quest'algoritmo è meno incline alla perdita di precisione dovuta alla cancellazione, ma potrebbe essere meno efficiente a causa dell'operazione di divisione all'interno del ciclo.


Esistono tanti altri algoritmi per il calcolo della media e della varianza.
Prendiamo in considerazione due algoritmi:

  1. Algoritmo Naive
  2. Two Step Algorithm
1.

Se volessimo utilizzare quest'algoritmo per calcolare la varianza per l'intera popolazione, basta modificare la variabile variance in questo modo:

variance= (Sum_sqr - (Sum*Sum)/n)/N

Per N abbastanza grande, i due valori Sum_sqr e (Sum*Sum)/n sono approssimativamente uguali e questo porta ad avere una varianza approssimativamente uguale a 0 e quindi ad una poca precisione del risultato.

2.

Due step per il calcolo della varianza:
  1. Calcolo della media del campione:     \bar{x}= \frac{1}{n}\sum_{i=1}^{N}x_{i}
  2. Calcolo della somma dei quadrati della varianza: s^{2}=\frac{1}{n-1} \sum_{i=1}^{N}\left (x_{i}- \bar{x}\right)


Nella pratica è poco conveniente utilizzare questi due algoritmi, poichè è facile incorrere ad errori computazionali come la catastrophic cancellation, la quale prevede la cancellazione di molte cifre decimali. 
Per tale motivo, preferiamo utilizzare l'algoritmo del calcolo della media e della varianza di Knuth.



lettura e conversione di un file di dati finanziari

Obiettivo:

  1. Date: rappresenta la data dell'apertura e della chiusura dei prezzi
  2. Open: rappresenta il prezzo di apertura
  3. Close: rappresenta il prezzo di chiusura

  • Dividere la data nel seguente modo:
  1. Anno
  2. Mese
  3. Giorno

  • Scrivere su un nuovo file contenente la data splittata, gli open e i close. 


Struttura Form:

  1. Button1_Click: "Open"
  2. Button2_Click: "Save"
  3. TextBox1: visualizza il percorso del file che si vuole aprire
  4. TextBox2: visualizza il percorso del nuovo file che si vuole salvare
  5. Button3_Click: "Execute"
  6. RichtextBox1: visualizza l'output

Di seguito riporto il codice in VB.NET:






 Output:


Come possiamo notare, sulla RichTextBox vengono visualizzati i dati relativi a Date, Open e Close.

Metodi e Oggetti utilizzati:

  • OpenFileDialog: tramite questo oggetto, con il metodo showDialog() visualizziamo la finestra che ci permette di selezionare il file di interesse.
  • SaveFileDialog:  tramite questo oggetto, con il metodo showDialog() visualizziamo la finestra che ci permette di salvare il file di interesse, scegliendo un opportuno percorso.
  • Split: Restituisce un vettore di stringhe richiedendo come parametro il carattere da divididere(splittare).Il nuovo vettore conterrà i dati splittati secondo quel determinato carattere(nel nostro caso il carattere ",").
  • StreamReader: Ci permette di leggere il file desiderato,
  • StreamWriter: Ci permettere di scrivere su un file.
  • TryParseExact: Questo metodo dell'oggetto Date ci permette di dividere la data in anno,mese e giorno.
Di seguito riporto il codice in C#:

































martedì 7 aprile 2015

The Quantitative Analyst


Che cos'è un quantitative analyst?

Un quantitative analyst (in gergo finanziario, quant) è una persona specializzata in applicazioni di metodi matematici e statistici.

Ruoli di un quant:
Nelle operazioni di trading e di vendita, gli analisti quantitativi lavorano per determinare i prezzi, la gestione del rischio e identificare le opportunità redditizie.

Guadagno:

Il guadagno di un buon analista è strettamente proporzionale alla sua dote nel generare profitti per le banche o imprese per cui lavora. A  Londra i più bravi guadagnano più di 600 mila sterline, mentre a Parigi e a Francoforte gli analisti senior incassano 250 mila euro.

Cosa studiare per diventare un quant?

Sono molto apprezzate le lauree in matematica, fisica e in alcuni rami dell'ingegneria o scienze computazionali piuttosto che la laurea in economia, proprio per la capacità di applicare tecniche che sono state concettualmente sviluppate per il settore scientifico e applicate in seconda battuta a quello economico ( Metodo di Montecarlo, Bootstrapping, calcolo stocastico etc.).

Conoscenze importanti:

Un analista quantitativo dovrà avere anche ampie competenze nei linguaggi di programmazione. Le imprese cercano maggiormente persone con una buona dimestichezza nei linguaggi di programmazione orientati agli oggetti; i più noti sono Java, C++, Phyton, VB.NET, C#.
Un quantitative analyst lavora a stretto contatto anche con software statistici come Matlab e R.

Di massima importanza è la conoscenza della lingua inglese.

Chi sono i "serbatoi mondiali" di analisti quantitativi?

I "serbatoi mondiali" di analisti quantitativi sono la Francia e la Cina.
Le università francesi hanno un'ottima reputazione verso le banche.
Paradossalmente, in Francia, la richiesta della figura di quant è molto bassa.
I candidati francesi hanno una maggiore vocazione e il più delle volte hanno già avuto esperienza effettuando degli stages, il che può rappresentare un vantaggio competitivo rispetto a chi possiede una laurea senza alcuna esperienza lavorativa.

Paesi con maggiore richiesta lavorativa:

Navigando sul sito http://www.efinancialcareers.it/possiamo notare che i Paesi dove l'offerta di lavoro per un analista quantitativo è di forte rilievo sono gli Stati Uniti e il Regno Unito.