• Non ci sono risultati.

Programmazione dell’M-Oscillator

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

3.3 Programmazione dell’M-Oscillator

Software come MATLAB mettono a disposizione dell’utente una grande quantità di strumenti, col solo e unico scopo di migliorarne, velocizzarne e facilitarne l’utilizzo. Uno di questi strumenti è rappresentato dalle function.

Le function possono essere già implementate ed incorporate nei vai toolbox, e quindi l’utente non deve far altro che “richiamarle” e inserire i vari input, e possono però anche essere create, “scritte” dall’utente stesso. Il loro utilizzo permette innanzitutto la loro riusabilità, perché basta scrivere una volta un codice che utilizziamo spesso e perché anche le modifiche e le correzioni sono gestibili in maniera più rapida. Garantiscono inoltre una migliore leggibilità del codice, comprendendo porzioni di codice complesso in una sola riga, aumentando anche il livello di astrazione dei programmi. Garantiscono, poi, una maggior flessibilità permettendo di aggiungere funzionalità non presenti nelle funzioni di libreria.55

55 Daniele Loiacono, MATLAB: funzioni, slide Politecnico di Milano

Per scrivere il codice dell’M-Oscillator io stesso mi sono avvalso dell’utilizzo delle

function, questo mi ha permesso di scrivere il codice una volta soltanto potendolo

però testare un numero molto elevato di volte, semplicemente richiamando la function..

Adesso entriamo nello specifico del codice relativo all’M-Oscillator. Il primo passaggio che ho compiuto è stato il replicare le istruzioni fornite nel IFTA 2018 da Mohamed Fawzy in modo dare i comandi a MATLAB per creare l’oscillatore a partire dai dati storici (in questo caso bastavano chiusure e date), scaricati come già accennato da Yahoo finanza.

Per prima cosa, ho creato un vettore V con lunghezza pari alle giornate di negoziazione prese in considerazione, che rappresenta il vettore Vn di cui

abbiamo parlato durante la spiegazione dell’M-Oscillator, ovvero è quel vettore che sarà composto di valori compresi tra +14 e -14 e che sarà la linea sulla quale verranno poi calcolate le medie esponenziali. Successivamente ho aperto un ciclo

for nel quale per ogni giornata di negoziazione, a partire dalla 15 e arrivando fino

all’ultimo, viene svolta la prima parte di calcoli che servono per la creazione dell’oscillatore, ovvero verranno confrontate tutte le 14 chiusure delle giornate precedenti alla giornata odierna con la chiusura della giornata odierna stessa, in modo da, con i risultati espressi in valori pari a +1,-1 e 0, fare una sommatoria e trovare il valore che sarà poi inserito nel vettore V sopra nominato. Questo è stato possibile utilizzando un altro ciclo for all’interno del for precedente, che per ogni giornata controllava da 14 giornate prima fino a quella attuale, e utilizzando un if che permettesse di assegnare il giusto valore alla differenza, se positiva, negativa o nulla. Il passo successivo è stato poi calcolare le medie esponenziali del vettore V. Le strade erano due: riscrivere per ogni media esponenziale da calcolare il codice oppure utilizzare uno strumento molto comodo che MATLAB mette a disposizione, le sub function. Personalmente ho scelto la seconda seconda opzione. Le sub function, sono delle function all’interno delle function, hanno quindi le stesse caratteristiche e danno gli stessi vantaggi, anche se sono relative

solo alla function principale. Il loro utilizzo mi ha dato la possibilità di scrivere il codice delle medie esponenziali una sola volta, per poi richiamarlo semplicemente e dargli dati di volta in volta differenti. Questa sub function da me creata, richiede tre input: un vettore dati, l’intervallo sul quale la media esponenziale calcola di volta in volta i dati, e una giornata da cui far partire il calcolo della media. Calcolare quindi le varie medie esponenziali che danno vita all’M-Oscillator e alla Signal Line, ha impiegato semplicemente 3 righe di codice.

function [MOSC,SIGN]=Moscillator(tit)

C=tit.Close; %estraggo il vettore chiusure dai dati storici del titolo

D=tit.Date; %estraggo il vettore date dai dati storici del titolo

n=length(C); %conto le giornate di negoziazione

V=zeros(n,1); %alloco memoria nel vettore V

for i=15:n %primo for, dalla 15 giornata fino all'ultima

t=0; %variabile per fare la sommatoria dei valori delle differenze

for h=(i-14):(i-1) % per ogni giornata si guardano le 14 precendenti

if C(i)<C(h)

v=-1; %con questa serie di if si controlla che la differenza tra le

elseif C(i)>C(h) %chiusure sia positiva, negativa e nulla, per attribuire il

v=+1; % valore corretto (+1,-1,0)

else v=0; end

t=v+t; %per ogni giornata si fa la sommatoria

end

V(i)=t; %si crea il vettore Vn

End ……56

Nella Figura 17 possiamo vedere i due vettori risultati rispettivamente per l’M- Oscillator e per la Signal Line. Ovviamente i dati cosi mostrati in valore numerico sono relativamente utili, infatti proseguendo nel mio lavoro e utilizzando il comando plot() ampiamente discusso nel paragrafo precedente, ho implementato il codice dell’M-Oscillator, prevedendone un versione che come risultato producesse oltre che le due tabelle numeriche, anche un grafico con l’andamento dei prezzi di chiusura del titolo osservando, sotto forma di Line Chart, e un sotto grafico che invece mostrasse l’andamento dell’oscillatore e della Signal Line con in evidenza fasce di ipercomprato e ipervenduto. Per realizzare questo grafico mi sono avvalso della funzione subplot(), uno strumento che da la possibilità di realizzare nella stessa figura due grafici separati l’uno dall’altro. Nel primo subplot ho scritto il codice relativo al Line Chart dell’andamento dei prezzi

di chiusura, mentre nel secondo ho scritto il codice relativo al grafico dell’M- Oscillator, della Signal Line e delle due fasce, di ipercomprato e di ipervenduto.

figure(4); subplot(3,1,1:2)

%comando che permette di creare nella stessa figura due grafici separati

plot(D,C,'k-'); %grafico lineare

title('Linechart del titolo'); xlabel('Giornate di negoziazione'); ylabel('Valori negoziati');

grid on

grid minor

subplot(3,1,3)

plot(D(inizio:end),MOSC(inizio:end),'b-')

%grafico relativo all'andamento dell'M-Oscillator

hold on

plot(D(inizio:end),SIGN(inizio:end),'r-')

%grafico relativo all'andamento della Signal Line

for i=inizio:n

plot(D(i),10,'k.','LineWidth',1); plot(D(i),-10,'k.','LineWidth',1); end

hold off

%questo for serve a disegnare le linee delimitanti la fascia di %ipercomprato e di ipervenduto, che con il comando "k." saranno %tratteggiate

title('M-Oscillator');

legend('M-Oscillator Line','Signal Line'); xlabel('Giornate di negoziazione');

ylabel('Valori'); grid on

grid minor57

Figure 12 Line chart dei prezzi di chiusura del titolo FCA.MI e M-Oscillator nel grafico di supporto. Fonte: