• Non ci sono risultati.

Scaricare e organizzare i dati storici dei titol

Grafico 11: Esempio di canale formato da trendline e returnline in trend rialzista, e esempio di trendlines rialzista e

3.1 Scaricare e organizzare i dati storici dei titol

Il primo passo per poi procedere alla “costruzione” dell’M-Oscillator con il software MATLAB è sicuramente il reperimento dei dati. Come più volte detto, quello di cui abbiamo bisogno sono i dati storici relativi ai prezzi di chiusura dei titoli o degli indici sui quali desideriamo testare l’oscillatore.

Fino ad un paio di anni fa MATLAB permetteva di acquisire i dati direttamente da Yahoo Finanza44 grazie al comando “fetch” e ad una connessione internet.

Oggi quel comando è disattivato, quindi, il metodo più semplice ed immediato è quello di andare su una piattaforma che mette a disposizione i dati storici di cui abbiamo bisogno, come Bloomberg45, Investing.com46 e appunto Yahoo Finanza,

e scaricarli manualmente.

Personalmente ho utilizzato per il mio lavoro i dati presi da Yahoo. Accedendo al sito, nel riquadro “cerca notizie, codici o aziende”, basta inserire il nome del titolo che vogliamo cercare, o il codice identificativo unico47, si aprirà la sezione relativa

al titolo, si dovrà andare sulla pagina dei “Dati Storici”, impostare il periodo che intendiamo analizzare e cliccare su “Applica”. Una volta applicati i parametri, potremo scaricare premendo su “Scaricare i dati” (esempio nella figura in pagina seguente).

Yahoo mette a disposizione i dati in formato .csv, formato che MATLAB riesce a riconoscere tanto che una volta caricati i dati, li impagina già sotto forma di tabella.

Questo passaggio si realizza direttamente su MATLAB, per farlo io apro un Live

Script, ovvero uno script che da la possibilità di eseguire in live il codice e quindi

di vedere i progressi del proprio lavoro. Il caricamento dei dati necessita

44 https://it.finance.yahoo.com

45 https://www.bloomberg.com/europe 46 https://it.investing.com

47 È un codice unico a livello mondiale che permette di cercare il titolo in maniera più rapida e precisa. Ad esempio il titolo “Fiat Chrysler Automobiles NV” quotato a Milano ha come codice identificativo “FCA.MI”.

innanzitutto che il documento, in formato .csv, sia presente nella cartella stessa, la current folder, dove sono presenti anche lo script, e nel nostro caso il live script, e le funzioni che dobbiamo utilizzare. A livello di codice invece per caricare i dati in una tabella su MATLAB il comando da utilizzare è “readtable”. questo comando permette di leggere una tabella in formato .csv.

Con questo comando MATLAB creerà la nostra tabella, ma allo stesso tempo ci darà un segnale di warning48. Questo perché Yahoo nomina le tabelle

preventivamente, e la penultima colonna dei dati scaricati per le quotazioni è la colonna delle c.d. “Adj Close”, e siccome MATLAB non accetta né spazzi né punteggiatura nei nomi delle tabelle allora darà un segnale di warning per avvisarci.

48 Questo segnale sta a significare che il software ha trovato imperfezioni nel codice tali da non impedire totalmente di essere eseguito ma da causare problemi.

Figure 4: In evidenza la schermata di Yahoo finanza con tutti i bottoni da premere come spiegato. Fonte:

Quello che invece può rappresentare effettivamente un problema è che in alcuni casi i dati di Yahoo non sono completi, e MATLAB nel caricarli legge e riporta queste mancanze come “null”, ovvero da un valore nullo alla casella di riferimento. Questo comporta che nel momento in cui la nostra funzione che utilizza i dati della tabella trova un valore “null”, si blocca non riuscendo ad interpretarlo e restituendoci un messaggio di “error”.

Per risolvere questo problema ci sono due strade, una manuale e una automatizzata.

La strada manuale consiste nell’aprire il file .csv dalla current folder cliccandoci sopra col tasto destro e scegliendo l’opzione “open as a text”. Dopodiché, una volta aperto, si dovra cliccare sul bottone “Find” e nella finestra che si aprirà dovremo scrivere, nella sezione “Find what:”, “null”, e nella sezione “Replace

with:” dovremo scrivere “NaN”. NaN sta per Not a Number ed è un modo per far

capire a MATLAB che in quella casella non è presente un valore numerico senza però far bloccare l’esecuzione del programma. Infine, si dovrà cliccare su “Replace All”.

La strada automatizzata invece è rappresentata da un codice che io stesso ho scritto perché semplicemente non volevo tutte le volte che acquisivo nuovi dati dover star a controllare la presenza o meno di valori “null” e nel caso sostituirli. In pratica questo codice, esamina tutte le colonne del titolo trovando i dati

mancanti e non sostituendoli come nel caso appena visto con “NaN”, ma sostituendoli con il valore della giornata precedente. Ho preso questa scelta perché non volevo saltare alcuna giornata di negoziazione, in modo da poter rispettare in pieno le condizioni basilare per la costruzione dell’M-Oscillator (ad es. il fatto che si debba considerare 14 giornate).

function [tit] = Checknan(table)

tit=readtable(table); if iscell(tit.Close) for i=1:length(tit.Close) tit.Close{i}=str2double(tit.Close{i}); end tit.Close = cell2mat(tit.Close); end if iscell(tit.Open) for i=1:length(tit.Open) tit.Open{i}=str2double(tit.Open{i}); end tit.Open = cell2mat(tit.Open); end

… … 49

Normalmente MATLAB scarica le date in formato numerico esponenziale, ma è comunque possibile cambiarle in un formato letterale utilizzando il comando “datetime(‘input data table’,’ConvertFrom’,’datenum’,’format’,’Formato data

desiderato’)”, che permette di esprimere le date nel formato selezionato.

3.2 Plottaggio

La fase di plottaggio50 è una parte fondamentale di questo elaborato, perché

ovviamente parlando di analisi tecnica tutto parte dallo studio dell’andamento dei prezzi che attraverso il plottaggio dei grafici è molto più rapido e intuitivo. MATLAB da la possibilità di creare qualsiasi tipologia di grafico prevista nell’analisi tecnica. Quelli che abbiamo visto nel primo capitolo si “scrivono” cosi:

- Line Chart

Innanzitutto, la prima cosa da fare è creare una nuova function richiamante i titoli in formato .csv precedentemente scaricati e rielaborati. All’interno di questa function si scriverà il codice di costruzione grafica “plot()”, che servirà per rappresentare le nostre serie storiche. A quel punto basterà richiamare la nostra function nella Command Window51 e

scegliere il titolo da mettere come input, non serviranno altre informazioni. Se lo volessimo, potremmo anche considerare la possibilità di inserire due date, di inizio e fine, in modo da scegliere di volta in volta il periodo da considerare, visto che i file .csv scaricati da Yahoo possono comprendere anche 10 anni di dati storici. Ovviamente in questo caso bisogna implementare la nostra function con una serie di cicli for che permettano di riconoscere la data di partenza e la data di conclusione. Per costruire un Line Chart non abbiamo bisogno di molte informazioni, infatti basterà ricavare il vettore “date” e quello “close” delle chiusure dai dati storici messi in input.

50 Plottare scrivere una serie di comandi che permetto di avere come output un grafico

function LineChart(titolo,datainizio,datafine)

% come input si inserisce il titolo, ovvero una tabella in formato .csv,

% una data dalla quale far partire il nostro grafico, e una

% relativa invece alla fine del periodo di analisi

chiusure=titolo.Close; date=titolo.Date; massimi=titolo.Max; minimi=titolo.min; n=length(chiusure);

%ricavo dal .csv il vettore date e chiusure, e calcolo la lunghezza

…… 52

52 Function LineChart compleata in Appendice: A2;

- Bar Chart

I Bar Chart, come già accennato, sono più diffusi rispetto ai Line Chart, soprattutto perché fornisco molte più informazioni includendo oltre al prezzo di chiusura anche quello di apertura, il massimo e il minimo. Per plottare questa tipologia di grafico su matlab ci sono due vie: una più complicata, per chi non è in possesso del Financial Toolbox e una più semplice per coloro che ne sono in possesso.

La prima delle due prevede il dover scrivere l’intero codice di plottaggio del grafico avvalendosi di cicli for e if.

La seconda invece, la via semplice, prevede semplicemente l’utilizzo del comando “highlow()”, che plotta in autonomia il Bar Chart semplicemente dando come input nel seguente ordine il vettore dei massimi, dei minimi, delle chiusure e delle aperture, il colore del grafico e le date, con la possibilità di decidere il formato.

function BarChart(titolo,datainizio,datafine)

% come input si inserisce il titolo, ovvero una

% tabella in formato .csv,

% una data dalla quale far partire il nostro grafico, e una

% relativa invece alla fine del periodo di analisi

chiusure=titolo.Close; aperture=titolo.Close; date=titolo.Date; massimi=titolo.High; minimi=titolo.Low; n=length(chiusure);

%ricavo dal .csv il vettore date e chiusure, e calcolo la lunghezza

for i=1:n if date(i)>=datainizio posdi=i; break end end ……53

- Candle Chart

Infine, abbiamo forse la più diffusa tra le tipologie di grafico tra gli analisti tecnici, la candlestick. È molto simile al Bar Chart, ma ha dalla sua la faciità di intuizione grazie ai real body colorati di verde o do rosso. Anche in questo caso le vie di realizzazione di tale grafico sono due, la veloce, possibile solo se si è in possesso del Financial Toolbox, utilizzando il comando “candle()”, e la più complicata per tutti coloro che non sono in possesso del toolbox. In questo caso io ho utilizzato la strada più complicata che da la possibilità di vedere come si utilizzano i cicli for e if per plottare un grafico a candele.

Il procedimento in questo caso è il seguente: il for che utilizziamo lavorerà sulle singole giornate, andando a plottare una riga verticale nera che collega il massimo e il minimo, successivamente con l’if se la chiusura sarà maggiore dell’aperture o viceversa verrà plottata una seconda linea di

colore verde, o rosso, per la quale con il comando “LineWidth” avremo la possibilità di scegliere lo spessore.

function Candlechart(titolo)

% come input si inserisce il titolo, ovvero una

% tabella in formato .csv,

% una data dalla quale far partire il nostro grafico, e una

% relativa invece alla fine del periodo di analisi

chiusure=titolo.Close; aperture=titolo.Open; date=titolo.Date; massimi=titolo.High; minimi=titolo.Low; n=length(chiusure);

%ricavo dal .csv il vettore date e chiusure, e calcolo la lunghezza

……54

54 Function Candlechart compleata in Appendice: A4