Sviluppo di una strategia di trading su Matlab
4.2 Programmazione su Matlab dell’indicatore Westvol
Dopo aver verificato che effettivamente vi sia una correlazione tra i volumi di ricerca e i volumi di scambio del mercato azionario possiamo procedere ad analizzare come i volumi di ricerca possono essere utilizzati per prevedere i movimenti dei volumi azionari.
Per verificare se sussiste la possibilità di effettuare una tale previsione, il dottor Marcin Narloch, analista di origine polacca, ha ideato un indicatore denominato Westvol.38 Questo indicatore si basa sia sulle serie storiche dei volumi di ricerca che su quelle dei volumi azionari.
L’ideatore inizia il processo estraendo un valore per ogni volume alla stessa data. Dopo di ciò viene prodotto un numero, chiamato DIFF, pari alla differenza tra i volumi di ricerca e quelli azionari; sarà quindi positivo nel caso in cui i volumi di ricerca siano più alti di quelli azionari e positivo in caso contrario. Nel caso in cui DIFF sia positivo viene rappresentato con una barra verde nel nostro indicatore, mentre invece se DIFF è negativo viene rappresentato con una barra rossa. Per interpretare il Westvol vengono evidenziati alcuni segnali dal punto di vista grafico che vedremo in seguito.
Per la costruzione di questo indicatore usiamo il software Matlab che ci permette di creare una function dove poniamo come input i file csv dei volumi di ricerca scaricati da Google e delle serie storiche scaricate da Yahoo del titolo che prendiamo in considerazione per la nostra analisi. La function restituisce come output le date in cui avvengono i segnali del nostro indicatore, ovvero quando si ha un valore di DIFF positivo, seguito da un valore di DIFF negativo nella seduta successiva.39
function [datasignal] = WESTVOL(search,trading)
%pongo come input i file CSV dei volumi di ricerca e dei volumi azionari search=readtable(search);
trading=readtable(trading);
trading(1,:)=[];%cancello la prima riga dei volumi azionari perchè i dati
%di yahoo presentano una settimana in più rispetto a quelli di Google
SearchVolume=table2array(search(:,2));%prendo i volumi di ricerca
n=length(trading.Volume);%trovo la lunghezza del vettore dei volumi
maxval=-inf;
for k=1:n
38 Pubblicato sull’International Federation of Technical Analysts Journal del 2016.
39 Per questioni di significatività si prende un valore di DIFF superiore a 3 nel caso positivo e inferiore a -
98
if trading.Volume(k)>maxval
maxval=trading.Volume(k);
end
end %trovo il massimo dei volumi azionari
Volume100=zeros(n,1);
for i=1:n
Volume100(i)=(trading.Volume(i)/maxval)*100;
end %creo un vettore con i volumi azionari su base percentuale
DIFF=zeros(n,1);
for i=1:n
DIFF(i)=SearchVolume(i)-Volume100(i);
end %creo un vettore per la differenza tra i due volumi per ogni data
figure;
xmax=trading.Date(end)+1; %limite massimo grafico
xmin=trading.Date(1)-1; %limite minimo grafico
subplot(2,1,1); hold on for i=1:n if DIFF(i)<0 plot([trading.Date(i),trading.Date(i)],[0,DIFF(i)],'r-','LineWidth',1) elseif DIFF(i)>0 plot([trading.Date(i),trading.Date(i)],[0,DIFF(i)],'g-', 'LineWidth',1) end end xlim([xmin,xmax]);
title('Grafico WESTVOL');%titolo del grafico
xlabel('Settimane');%legenda asse ascisse
ylabel('Indicatore WESTVOL');%legenda asse ordinata
grid on;%applico griglia
grid minor;%aumento la precisione della griglia
hold off
%creo un grafico con barre rosse quando la differenza è negativa e barre %verdi quando è positiva
subplot(2,1,2) hold on for i=1:n plot([trading.Date(i),trading.Date(i)],[0,Volume100(i)],'b-','LineWidth',1) end xlim([xmin,xmax]);
title('Grafico dei volumi di scambio');%titolo del grafico
xlabel('Settimane');%legenda asse ascisse
ylabel('Volumi');%legenda asse ordinata
grid on;%applico griglia
grid minor;%aumento la precisione della griglia
hold off
%creo un grafico a barre per i volumi di scambio
datasignal=zeros(n,1);%creo un vettore per le date in cui avvengono i segnali
numelem=0;
for i=2:n
99
numelem=numelem+1; datasignal(numelem)=i;
end
end
%creo un ciclo for che prende le date in cui si ha una barra verde con %valore superiore a 3 e una rossa successiva con valore inferiore a -3 datasignal=datasignal(1:numelem);
end
Immagine 57: Codice indicatore Westvol. Fonte: Elaborazione personale
Come si può notare nel codice della funzione, inizialmente viene creato un vettore dove vengono inseriti i volumi azionari su base percentuale, in modo da poterli confrontare con i volumi di ricerca di Google che, come visto precedentemente, sono in base 100. Viene poi effettuata la differenza tra i due tipi di volume per ogni intervallo temporale e prende il nome di DIFF.
Tramite il comando subplot() creo entrambi i grafici nello stesso foglio, in modo tale da avere, sopra l’indicatore Westvol e sotto l’andamento dei volumi; questo risulterà fondamentale per valutare se effettivamente questo indicatore può prevedere l’andamento dei volumi.
La function restituisce infine come output le date in cui si ha un segnale di aumento dei volumi, ovvero quando si passa da una barra verde ad una rossa nella seduta successiva.
4.2.1 Verifica dell’efficienza previsionale dei volumi di ricerca sui volumi di scambio
Una volta creato il codice dell’indicatore Westvol si può procedere con la verifica dell’efficienza previsionale che i volumi di ricerca possono avere sui volumi di scambio.
Analizziamo tale capacità predittiva osservando il grafico dell’indicatore Westvol con quello dell’andamento dei volumi.
100
Immagine 58: Confronto Westvol e volumi azionari. Fonte: Elaborazione personale
L’immagine 58 è la dimostrazione che i volumi di ricerca hanno un potere predittivo per i volumi azionari dei titoli che abbiamo selezionato per la nostra ricerca. Infatti nel caso del titolo WFC notiamo che quando si susseguono una barra verde e una barra rossa, evidenziate nel grafico Westvol da un rettangolo blu, vi è un corrispondente aumento dei volumi nel grafico sottostante.
101
4.3 Definizione strategia di investimento basata su indicatore Westvol e RSI