giovedì 9 aprile 2015

Snippet Book


VB:NET
  • Creare un’ interfaccia grafica tramite cui l’utente, cliccando sul bottone aggiunto nella progettazione del Form, può rispettivamente:
  1. aprire e leggere (nella RichTextBox) il file selezionato
Dim o As New OpenFileDialog
o.ShowDialog()
Dim nomefile = o.FileName
Me.RichTextBox1.AppendText(nomefile)
Dim lett As StreamReader = New StreamReader(nomefile)


      2.salvare il file in una cartella selezionata

Dim salva As New SaveFileDialog
salva.ShowDialog()

  • Scrivere sul nuovo file che verrà salvato nella cartella selezionata tramite il Button:
Dim sw As StreamWriter = New StreamWriter(salva.FileName)
  • Un esempio di ciclo while dove in questo caso crea il ciclo while che si arresta quando finisce di leggere con lo StreamReader
Do While Not leggi.EndOfStream
‘comandi da inserire nel ciclo
Loop

  •   Effettuare lo split di una stringa
Dim dividi As String() = Linea.Split(",")
  • Un sempio di costrutto condizionale in cui si scrive una sequenza di stringhe che viene visualizzata nella RichTextBox
If (dividi(0) = "Date") Then sw.WriteLine("Year" & " " & "Month" & " " & "Day" & " " & "Open" & " " & "Close")
Me.RichTextBox1.AppendText(vbCrLf & "Year" & " " & "Month" & " " & "Day" & " " & "Open" & " " & "Close")
End If

  • Dichiarare una data
Dim d As Date
  •  Convertire una stringa nel formato della data “yyyy-mm-dd”
Date.TryParseExact(dividi(0), "yyyy-mm-dd", Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, d)
  • Creare una variabili di tipo Integer:
Dim i As Integer
  • Creare un array di double
Dim open As New Double()
  • E' un metodo che converte il carattere "," dell'array di stringa dividi(1) con il carattere "."
Replace(dividi(1), ".", ",")
  • Converte un’espressione in un double
CDbl(expression)
  • Convertire un espressione in un intero
CInt(expression)
  • Convertire un elemento in array
x.ToArray
  • Incrementa di un’unità la variabile i
i += 1
  • Creare una variabile di tipo Boolean
Dim X As Boolean
  • Definire un colore
Dim colore As New Color
  • Dichiarare una finestra grafica delle dimensioni scelte dall’utente
Dim b As New Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height)
  • Dichiarare una lista di Double
Dim listaMesi As New List(Of Double)
  • Riempire una lista
listaMesi.Add(Y)
  • Dichiarare un oggetto che crei grafici sul bitmap
Dim g As Graphics = Graphics.FromImage(b)
  • Dichiarare una data
Dim DataOrigine As Date
  • Rimuove dalla lista l’elemento di indice specificato
lista.RemoveAt(0)
  • Dichiarare un punto di coordinate specificate
Dim punto As Point = New Point(X, Y)
  • Costruire un ciclo iterativo “for”
For Each punto As Point In lista
‘comandi da eseguire nel ciclo
Next

  • Disegna delle linee creando un grafico:
g.DrawLines(Pens.Black, x)
  • Caricare l’immagine nella picture box:
PictureBox1.Image
  • Rappresentare un’ellisse riempita con un colore scelto
g.FillEllipse(New SolidBrush(colore), X, Y, asseX, asseY)
______________________________________________________________________

 C#:
  • Creare un’ interfaccia grafica tramite cui l’utente, cliccando sul bottone aggiunto nella progettazione del Form, può rispettivamente:
  1. aprire e leggere il file selezionato
OpenFileDialog o = new OpenFileDialog();
o.ShowDialog();
dynamic nomefile = o.FileName;
this.richTextBox1.AppendText(nomefile);
StreamReader lett = new StreamReader(nomefile);


     2.salvare il file in una cartella selezionata

SaveFileDialog salva = new SaveFileDialog();
salva.ShowDialog();

  • Scrivere sul nuovo file che verrà salvato nella cartella selezionata tramite il Button:
StreamWriter sw = new StreamWriter(salva.FileName);
  • Un esempio di ciclo while dove in questo caso crea il ciclo while che si arresta quando finisce di leggere con lo StreamReader
while (!sr.EndOfStream)
{

//comandi da inserire nel ciclo
}

  • Effettuare lo split di una stringa
string[] dividi = Linea.Split(',');
  • Esempio di costrutto condizionale in cui si scrive una sequenza di stringhe che viene visualizzata nella RichTextBox
if ((dividi[0] == "Date"))
{

sw.WriteLine("Year" + " " + "Month" + " " + "Day" + " " + "Open" + " " + "Close");

}

  • Dichiarare una data
System.DateTime d = default(System.DateTime);
  • Convertire una stringa nel formato della data “yyyy-mm-dd”
System.DateTime.TryParseExact(dividi[0], "yyyy-mm-dd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out d);
  • Creare e inizializzare una variabile di tipo int     
int i = 0;
  • Creare un array di double
double open = new double();
  • E' un metodo che converte il carattere "," dell'array di stringa dividi(1) con il carattere "."
dividi[1].Replace(".", ",");
  • Converte un’espressione in un double
double.Parse(expression);
  • Incrementa di un’unità la variabile
i++;
  • Creare e inizializzare una variabile di tipo Boolean
bool X = false;
  • Definire un colore
public Color colore = new Color();
  • Dichiarare una finestra grafica delle dimensioni scelte dall’utente
Bitmap b = new Bitmap(this.PictureBox1.Width, this.PictureBox1.Height);
  • Dichiarare una lista di Double
List<double> listaMesi = new List<double>();
  • Dichiarare un oggetto che crei grafici sul bitmap
Graphics g = Graphics.FromImage(b);
  • Dichiarare un punto di coordinate specificate
Point punto = new Point(X, Y);
  • Costruire un ciclo iterativo “for”
foreach (Point punto2 in lista)
{

//comandi da eseguire nel ciclo

}

  • Creare il grafico:
g.DrawLines(Pens.Black, l.ToArray());
  • Caricare l’immagine nella picture box:
pictureBox1.Image = b;

Stablità numerica

La stabilità numerica (anche algoritmica o computazionale), nell'ambito dell'analisi numerica, è una proprietà desiderabile degli algoritmi numerici. Il significato esatto del termine varia ma, in generale, riflette l'accuratezza del risultato.
Non esistono metodi generali per valutare la stabilità di un algoritmo. Solitamente, si ricercano, tramite appositi metodi - come il metodo del simplesso - all'interno del dominio di un algoritmo, quei valori per cui l'algoritmo stesso diventa instabile: ossia la minima variazione dei dati porta a grandi scostamenti nell'errore.
Un esempio classico è il calcolo dell'area del triangolo con la formula di Erone, instabile per angoli molto piccoli.
Un altro esempio classico è il caso dell'overflow/underflow: basta pensare alle due operazioni
1/10^a \times 2
2 \times 10^b \div 2
dove 10-a è pari o inferiore all'epsilon di macchina, e 10b al massimo numero rappresentabile.
Un errore, una volta che è stato generato, generalmente si propagherà attraverso il calcolo. Questo conduce al concetto di stabilità numerica: un algoritmo si dice numericamente stabile se un errore, una volta che sia stato generato, non cresce troppo durante il calcolo.

Catastrophic Cancellation


La catastrophic cancellation è un effetto indesiderabile nei calcoli che utilizzano numeri a virgola mobile. Essa si verifica quando un'operazione su due numeri aumenta l’errore relativo più di quanto incrementi l’errore assoluto, ad esempio nel sottrarre due numeri quasi uguali.
Il risultato consiste nella perdita inaccettabile del numero di cifre significative. Le cause di tale inconveniente non sono da attribuire all’operazione di sottrazione effettuata dalla macchina, ma dipendono dagli errori già presenti nei due operandi e da quelli introdotti dal processo di troncamento effettuato dal calcolatore (in quanto potrebbe succedere che per poter memorizzare i numeri in memoria il calcolatore stesso debba troncare il numero dopo un tot stabilito di cifre dopo la virgola). L’operazione di sottrazione si limita ad amplificare ancora di più questi errori. L’esempio seguente dimostra la perdita di significatività per un numero decimale con 10 cifre significative.
Si consideri il numero decimale

0.1234567891234567890

Una rappresentazione a virgola mobile di questo numero su una macchina che supporta 10 cifre significative sarebbe

0.1234567891

Possiamo notare che la differenza tra i due numeri è molto piccola.

Infatti, calcolando:

0.1234567891234567890 − 0.1234567890 = 0.0000000001234567890

e

0.1234567891 − 0.1234567890 = 0.0000000001

La  “perdita di significato” del risultato è data dalle cifre “elise” le quali, invece, in certi ambiti potrebbero essere essenziali.

Per ovviare alla catastrophic cancellation bisogna controllare la stabilità di un algoritmo, cioè vedere se un algoritmo amplifica poco (relativamente alle caratteristiche del calcolatore) gli errori di arrotondamento introdotti nelle singole operazioni.

Fonti: http://it.wikipedia.org/

Rappresentazione grafica della serie storica dei prezzi, della running mean e della moving average

Obiettivo: Rappresentare graficamente la serie storica dei dati relativi ai post precedenti (nel nostro caso quelli dell' IBM) con le rispettive medie running e medie mobili.
I dati a cui ci riferiamo sono i "Close", cioè i prezzi di chiusura.

Il mio form sarà composto nel modo seguente:

  1. Button_Click
  2. PictureBox1
In seguito, riporto l'implementazione del codice in VB.NET:
























































































Output:
 
  • Serie storica dei prezzi "Close"
  • Running Mean
  • Moving Mean
  

Principali strumenti finanziari e Strategie di trading


ETF

Cos'è un ETF?

ETF è l’acronimo di Exchange Traded Fund, un termine con il quale si identifica una particolare tipologia di fondo d’investimento con due principali caratteristiche:
  • è negoziato in Borsa come un’azione;
  • ha come unico obiettivo d’investimento quello di replicare l’indice al quale si riferisce (benchmark) attraverso una gestione totalmente passiva.
Un ETF riassume in sé le caratteristiche proprie di un fondo e di un’azione, consentendo agli investitori di sfruttare i punti di forza di entrambi gli strumenti:
  • diversificazione e riduzione del rischio proprie dei fondi;
  • flessibilità e trasparenza informativa della negoziazione in tempo reale delle azioni.


Date le sue caratteristiche, l’ETF si presta a varie modalità d’impiego: investimento di medio / lungo termine, trading anche di tipo intraday e vendita allo scoperto al fine di prendere una posizione ribassista sull’indice benchmark. La possibilità di diversificare facilmente il portafoglio, la precisione con cui viene replicato l’indice benchmark e i bassi costi di gestione fanno si che l’ETF sia particolarmente adatto anche alla costruzione di un piano di accumulo (PAC) attraverso versamenti periodici, anche di piccola entità, effettuati dai singoli investitori.
Non deve invece essere dimenticato che gli ETF sono ovviamente esposti al rischio che le azioni, le obbligazioni e gli altri strumenti in cui è investito il loro patrimonio perdano valore.

 ETFs (ETF strutturato):

Cos'è un ETFs?
Gli ETF strutturati sono degli OICR cioè dei fondi o delle Sicav negoziabili in tempo reale come delle azioni gestiti con tecniche volte a perseguire rendimenti che non sono solo in funzione dell’andamento del mercato a cui fanno riferimento, ma che possono essere volte:
  • a partecipare in maniera più che proporzionale all’andamento di un indice (ETF a leva)
  • a partecipare inversamente ai movimenti del mercato di riferimento (ETF short con o senza leva)
  • alla protezione del valore del portafoglio pur partecipando agli eventuali rialzi dell’indice di riferimento (ETF protective put)
  • alla realizzazione di strategie d’investimento più complesse come ad esempio la strategia cosiddetta buy-write o covered call che prevede l’assunzione di una posizione lunga sul benchmark e la contestuale vendita di un opzione call sull’indice stesso con strike out of the money del 5%
L’elemento che accomuna gli ETF strutturati agli ETF è la politica d’investimento che si può sinteticamente definire “passiva” in considerazione del fatto che una volta definito il modello matematico in base al quale il patrimonio sarà gestito, la discrezionalità lasciata al gestore è limitata. Come per gli ETF, le quote possono essere create e riscattate continuamente da parte degli intermediari autorizzati (authorised participant), assicurando che il prezzo di mercato sia sempre allineato al NAV del fondo (di conseguenza il rischio di acquistare un ETF a premio o di venderlo a sconto è ridotto, tuttavia questo rischio non può essere eliminato) e garantendo che l'ETF strutturato sia tanto liquido quanto il mercato di riferimento.

FUTURES

I futures sono contratti a termine standardizzati per poter essere negoziati facilmente in una borsa valori.
Sono strumenti molto standardizzati: ogni elemento del contratto è definito in un contratto standard, e le controparti non possono modificarlo. Acquistare futures significa impegnarsi ad acquistare alla scadenza ed al prezzo prefissati l'attività sottostante. Questa può essere sia un'attività reale, ad esempio una commodity(grano, oro, metalli, caffè, ecc.) sia un'attività finanziaria. In quest'ultimo caso si parla di financial futures, i cui sottostanti possono essere ad esempio una valuta (currency futures) od un indice borsistico.
La standardizzazione consiste nella definizione del taglio unitario, della scadenza contrattuale e della modalità di negoziazione attraverso la Cassa di compensazione. La peculiarità di essere standardizzati rende questi contratti interscambiabili tra loro. Ciò rende possibile stipulare un contratto  di segno opposto all'originale. In questo modo, verrà evitata la consegna dell'attività sottostante il contratto. L'acquisto di futures corrisponde ad una aspettativa di rialzo dell'attività sottostante; la vendita, invece, sottende un'aspettativa al ribasso. Se le intenzioni fossero speculative, la vendita del futures dovrà essere effettuata prima della scadenza contrattuale; se, invece, le intenzioni sono di coprire un futuro acquisto/vendita della commodity sottostante, il futures permette una copertura senza rischi di oscillazioni del prezzo, e si aspetterà la scadenza prevista per provvedere all’acquisto/vendita della commodity stessa.

OPZIONI

Le opzioni sono contratti finanziari che danno al compratore il diritto, ma non l’obbligo, di acquistare una data quantità di una attività finanziaria sottostante (titoli, indici, valute etc...) ad un determinato prezzo di esercizio chiamato “strike” ad una data specifica o entro tale data. Nel caso in cui l’opzione possa essere esercitata solo alla scadenza avremo opzioni cosiddette “europee”, mentre le opzioni “americane” danno al possessore la possibilità di esercizio in qualunque momento entro la data di scadenza.
Opzione Call
Garantisce al possessore il diritto di ricevere a scadenza (o entro la scadenza) e ad un prezzo prefissato il sottostante, oppure quando non possibile (ad esempio per opzioni su indici) il corrispettivo in denaro. Ovviamente l’esercizio avrà senso solo se il prezzo del sottostante sarà superiore allostrike ed il profitto realizzato sarà pari alla differenza tra il prezzo di mercato e lo strike.
g1
Il grafico sintetizza il profilo di profitti e perdite connesso con l’uso di opzioni call. L’asse orizzontale del grafico indica il prezzo del sottostante: verso destra vi è un aumento di prezzo, verso sinistra, cioè verso l’origine degli assi, i prezzi calano.
L’asse verticale indica invece i profitti (o le perdite) dell’acquirente dell’opzione. Come già detto l’opzione acquisirà senso solo se il prezzo di mercato del sottostante sarà maggiore del prezzo di esercizio. Dal momento che l’acquisto della call ha un costo (è il premio che si deve concedere a chi scrive l’opzione, a chi cioè accetta di garantire all’acquirente il diritto di acquistare il sottostante al prezzo prefissato) il grafico del payoff della call ha partenza in territorio negativo. In caso di ribasso dei prezzi, il valore della call tenderà a zero e la massima perdita che l’investitore sosterrà sarà il premio pagato.
Questo strumento risulta ottimo per coloro i quali vogliono scommettere sul rialzo del mercato senza correre il rischio - in caso di ribasso - di subire le perdite in conto capitale connesse con il possesso diretto del sottostante. È utile anche per gli investitori che desiderano acquistare il titolo sottostante, ma vogliono differire nel tempo le uscite finanziarie che l’acquisto diretto del titolo comporterebbe.

Opzione Put
Garantisce al possessore il diritto di vendere a scadenza il sottostante ad un prezzo prefissato. In questo caso l’esercizio avrà senso solo se il prezzo del sottostante sarà inferiore allo strike; il profitto realizzato ammonterà alla differenza tra lo strike e il prezzo di mercato.
g2

La Put è uno strumento che permette di guadagnare se il mercato scende. Il compratore di opzioni put vuole scommettere sul ribasso del mercato senza i costi connessi con lo “short selling” (vendita allo scoperto, cioè di titoli che non si possiedono) né le perdite subite se il mercato va in direzione opposta a quella sperata (se i titoli si apprezzano sarà oneroso ricoprirsi).
Inoltre la put è spesso utilizzata da chi desidera proteggere il proprio portafoglio da ribassi del mercato. Acquistare un titolo e la relativa una putgarantisce di ottenere i guadagni in conto capitale sul titolo in caso di mercato in salita e al tempo stesso di evitare di perdere se il mercato dovesse scendere. Infatti in questo secondo caso le perdite sul titolo verrebbero bilanciate dall’apprezzamento dell’opzione; la massima perdita verrebbe comunque limitata al valore dello strike, ovvero al valore a cui il detentore della put ha il diritto di vendere i suoi titoli.
Questa strategia, chiamata “put protective strategy” è utilizzata per evitare che il portafoglio scenda sotto una soglia minima, è una sorta di assicurazione contro il ribasso con un costo pari al premio pagato per l’acquisto della put. Da notare che lo stesso profilo di ritorni si avrebbe con l’acquisto di un’opzione call con sottostante, strike e scadenza uguali.
In sintesi, le posizioni “lunghe” sulle opzioni consentono di prendere posizione scommettendo sul rialzo o sul ribasso del mercato con la possibilità di guadagno illimitato ed il rischio di una perdita limitata al prezzo del premio pagato.
Ma qual è il profilo di perdite e profitti per il venditore delle opzioni?
Bisogna sottolineare che mentre l’acquirente di opzioni a scadenza (o entro la scadenza per le opzioni americane) ha la facoltà di non esercitare il diritto (e da qui deriva il limite alle perdite che si possono subire) il venditore ha sempre l’obbligo di onorare l’impegno che l’opzione che ha scritto prevede.
Nel caso del venditore di una call, il payoff sarà il seguente:

imm3

Il profitto fisso iniziale (il premio incassato) va diminuendo all’aumentare del prezzo del sottostante: il venditore dell’opzione spera dunque che il mercato resti fermo o cali. A fronte di un profitto immediato limitato, la perdita è potenzialmente illimitata.
Nel caso della put:
im4
In questo caso, invece, l’erosione del premio iniziale incassato si ha se il prezzo del sottostante cala: il massimo profitto si avrà se il prezzo resterà costante o salirà. Anche per il venditore della put il profitto sarà limitato, mentre la perdita “quasi” illimitata (il sottostante non può infatti assumere valore negativo, la massima perdita si avrà se questo varrà zero).

OBBLIGAZIONI

Che cosa sono?

Le Obbligazioni sono un titolo di credito che rappresenta una parte di debito acceso da una società o da un ente pubblico per finanziarsi. Garantisce all'acquirente il rimborso del capitale più un tasso di interesse.
Le obbligazioni sono emesse allo scopo di reperire, direttamente tra i risparmiatori e a condizioni più vantaggiose rispetto a quelle dei prestiti bancari, capitali da investire. Il vantaggio per la società emittente deriva da tassi di interesse solitamente inferiori rispetto a quelli che sarebbe costretta a pagare rivolgendosi ad un finanziamento bancario di eguale scadenza, mentre l'investitore beneficia di un tasso maggiore rispetto a quello di un investimento in liquidità e ha la possibilità di smobilizzare il proprio investimento sul mercato secondario.
Il detentore di titoli di debito di una società, pur assumendosi il rischio d'impresa a differenza dell'azionista, non partecipa all'attività gestionale dell'emittente, non avendo diritto di voto nelle assemblee. In compenso, tuttavia, la remunerazione del capitale di rischio azionario è subordinata al preventivo pagamento di interessi e rimborsi agli obbligazionisti.
Esistono, tuttavia, delle obbligazioni (obbligazioni convertibili) che possono essere convertite in azioni della società emittente, o di una società appartenente allo stesso gruppo. A seguito della conversione si cessa di essere obbligazionista diventando azionista ed acquistando, quindi, tutti i diritti relativi.
La cedola è l'interesse pagato durante la vita del titolo: può avere periodicità trimestrale, semestrale, o annuale. L'interesse può essere fisso (stabilito a priori) o variabile (solitamente indicizzato al Libor o all'Euribor maggiorato di uno spread o ad altri tassi ufficiali e di norma aggiustato semestralmente). Spesso, per incentivare la sottoscrizione, l'emissione avviene sotto la pari, cioè il valore nominale (ovverosia il valore che verrà rimborsato a scadenza) è maggiore rispetto al prezzo di sottoscrizione (che è quello che si paga per acquistare il titolo): in questo modo aumenta il rendimento.
I titoli detti "zero coupon", invece, non pagano interessi sotto forma di cedole durante la loro vita ed il rendimento è dato unicamente dalla differenza tra il valore nominale ed il prezzo di sottoscrizione. Molto più raramente le obbligazioni vengono prezzate alla pari (valore di emissione e valore nominale uguali) o sopra la pari (valore nominale minore del prezzo di emissione). Per garantire i sottoscrittori dal rischio di insolvenza dell'emittente, la legge prevede che le obbligazioni non possano essere emesse per un importo superiore al capitale sociale della società emittente, versato ed esistente secondo l'ultimo bilancio approvato; si può derogare a questo principio generale solamente se l'emissione è accompagnata da garanzie reali.

STOCK SPLIT

Lo Stock Split è un frazionamento azionario che non comporta alterazioni nella capitalizzazione di Borsa di una società e quindi nel suo valore sul mercato. Quello che varia in presenza di uno stock split è invece il numero delle azioni disponibili sul mercato e il loro valore unitario.
Se, per esempio, una società ha un capitale di Borsa suddiviso in un milione di azioni del valore di 100 euro ciascuna, la sua capitalizzazione sarà pari a 100 milioni di euro. Supponiamo che il management decida un frazionamento di 10 per 1 del capitale azionario, si avrà di conseguenza che i titoli varranno un decimo del proprio valore originale e dunque 10 euro ciascuno. Il numero delle azioni, al contrario, si moltiplicherà per 10 volte e quindi sul mercato ci saranno 10 milioni di azioni. Questo valore, moltiplicato per quello delle nuove azioni, restituisce comunque la capitalizzazione originale di 100 milioni di euro. Il singolo azionista che avesse inizialmente 10 azioni del valore di 100 euro ciascuna, se ne troverà (gratuitamente) in portafoglio 100 del valore di 10 euro ciascuna.

Questo genere di operazioni sono in genere promosse per favorire una maggiore liquidità dei titoli e renderli quindi appetibili a una più ampia platea di investitori. Non a caso, infatti, lo stock split viene spesso promosso dopo forti rialzi di un’azione, quando il valore del singolo titolo sale notevolmente rendendo più oneroso l’investimento nel singolo titolo.
Esiste anche il caso opposto, il cosiddetto reverse stock split, un’aggregazione azionaria che genera invece titoli di maggiore valore. La situazione è in questo caso speculare. Supponiamo che una società abbia un capitale di quattro milioni di euro suddiviso in 20 milioni di titoli del valore di 0,20 euro. Un reverse stock split 1 per 10 aggregherà le azioni in pacchetti da dieci titoli. Ciascuna nuova azione avrà dunque un valore di 2 euro e il numero complessivo delle azioni sarà ridotto a 2 milioni di titoli per una capitalizzazione complessiva ancora invariata a 4 milioni di euro. Il singolo azionista che inizialmente avesse avuto 10 azioni del valore di 0,2 euro ciascuna, se ne troverà in portafoglio una del valore di 2 euro, per un investimento complessivo ancora invariato a 2 euro. Questo genere di operazioni avviene, come prevedibile, quando un titolo si deprezza eccessivamente.

Strategie di trading:


1) ARBITRAGGIO

Con il termine arbitraggio si indica un'operazione che consente di ottenere un profitto certo senza che il soggetto che la pone in essere corra alcun rischio. 
Solitamente l'arbitraggio consiste nell'acquisto/vendita di un bene o di un'attività finanziaria e in una contemporanea operazione di segno opposto sullo stesso strumento negoziato su un mercato diverso dal precedente, oppure su uno strumento diverso, ma avente le stesse caratteristiche del primo in termini di payout. Si sfruttano in questo modo le differenze di prezzo al fine di ottenere un profitto. L'operazione è ovviamente possibile se il guadagno che si ottiene supera i costi per il trasferimento del bene da un mercato all'altro.
Esiste l’opportunità di effettuare operazioni di arbitraggio ogni volta che una stessa attività è contrattata su due mercati diversi a prezzi diversi o, nel caso in cui due attività siano perfettamente sostituibili tra loro, con identico payout.
L'aumento di rapidità di comunicazione fra un mercato e l'altro (frutto della interconnessione dei mercati) ha limitato drasticamente le asimmetrie informative e, di conseguenza, le possibilità di arbitraggio. Quest'ultimo infatti risulta oggi meno frequente che in passato.

Affinchè l'operazione possa realizzarsi è necessario che gli strumenti finanziari oggetto di arbitraggio siano perfettamente sostituibili. Questi devono essere strumenti identici ma scambiati su mercati diversi oppure strumenti diversi ma aventi lo stesso payout (ad es. un paniere di titoli azionari ed il future avente lo stesso paniere come sottostante) o ancora strumenti che possono essere replicati sinteticamente (triangolazioni sul mercato valutario).

2) BASIS TRADING

Essa è una strategia di arbitraggio che consiste nell'acquisto e nella contemporanea vendita di strumenti finanziari simili. Di frequente impiego nel mercato futures con riferimento al quale consiste nella vendita (acquisto) di un contratto futures e nell'acquisto (vendita) dell'attività (o del paniere di attività) sottostante il futures. Strategia di arbitraggio comprensiva di una posizione corta in future e della corrispettiva posizione lunga in cash, caratterizzata da un costo complessivo – dato dalla somma del prezzo della posizione cash e dal cost of carry della posizione in future – inferiore al prezzo del future. Il basis trading è effettuato quando l'investitore ritiene che i due strumenti non siano correttamente prezzati in termini relativi (cioè l'uno rispetto all'altro). La strategia è profittevole se il prezzo di acquisto (vendita) dell'attività sottostante e il costo del suo finanziamento fino alla scadenza sono inferiori (superiori) rispetto al prezzo del futures.


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#: