Presentazione

290 views
241 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
290
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Presentazione

  1. 1. Roma MartinaProf. Gastaldi Tommaso
  2. 2. IN GENERALEIn informatica e matematica, il termine algoritmo indica un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile mediante un algoritmo si dice computabile.LA STORIAIl termine "algoritmo" deriva dalla trascrizione latina del nome del matematico persiano Al-Khwarizmi, che è considerato uno dei primi autori ad aver fatto riferimento a questo concetto.DEFINIZIONEEsistono diverse ed innumerevoli definizioni di algoritmo, ognuna delle quali fa riferimento a svariati campi, ne riportiamo una su tutte: "Un algoritmo è un insieme ordinato di passi eseguibili e non ambigui, il cui unico scopo è la risoluzione di problemi tra loro simili e il cui processo (di risoluzione) deve essere temporalmente limitato".
  3. 3. In senso più ampio lalgoritmo è: Un metodo per risolvere un insieme di problemi tra loro simili (non necessariamente uguali), dove per problema si intende la definizione di una situazione problematica che può variare dall’usuale problema di matematica, all’obiettivo da raggiungere in un qualsiasi gioco, allo scopo che ci si propone in un qualsiasi lavoro (basti pensare agli algoritmi di decrittografia che venivano usati nella Seconda Guerra Mondiale per intercettare i movimenti nemici). Un’insieme ordinato di passi eseguibili e non ambigui, dove per passi intendiamo anche le istruzioni. Pensiamo, per esempio, al gioco degli scacchi presente nelle settimane enigmistiche quando si chiede di vincere in un certo numero di mosse. Un processo che deve avere comunque un limite temporale (cioè deve “produrre” una soluzione in un tempo finito). Non consideriamo algoritmo un insieme di istruzioni che fanno riferimento a cicli infiniti. Così diciamo con assoluta certezza che un’istruzione del tipo “gira su te stesso” non potrà mai costituire un algoritmo se non verrà specificato con precisione un termine, per esempio “gira su te stesso per tre volte”. L’algoritmo non è un programma: mentre un algoritmo è il procedimento da seguire per risolvere un problema a prescindere dal linguaggio utilizzato, un programma consiste nella descrizione di un algoritmo in uno specifico linguaggio di programmazione (l’algoritmo in questa punto è inteso come“oggetto” esclusivamente informatico).
  4. 4. ALCUNE PROPRIETA FONDAMENTALI DEGLI ALGORITMIi passi costituenti devono essere "elementari", ovvero non ulteriormente scomponibili (atomicità); i passi costituenti devono essere interpretabili in modo univoco dallesecutore, sia esso umano o artificiale (non ambiguità); lalgoritmo deve essere composto da un numero finito di passi e richiedere una quantità finita di dati in ingresso (finitezza) lesecuzione deve avere termine dopo un tempo finito (terminazione); lesecuzione deve portare ad un risultato univoco (effettività); ad ogni un passo, il successivo deve essere uno ed uno solo, ben determinato (determinismo).
  5. 5. ESEMPIOIl calcolo delle radici di una equazione di secondo grado: ax2 + bx + c = 0 Si generano una sequenza di passi che possano portare alla soluzione del problema. Si calcola il delta dell’equazione e si distinguono i tre casi; Caso delta negativo: esistono due soluzioni complesse coniugate; Caso delta nullo: esiste una soluzione doppia pari a –b/2a; Caso delta positivo: si calcolano le due soluzioni secondo la formula nota; Si ottengono x1 e x2.Questo è un semplicissimo algoritmo matematico.!!!ATTENZIONE!!!Molto spesso si considera l’algoritmo come un qualcosa da legare esclusivamente all’utilizzo del computer per cui risulta difficile riconoscerlo nelle sue più svariate forme ed applicazioni
  6. 6. APPROCCIO INFORMATICOSe per ottenere un certo risultato (risolvere un certo problema) esiste un procedimento infallibile, che può essere descritto in modo non ambiguo fino ai dettagli, e conduce sempre allobiettivo desiderato in un tempo finito, allora esistono le condizioni per affidare questo compito a un computer, semplicemente descrivendo lalgoritmo in questione in un programma scritto in un opportuno linguaggio comprensibile alla macchina.
  7. 7. La complessità Con complessità di un algoritmo o efficienza di un algoritmo ci si riferisce alle risorse di calcolo da esso richieste.Per complessità si intende una funzione che associa il numero di dati da trattare al numero di operazioni da eseguire per trattare i suddetti dati. Il simbolo utilizzato è una o minuscola "o" seguito da una parentesi dove è indicata la complessità come una funzione che dipende da N, dove N è il numero che rappresenta i dati in ingresso.Quindi o(N) rappresenta un algoritmo la cui funzione che cresce il modo lineare (cresce come una retta).Così o(N2) rappresenta un algoritmo la cui funzione complessità cresce come un quadrato quindi un raddoppio dei dati in ingresso provoca una quadruplicazione delle operazioni da eseguire.La complessità di molti algoritmi è pesantemente influenzata dai dati in ingresso. In questo caso quando si calcola la complessità si considera il caso ottimo, il caso pessimo e il caso medio.Il caso ottimo è il caso in cui i dati sono i migliori dati possibili per lalgoritmo, cioè quelli che richiedono meno elaborazioni per essere trattati.Il caso pessimo invece prevede i dati più sfavorevoli per lalgoritmo.Il caso medio è il caso più utile da analizzare perché fornisce un reale indicatore della complessità dellalgoritmo ma tendenzialmente è anche quello più complesso da analizzare dato che spesso è difficile determinare quali sono i dati medi. A volte per risolvere il problema del caso medio si preferisce eseguire molte simulazioni dellalgoritmo e poi dai tempi ottenuti con le simulazioni estrarre una formula che approssimi adeguatamente landamento medio.
  8. 8. Lo pseudo-codiceIn informatica per pseudocodice, pseudolinguaggio o linguaggio di progetto si intende un linguaggio di programmazione fittizio, non direttamente compilabile o interpretabile da un programma compilatore o interprete, il cui scopo è quello di rappresentare algoritmi. Lo pseudolinguaggio può essere utilizzato alternativamente al diagramma di flusso e non è soggetto a molte limitazioni intrinseche di questultimo tipo di rappresentazione.Non esiste uno pseudolinguaggio standard e convenzionalmente usato: gli autori di libri o corsi di programmazione definiscono spesso un proprio pseudolinguaggio, utilizzato nelle loro pubblicazioni; inoltre ciascun programmatore può essere portato ad utilizzare una propria variante. Ogni pseudolinguaggio ha un proprio lessico, una propria sintassi e una propria semantica, ma la progettazione di questo tipo di formalismo è volta alla comprensibilità e alla leggibilità del codice; la sintassi sarà quindi meno rigorosa rispetto ad un vero linguaggio e le parole chiave saranno evocative, in modo da rendere più intuitiva la sua interpretazione.Lo pseudolinguaggio è strettamente dipendente dal paradigma di programmazione scelto per risolvere un problema, mentre dovrebbe essere pressoché indipendente dal linguaggio di programmazione, purché questultimo rispetti naturalmente il paradigma scelto. Tuttavia, ciascun linguaggio di programmazione possiede istruzioni e/o caratteristiche proprie, che potrebbero essere sfruttate per una migliore implementazione dellalgoritmo, ad esempio più efficiente.Spesso si usano le caratteristiche del Pascal come base per definire uno pseudolinguaggio.
  9. 9. La deviazione standard è un indice statistico che consente di misurare la dispersione delle singole osservazioni intorno alla media aritmetica. Tale indicatore si calcola applicando la seguente formula: "xi" è il singolo valore che assume il fenomeno da valutare; "n" il numero dei dati della serie storica. "x barrato" rappresenta la media aritmetica dei valori.Esempio: un semplice algoritmo per calcolare lo scarto quadratico medio.
  10. 10. La conseguenza più grave della rappresentazione con precisione finita dei numeri reali è senza dubbio ilfenomeno della cancellazione numerica, ovvero la perdita di cifre significative dovuta ad operazioni di sottrazione quando il risultato è più piccolo di ciascuno dei due operandi; questo fenomeno si verifica quando i dueoperandi sono “quasi uguali” ed è anche conosciuto come Catastrophical cancellation.
  11. 11. ESEMPIO:Abbiamo i seguenti due numeri reali: p1=0.12345789 p2=0.12345666Supponiamo che larchitettura del calcolatore ci permetta di memorizzare solo le prime 6 cifre dopo la virgola, quindi i due numeri per essere rappresentati allinterno del calcolatore, verrebbero troncati (supponiamo per semplicità mediante chopping) appena dopo la sesta cifra: p1=0.123457 p2=0.123456Effettuando la sottrazione e riscrivendo il risultato nella notazione floating point, si ha: d=p1-p2=0.000001=1*10^-6Mentre il risultato reale è pari a: 0.00000123.
  12. 12. In statistica, una serie storica (o temporale) si definisce come un insieme di variabili casuali ordinate rispetto al tempo, ed esprime la dinamica di un certo fenomeno nel tempo. Le serie storiche vengono studiate sia per interpretare un fenomeno, individuando componenti di trend, di ciclicità, di stagionalità e/o di accidentalità, sia per prevedere il suo andamento futuro.In generale, per serie si intende la classificazione di diverse osservazioni di un fenomeno rispetto ad un carattere qualitativo. Se tale carattere è il tempo, la serie viene detta storica o temporale.Il fenomeno osservato, detto variabile, può essere osservato in dati istanti di tempo (variabile di stato: numero dei dipendenti di unazienda, quotazione di chiusura di un titolo negoziato in borsa, livello di un tasso di interesse ecc.) o alla fine di periodi di lunghezza definita (variabili di flusso: vendite annuali di unazienda, PIL trimestrale ecc.).Indicando con Y il fenomeno, si indica con Yt unosservazione al tempo t, potendo t variare da 1 a T, dove T è il numero complessivo degli intervalli o dei periodi temporali considerati.In generale una serie storica è così definita yt={y1,y2,y3,....,yT};la serie storica avrà dimensione T.
  13. 13. AZIONI, CIOE PEZZI D’IMPRESA Che Cosa sono le azioni o Titoli Azionari? Cosa sono e come funzionano questi valori che ci consentono di guadagnare denaro investendo sui prodotti più vari, magari proprio su quelli che consumiamo e usiamo tutti i giorni, dal dentifricio allautomobile? Un titolo azionario altro non è che un certificato che fa diventare il suo possessore socio di una determinata società. Le azioni, che rappresentano una parte del capitale sociale di unimpresa, danno al titolare una serie di diritti: diritto alla partecipazione agli utili (dividendo), diritto di partecipare agli aumenti di capitale sottoscrivendo nuove azioni o di acquistare obbligazioni convertibili di nuova emissione, diritto di partecipare allassemblea degli azionisti esercitando il diritto di voto che è proporzionale al numero di azioni possedute. Il Trading per eccellenza si effettua sui titoli azionari. Del resto possono dare ottime soddisfazioni così come grandi delusioni. Ma forse sta proprio in questo il fascino che cattura tantissimi investitori e ormai in larga parte anche piccoli investitori. Soprattutto con i titoli azionari viene fuori lemotività degli investitori e del mercato stesso. Per questo risulta importante identificare quei titoli che danno maggiori chance di profitto. Non si direbbe ma ogni titolo ha un suo "stile" di movimento caratteristico, quindi riuscire ad identificarlo ci permette di scegliere i migliori di ogni paniere, sui quali operare. Non devo operare su di un titolo perché mi piace la società che ci sta dietro o perché me lo hanno consigliato. Naturalmente questo criterio è perseguibile solo se si hanno a disposizione le serie storiche dei titoli o dei grafici di almeno un paio di anni.
  14. 14. Con VB.NET per generare numeri pseudo-casuali si utilizza la classe Random, che produce una sequenza di numeri che soddisfano determinati requisiti statistici di casualità. Utilizzare un calcolatore, che è un oggetto puramente deterministico e quindi prevedibile, per generare un numero casuale e quindi imprevedibile sembra essere problematico. In effetti nessun calcolatore è in grado di generare numeri puramente casuali, ma solo numeri pseudo – casuali ossia numeri generati da algoritmi numerici deterministici in grado di superare una serie di test statistici che conferiscono a tali numeri un’apparente casualità. L’algoritmo restituisce una sequenza di valori che dipendono da un numero specificato, detto seme della sequenza, caricato nel generatore stesso. Il seme viene poi trasformato per ottenere il primo valore della sequenza, e applicando la stessa trasformazione si ottiene il valore successivo della sequenza, e così via.
  15. 15. Se lo stesso valore di inizializzazione è utilizzato ripetutamente, viene generata la stessa serie di numeri, perché anche le operazioni matematiche sono uguali. Un modo per produrre sequenze diverse consiste nel rendere il valore di inizializzazione dipendente da un fattore temporale, producendo così una diversa serie a ogni nuova istanza di Random. Per impostazione predefinita, il costruttore senza parametri della classe Random utilizza il clock di sistema (ossia l’ora corrente del giorno) per generare il valore di inizializzazione, ma è possibile passare un valore di base come argomento inserendolo tra parentesi dopo New Random. È meglio utilizzare l’ora corrente come valore di base, perché è molto probabile che cambi l’istante di tempo ogni volta che creiamo un oggetto Random.Tuttavia, poiché il clock ha una risoluzione limitata, l’utilizzo del costruttore senza parametri per creare oggetti Random diversi in stretta successione dà origine a generatori di numeri casuali che producono sequenze identiche di numeri casuali. Questo problema può essere evitato creando un unico oggetto Random che generi molti numeri casuali nel tempo, anziché creare ripetutamente nuovi oggetti Random che generino un solo numero casuale.Si possono generare numeri pseudo – casuali aventi diverse distribuzioni (ossia ogni numero ha una determinata probabilità di cadere in un dato intervallo). Ad esempio si possono generare numeri distribuiti in modo uniforme se in tale distribuzione ogni numero in un dato intervallo ha la stessa probabilità di essere selezionato.
  16. 16. PROGRAMMAZIONEGenerare una sequenza di numeri casuali per i prezzi bid e ask al variare del tempo. Il risultato, cioè la serie storica, viene mostrato da un grafico: Link: www.box.com/s/s8rierzv101n6ja40a7f
  17. 17. Le medie mobili (moving average) sono uno strumento per depurare i prezzi dagli elementi erratici (rumore di fondo). Stimano il ciclo trend attraverso trasformazioni (filtri) lineari della serie, che hanno lo scopo di annullare l’effetto delle altre componenti per evidenziare il trend.dove: m1 è il numero dei periodi precedenti t; m2 è il numero dei periodi successivi a t; θi è un peso attribuito agli m1 + m2 + 1 termini della somma; k = m1 + m2 + 1 è il periodo o lordine della media mobile.Una media mobile viene detta: semplice se i pesi θi sono tutti uguali a 1 / k (in tal caso, si tratta di una normale media aritmetica); centrata se m1 = m2; simmetrica se centrata e se θi − m = θi + m per ogni compreso tra 1 e m1 = m2.Quanti più elementi sono presenti nella serie storica alla quale la Media Mobile è applicata, tanto meno reattiva sarà la media (ad esempio una media mobile a 20 periodi è più reattiva di una media mobile a 60 periodi). Uno strategia molto utilizzata è il crossover tra due medie mobili (crossover doppio) o tra tre medie mobili (crossover triplo).
  18. 18. Nel caso del crossover tra due medie mobili:Il segnale di acquisto (B=buy) si ha quando la media mobile più veloce incrocia al rialzo la media mobile più lenta.Il segnale di vendita (S=sell) si ha quando la media mobile più veloce incrocia al ribasso la media mobile più lenta.La media mobile è, quindi, un indicatore usato molto spesso in analisi tecnica per mostrare il valore medio di un prezzo in un certo periodo di tempo.La media mobile dei valori è utile dal punto di vista grafico per mettere in rilievo la direzione di un trend, attenuando le fluttuazioni del prezzo che possono confondere il trader nellinterpretazione del grafico.Il termine media mobile deriva dal fatto che il numero di osservazioni rimane costante nel tempo e che laggiornamento del valore della media avviene alimentando lalgoritmo con lintroduzione del dato più recente con leliminazione del valore più vecchio che rientrava nel calcolo relativo al giorno precedente, in caso di rilevazioni giornaliere. Le medie mobili si suddividono in medie mobili semplici e medie mobili ponderate. Le medie mobili semplici si costruiscono sommando i dati di chiusura per un periodo variabile a propria scelta, si divide il risultato ottenuto per il numero di giorni considerati. Le medie mobili ponderate si calcolano assegnando un peso maggiore ai dati più recenti con una ponderazione aritmetica.
  19. 19. La formula generale per la compilazione della media mobile è la seguente: Mt = (Pt + Pt-1 + Pt-2 + .....+ Pt-n+1) / n Mt = valore della media mobile al tempo t. P = prezzo o valore dellindice di riferimento. n = numero delle osservazioni (ampiezza della media mobile).La formula per procedere allaggiornamento è la seguente: Mt+1 = Mt + ((Pt+1 - Pt-n+1) / n) Mt+1 = Valore della media mobile dellultimo giorno.Questo tipo di funzione tende a smorzare l erraticità dei prezzi e questo effetto è tanto più evidente quanto maggiore è la media mobile. La sua rappresentazione grafica è una curva che segue la linea dei prezzi con un andamento più regolare eliminando i "rumori" .Uno tra i principali obiettivi che ci si pone con lutilizzazione di questo algoritmo è proprio quello di eliminare gli elementi casuali che entrano nella formazione del prezzo, provocando delle esasperazioni nei movimenti.
  20. 20. Media mobile semplice:Questa media mobile è calcolata sommando un determinato numero di prezzi di chiusura recenti e dividendo il totale per il numero di selezioni effettuate. Per chiarire meglio, sommando gli ultimi 20 prezzi di chiusura di un titolo e dividendo il totale per 20, si otterrà la media mobile a 20 giorni. Su un grafico, questo calcolo è eseguito per ciascun periodo indicato sullo stesso.Media mobile esponenziale:Una media mobile esponenziale differisce da quella "semplice" in quanto attribuisce maggior peso ai dati più recenti.Sono disponibili sei differenti periodi per entrambe le tipologia di media mobile (a 5, 10, 20, 50, 100 e 200 giorni).Come sappiamo esistono grosso modo tre tipi di medie mobili: aritmetica, ponderata ed esponenziale. La media più usata in assoluto rimane sempre la media aritmetica, anche se l’esponenziale sta prendendo sempre più piede, tanto che anche nella costruzione dei più comuni oscillatori la media che ha dato i migliori risultati operativi è quella esponenziale, infatti in ambito algoritmico è sempre la più utilizzata.Spesso comunque, indipendentemente dal tipo le medie mobili possono dare dei falsi segnali operativi. Ma esiste un sistema per rendere la media mobile, non infallibile, ma quasi. Si tratta di accostare alla media mobile lo studio dei cicli. Usando una media a medio termine è possibile catturare il ciclo semestrale. Infatti la media, osservandola a lungo periodo, si muoverà ciclicamente non per forza con la stessa ampiezza ed estensione, ma comunque con la stessa forma. Usando una media a breve è possibile invece tracciare dei cicli trimestrali. Questi “mini-cilci”si trovano all’interno dei cicli a 6 mesi e sono complementari ad esso, nel senso che un ciclo di 6 mesi ne contiene al suo interno due a 3 mesi. Perciò si usano le medie mobili in primo luogo per bloccare le fluttuazioni di prezzo ed osservare chiaramente i cicli che si susseguono.
  21. 21. Le medie mobili possono essere utilizzate per costruire dei canali, noti come bande di Bollinger o canali di medie mobili, che racchiudono le oscillazioni dei prezzi. Le bande di Bollinger rappresentano un indicatore tecnico che appartiene alla famiglia degli indicatori di volatilità. Unampiezza maggiore delle bande di Bollinger è determinata da unelevata volatilità dei prezzi, al contrario una minore ampiezza delle bande di Bollinger è determinata da una volatilità dei prezzi in diminuzione.Le bande di Bollinger sono composte da curve ottenute esclusivamente con la serie storica dei prezzi di un titolo: Media Mobile Lineare a N giorni (la linea centrale) La Media Mobile a cui si somma 2 volte la deviazione standard (banda superiore) La Media Mobile a cui si sottrae 2 volte la deviazione standard (banda inferiore)Sovrapponendo la curva dei prezzi del titolo a queste tre linee si ottiene una figura funzione del tempo in cui i valori del titolo sono generalmente compresi fra la banda superiore e quella inferiore, con casi di trapasso della banda superiore o inferiore.
  22. 22. Dal punto di vista operativo alcune regole stabiliscono che: se le bande di Bollinger si restringono ("strozzatura") è probabile che a breve ci possa essere una forte esplosione di volatilità se il prezzo oltrepassa una banda di Bollinger è probabile che la tendenza continui se il prezzo oltrepassa una banda di Bollinger e si forma una figura di inversione allora è probabile aspettarsi uninversione di tendenzaLe formule che definiscono le bande di Bollinger sono funzione di 3 parametri: Il parametro della Medie Mobile, ossia il numero di osservazioni prese in considerazione. Solitamente si usa una media mobile semplice a 20 gg, come suggerito dallo stesso Bollinger. Il moltiplicatore della deviazione standard applicata alla serie storiche dei prezzi, solitamente 2 o 3. La definizione di serie storiche dei prezzi. Solitamente si usano i prezzi di chiusura del titolo, ma è possibile utilizzare altri valori che possano essere maggiormente esplicativi del valore del titolo per una data osservazione. In tal senso si può far riferimento ad valori tipici della sessione i-esima, dunque alla media sui prezzi di apertura e chiusura , oppure utilizzando la media del range coperto durante la sessione (massimo e minimo) , od ancora una media fra i prezzi di apertura/chiusura/minimo/massimo.
  23. 23. Per quanto visto sopra le Bande di Bollinger possono essere utilizzate per misurare: la volatilità il trendLa misura della volatilità è un elemento molto importante sia per valutare il rischio di investimento sia per riconoscere fasi potenziali di accumulazione/distribuzione del titolo o meglio di trend/congestione dei prezzi.In questo senso il segnale operativo di sell/buy deve essere offerto da altri indicatori o metodologie di trading, dato che queste misure di volatilità non possono offrire nessun segnale operativo.
  24. 24. Alla base di ogni linguaggio di programmazione orientato agli oggetti c’è il concetto di classe. Le classi di VB .NET mantengono tutte le caratteristiche dei moduli di classe, ma ne aggiungono numerose altre. In prima approssimazione, una classe è una collezione di variabili, metodi e proprietà; è possibile creare una classe usando il costrutto Class:Class esempio variabili Dim Nome As String Public Sub MostraNome() ....... End SubEnd ClassUna classe è anche un tipo, quindi può essere assegnata ad una variabile.
  25. 25. I costruttori sono metodi che vengono automaticamente richiamati quando si crea un’istanza della classe stessa; servono a creare un oggetto, unistanza materiale della classe. Ogni costruttore, poichè ce ne può essere anche più di uno, è sempre dichiarato usando la keyword New e non può essere altrimenti. Una delle caratteristiche più importanti del costruttore è che esso consente di specificare le proprietà iniziali della classe. Si possono passare parametri al costruttore allo stesso modo di come si passano alle normali procedure o funzioni, specificandoli tra parentesi. Il codice scritto nel costruttore viene eseguito prima di ogni altro metodo nella classe, perciò può anche modificare le variabili read-only (in sola lettura). Anche i moduli possono avere un costruttore e questo viene eseguito prima della procedura Main. Una cosa da tenere bene a mente è che, nonostante New sia eseguito prima di ogni altra istruzione, sia le costanti sia i campi con inizializzatore (ad esempio Dim I As Int32 = 50) sono già stati inizializzati e contengono già il loro valore.Ricordiamo che il costruttore è una particolare Sub, il cui nome deve obbligatoriamente essere New.Creiamo un costruttore per la classe esempio:Class esempio Dim Nome As String variabili Sub New(ByVal strNome As String) Imposta le proprietà iniziali Nome = strNome End Sub Public Sub VisualizzaNome() … End SubEnd ClassCome possiamo vedere, la routine New prende come argomento la variabile strNome e la assegna alla sua variabile interna Nome.
  26. 26. Scopo delle InterfacceLe interfacce sono unentità davvero singolare allinterno del .NET Framework. La loro funzione è assimilabile a quella delle classi astratte, ma il modo con cui esse la svolgono è molto diverso.Il principale scopo di uninterfaccia è definire lo scheletro di una classe; potrebbe essere scherzosamente assimilata alla ricetta con cui si prepara un dolce. Quello che linterfaccia X fa, ad esempio, consiste nel dire che per costruire una classe Y che rispetti "la ricetta" descritta in X servono una proprietà Id di tipo Integer, una funzione GetSomething senza parametri che restituisce una stringa e una procedura DoSomething con un singolo parametro Double. Tutte le classi che avranno intenzione di seguire i precetti di X (in gergo implementare X) dovranno definire, allo stesso modo, quella proprietà di quel tipo e quei metodi con quelle specifiche signature (il nome ha importanza relativa).
  27. 27. Dichiarazione e implementazioneLa sintassi usata per dichiarare uninterfaccia è la seguente:Interface [nome] membri’End InterfaceI membri delle interfacce, tuttavia, sono un po diversi dai membri di una classe, e nello scriverli bisogna rispettare queste regole: Nel caso di metodi, proprietà od eventi, il corpo non va specificato; Non si possono mai usare gli specificatori di accesso; Si possono comunque usare dei modificatori come Shared, ReadOnly e WriteOnly.Il primo ed il secondo punto saranno ben compresi se ci si sofferma a pensare che linterfaccia ha il solo scopo di definire quali membri una classe debba implementare: per questo motivo, non se ne può scrivere il corpo, dato che spetta espressamente alle classi implementanti, e non ci si preoccupa dello specificatore di accesso, dato che si sta specificando solo il "cosa" e non il "come".Ora che sappiamo come dichiarare uninterfaccia, dobbiamo scoprire come usarla. Per implementare uninterfaccia in una classe, si usa questa sintassi:Class Esempio Implements (Nome Interfaccia) [Membro] Implements [Nome Interfaccia].[Membro]End Class
  28. 28. Definizione di tipi in uninterfacciaCosì come è possibile dichiarare una nuova classe allinterno di unaltra, o una struttura in una classe, o uninterfaccia in una classe, o una struttura in una struttura, o tutte le altre possibili combinazioni, è anche possibile dichiarare un nuovo tipo in uninterfaccia. In questo caso, solo le classi che implementeranno quellinterfaccia saranno in grado di usare quel tipo.Perchè preferire uninterfaccia a una classe astrattaCi sono casi e casi. In genere, uninterfaccia va preferita quando si dovranno abbracciare grandi quantità di classi diverse: con grandi mi riferisco a numeri abbastanza grandi da rendere difficile luso di una sola classe astratta. È bene usare le interfacce anche quando si progetta di usarne più di una: una classe, infatti, può implementare quante interfacce vuole, ma può ereditare da una sola classe base. Proprio per questi motivi, è ideale usare uninterfaccia quando si vuole delineare una caratteristica o un particolare comportamento che può essere comune a più tipi, mentre è meglio puntare a una classe astratta quando si vuole sottolineare lappartenenza di molti tipi ad un unico archetipo base.
  29. 29. Andiamo ad analizzare due interfacce: IComparer e IComparable.Queste interfacce sono spesso utilizzate insieme e anche se le interfacce sono simili e hanno nomi simili, gli scopi che essi servono sono leggermente diversi.In generale, se si dispone di una matrice di tipi (ad esempio la stringa o i tipi integer ) che già supportano IComparer, è possibile ordinare la matrice senza fornire alcun riferimento esplicito a IComparer. In questo caso, gli elementi della matrice vengono proiettati per l’implementazione predefinita di IComparer(Comparer.Default) per l’utente.Tuttavia, se desidera eseguire lordinamento e per confrontare gli oggetti personalizzati, è necessario implementare una o entrambe queste interfacce.
  30. 30.  Un oggetto che implementa IComparable comunica implicitamente al .NET Framework che può essere confrontato con altri oggetti, stabilendo se uno di essi è maggiore, minore o uguale allaltro e abilitando in questo modo lordinamento automatico attraverso il metodo Sort di una collection. Infatti, tale metodo confronta uno ad uno ogni elemento di una collezione o di un array e tramite la funzione CompareTo che ogni interfaccia IComparable espone e li ordina in ordine crescente o decrescente. CompareTo è una funzione di istanza che implementa IComparable. CompareTo e ha dei risultati predefiniti: restituisce 1 se loggetto passato come parametro è minore delloggetto dalla quale viene richiamata; 0 se è uguale e -1 se è maggiore. IComparer rappresenta un oggetto che deve eseguire la comparazione tra due altri oggetti, facendo quindi da tramite nellordinamento. Dato che Sort accetta in una delle sue versioni un oggetto IComparer, è possibile ordinare una lista di elementi con qualsiasi criterio si voglia semplicemente cambiando il parametro.Usando questo meccanismo è possibile ordinare qualsiasi tipo di lista o collezione (tranne SortedList, che si ordina automaticamente), in modo semplice e veloce, particolarmente utile nellambito delle liste visuali a colonne.
  31. 31. OLE DB (Object Linking and Embedding, database), una API progettato da Microsoft, consente laccesso ai dati da una varietà di fonti in modo uniforme. LAPI fornisce un insieme di interfacce implementate utilizzando il Component Object Model (COM). Microsoft OLE DB originariamente inteso come un più alto livello di sostituzione, e successore, ODBC, estendendo il suo set di funzioni per supportare una più ampia fogli di calcolo che non necessariamente implementano SQL.METODOLOGIAOLE DB separa larchivio dati dal ricorso che deve accedere ad esso attraverso un insieme di astrazioni che includono il datasource, session, comando e set di righe. Questo è stato fatto perché diverse applicazioni hanno bisogno di accedere a diversi tipi e fonti di dati, e non necessariamente vogliono sapere come accedere alle funzionalità con la tecnologia metodi specifici.OLE DB è concettualmente diviso in consumatori e fornitori. I consumatori sono le applicazioni che richiedono laccesso ai dati, ed i fornitori sono i componenti software che implementano linterfaccia e quindi fornisce i dati al consumatore.
  32. 32. http://martinaroma.blogspot.it/p/esercizi.html
  33. 33. Generare una serie storica casuale dei prezzi per un strumento finanziario.Rappresentare la serie storica con: Linee delle medie mobili; Medie running; Bande di bollingerLINK: www.box.com/s/x0hgqvkszv6v2pjk1toa
  34. 34. Il risultato grafico finale ottenuto è il seguente: la nostra serie storica presentata in blu; le bande di bollinger in rosso; la media moving in verde e la media running in rosa.
  35. 35. 1 STEP Dopo aver inizializzate una serie di variabili; Inserisco una serie di comandi che mi consentono di resettare gli oggetti ogni volta che clicco sul bottone Serie Storica:Public Class Form1Private Sub Button1_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click Me.SS.Clear() Me.SSMoving.Clear() Me.SSRunning.Clear() Me.SSBandaBollingerInf.Clear() Me.SSBandaBollingerSup.Clear() Dim random As New Random Dim SS As New List(Of Osservazione)
  36. 36.  Creo un loop e al suo interno vengono definite:• la serie storica casuale (random) dei prezzi;• la media running;• e la media moving.• Vado a impostare l’arco temporale alla giornata odierna, definendo un cicloche termina quando finisce la giornata:Dim prezzoIniziale As Decimal = 500 Dim tick As Decimal = 1 Dim passoTempominuti As Integer = 5 Dim istanteCorrente = istanteIniziale Dim prezzoCorrente = prezzoIniziale Dim MediaRunning As Double• A seconda del valore casuale si sottrae o si aggiunge il tick: Do If random.NextDouble < 0.5 Then prezzoCorrente = prezzoCorrente - tick Else prezzoCorrente = prezzoCorrente + tick End If
  37. 37. •avanziamo il tempoistanteCorrente = istanteCorrente.AddMinutes(passoTempominuti)If istanteCorrente.Subtract(istanteIniziale).TotalDays > 1 Then Exit Do Dim osservazione As New osservazione osservazione.istante = istanteCorrente osservazione.Prezzo = prezzoCorrente osservazione.X =osservazione.Istante.Subtract(istanteIniziale).TotalMilliseconds osservazione.Y = osservazione.Prezzo
  38. 38. 2°STEP Vado a calcolare la media running:MediaRunning = (MediaRunning * SS.Count + prezzoCorrente) / (SS.Count + 1) Dim O_R As New Osservazione() O_R.Prezzo = MediaRunning O_R.Istante = osservazione.Istante O_R.X = osservazione.X O_R.Y = O_R.Prezzo SSRunning.Add(O_R) SS.Add(osservazione) Calcolo la media moving (utilizzando la condizione if che mi gestisce la possibile eccezione nel caso di NumericUpDown1=0, per il quale la media mobile non si potrebbe calcolare, imponendo, in tal caso, un NumericUpDown1=1 si va ad ovviare al problema). Dim NUP As Integer = NumericUpDown1.Value If (NumericUpDown1.Value = 0) Then NUP = 1 Else NUP = NumericUpDown1.Value End If Dim O_M As New Osservazione()
  39. 39. If SS.Count > NUP Then MediaMoving = MediaMoving + (SS(SS.Count - 1).Prezzo / NUP) -(SS(SS.Count - NUP - 1).Prezzo / NUP) O_M.Prezzo = MediaMoving O_M.Istante = osservazione.Istante O_M.X = osservazione.X O_M.Y = O_M.Prezzo SSMoving.Add(O_M) SS.Add(osservazione) Else O_M.Prezzo = MediaMoving O_M.Istante = osservazione.Istante O_M.X = osservazione.X O_M.Y = O_M.Prezzo SSMoving.Add(O_M) End If SS.Add(osservazione) Loop
  40. 40.  Calcoliamo le bande di bollinger (NUMERICUPDOWN2 * DEVSTD):Dim NUP2 As Integer = NumericUpDown2.Value If (NumericUpDown2.Value = 0) Then NUP = 1 Else NUP = NumericUpDown2.Value End If Dim i As Integer = 0 For i = i To SSMoving.Count - 1• Si calcola la deviazione standard della serie moving:Dim devstd As Double = Me.CalcoloDevStd(SSMoving, i) Dim b1 As New Osservazione Dim b2 As New Osservazione With b1 .Prezzo = SSMoving(i).Prezzo + NUP2 * devstd .Istante = SSMoving(i).Istante End With Me.SSBandaBollingerSup.Add(b1) With b2 .Prezzo = SSMoving(i).Prezzo - NUP2 * devstd .Istante = SSMoving(i).Istante End With Me.SSBandaBollingerInf.Add(b2) Next Funzione CalcolaDevStd
  41. 41. • calcolo coordinate reali della serie storica dei prezzi For Each osservazione As Osservazione In SS osservazione.Y = osservazione.Prezzo osservazione.X =osservazione.Istante.Subtract(istanteIniziale).TotalMilliseconds If MinX > osservazione.X Then MinX = osservazione.X If MaxX < osservazione.X Then MaxX = osservazione.X If MinY > osservazione.Prezzo Then MinY = osservazione.Prezzo If MaxY < osservazione.Prezzo Then MaxY = osservazione.Prezzo Application.DoEvents() Me.SS.Add(osservazione) Next si richiamano le su definite per la trasformsazione della serie e per il disegno Me.TrasfomaCoordInPnt() Me.DisegnaLeSerie() End Sub
  42. 42. 3 STEP Non resta che andare disegnare la nostra serie storica, le bande di bollinger e le medie. Per prima cosa abbiamo voluto riportare tutto in un rettangolo all’interno della pictureBox; abbiamo quindi calcolato le coordinate virtuali, trasferendo quelle originali in un rettangolo.TrasfomaCoordInPnt() PuntiSS = New List(Of Point) For Each osservazione As Osservazione In SS Dim Punto As New Point Punto.X = Rettangolo.Left + CInt(Rettangolo.Width * (osservazione.X -Me.MinX) / (Me.MaxX - Me.MinX)) Punto.Y = (Rettangolo.Top + CInt(Rettangolo.Height)) -(Rettangolo.Height * (osservazione.Y - Me.MinY) / (Me.MaxY - Me.MinY)) PuntiSS.Add(Punto) Next!!Abbiamo ripetuto il codice per i punti della serie storica running, moving e per lebande di bollinger
  43. 43. • Siamo quindi andati a scrivere i comandi per disegnare la serie, le medie e le bande, scegliendo i colori e il tipo di linee da utilizzare:Sub DisegnaLeSerie() bitmap = New Bitmap(Me.PictureBox1.Width, Me.PictureBox1.Height) grafico = Graphics.FromImage(bitmap) Dim PennaTratteggiata As Pen PennaTratteggiata = New Pen(Color.Orange, 1) PennaTratteggiata.DashStyle = Drawing2D.DashStyle.Dot grafico.Clear(Color.White) grafico.DrawRectangle(Pens.Black, Rettangolo) grafico.DrawLines(Pens.SkyBlue, PuntiSS.ToArray) grafico.DrawLines(Pens.YellowGreen, PuntiSSMoving.ToArray) grafico.DrawLines(Pens.Fuchsia, PuntiSSRunning.ToArray) grafico.DrawLines(PennaTratteggiata, PuntiSSBBSUP.ToArray) grafico.DrawLines(PennaTratteggiata, PuntiSSBBINF.ToArray)
  44. 44. • abbiamo inserito l’intestazione e la leggenda: Dim drawFont2 As New Font("Arial", 12, FontStyle.Bold) grafico.DrawString("SERIE STORICA", drawFont2, Brushes.Purple, 380, 10) Dim drawfont3 As New Font("arial", 8) grafico.FillRectangle(Brushes.SkyBlue, Me.PictureBox1.Width -605, Me.PictureBox1.Height - 88, 6, 6) grafico.DrawString("SerieStorica", drawfont3, Brushes.Gray, Me.PictureBox1.Width -600, Me.PictureBox1.Height - 92) grafico.FillRectangle(Brushes.YellowGreen, Me.PictureBox1.Width -605, Me.PictureBox1.Height - 72, 6, 6) grafico.DrawString("MediaMoving", drawfont3, Brushes.Gray, Me.PictureBox1.Width -600, Me.PictureBox1.Height - 75) grafico.FillRectangle(Brushes.Fuchsia, Me.PictureBox1.Width -605, Me.PictureBox1.Height - 55, 6, 6) grafico.DrawString("MediaRunning", drawfont3, Brushes.Gray, Me.PictureBox1.Width -600, Me.PictureBox1.Height - 58) grafico.FillRectangle(Brushes.Orange, Me.PictureBox1.Width -605, Me.PictureBox1.Height - 38, 6, 6) grafico.DrawString("BandeBollinger", drawfont3, Brushes.Gray, Me.PictureBox1.Width -600, Me.PictureBox1.Height - 41)
  45. 45. • abbiamo infine inserito dei comandi per poter muovere il rettangolo e ridimensionarlo a nostro piacimento all’interno della pictureBox. Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown If Me.SS Is Nothing Then Exit Sub Me.MouseTastoPremuto = True Me.XinizialeMOUSE = e.X Me.YinizialeMOUSE = e.Y Me.XinizialeRETT = Rettangolo.X Me.YinizialeRETT = Rettangolo.Y Me.WInizialeRETT = Rettangolo.Width Me.HInizialeRETT = Rettangolo.Height End Sub Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove If Me.grafico Is Nothing Then Exit Sub If Not Me.MouseTastoPremuto Then Exit Sub If e.Button = Windows.Forms.MouseButtons.Left Then Rettangolo.X = Me.XinizialeRETT + (e.X - Me.XinizialeMOUSE) Rettangolo.Y = Me.YinizialeRETT + (e.Y - Me.YinizialeMOUSE) Else Rettangolo.Width = Me.WInizialeRETT + (e.X - Me.XinizialeMOUSE) Rettangolo.Height = Me.HInizialeRETT + (e.X - Me.XinizialeMOUSE) End If Me.TrasfomaCoordInPnt() Me.DisegnaLeSerie() End Sub
  46. 46. Funzione utilizzata per calcolare la deviazione standardFunction CalcoloDevStd(ByVal serie As List(Of Osservazione), ByVal Posto AsInteger) If (NumericUpDown1.Value = 0) Then DistanzaDallaMedia = 1 Else Me.DistanzaDallaMedia = CInt(Me.NumericUpDown1.Value - 1) End If Dim somma As Double Dim count As Double Dim scarti As Double Dim scartiquadrati As Double Dim media As Double Dim var As Double Dim deviazionestandard As Double For i As Integer = i To serie.Count - 1 somma += serie(i).Prezzo count += 1 media = somma / count scarti = serie(i).Prezzo - media scartiquadrati = scarti ^ 2 var = scartiquadrati / count Next deviazionestandard = Math.Sqrt(var) Return deviazionestandard End Function

×