2 - PROSCREENER
1 - LO SCAN DI MERCATO
Lo scan o screener consiste nel ricercare mercati o strumenti in determinate condizioni di prezzo.
Questa utility è immensamente preziosa e comoda poichè ci evita di cercare manualmente i mercati,
soprattutto per quanto riguarda i mercati azionari con centinaia o migliaia di titoli a disposizione.
E' importantissima soprattutto per coloro che desiderano diversificare negoziando anche con i titoli
azionari, ma anche per coloro che non vogliono perdere molto tempo ad analizzare i mercati di forex, indici
e commodities.
In quest'ultimo caso consiglio di creare 3 liste con gli strumenti che vi fornisce il vostro broker.
In seguito, basta programmare dei semplici screeners di ricerca in base ai parametri delle vostre strategie,
aprire i mercati nella lista, analizzarli e selezionare quelli che fanno al caso vostro mettendoli in una
watchlist ed il gioco è fatto!
Se gli strumenti trovati sono troppi (per la versione gratuita il software visualizza solo 50 mercati anche se
ne trova molti di più), basterà utilizzare il comando CRITERIA od aggiungere dei filtri al nostro screener per
restringere il campo.
Prima di cominciare vi consiglio di scaricare la guida di Proscreener in modo da averla come supporto alle
mie spiegazioni.
Il testo è abbastanza corto (solo 36 pagine) in quanto è la funzione più semplice delle 3.
Ci sono anche degli esempi di programmazione e nella parte finale è presente un glossario con tutti gli
algoritmi disponibili.
I video interattivi riguardante proscreener sono in questa pagina, nel paragrafo "strumenti di scansione di
mercato".
2 - AVVIO PROSCREENER
Una volta settato il vostro piano di lavoro, cliccate sul pannello principale "visualizza" e poi "proscreener".
Vi si aprirà una finestra con degli screener di base già impostati oppure con l'ultimo proscreener che avete
programmato ed utilizzato con i relativi mercati trovati dallo strumento scan.
Nel mio caso lo avevo chiamato "new forex short system" ed aveva trovato 3 cambi forex che avevano le
condizioni che ho richiesto, vedi sotto.
Per creare un nuovo proscreener basta cliccare sulla chiave inglese accanto al nome del proscreener, vi si
aprirà una finestra chiamata "gestione prscreener" che è la finestra principale degli screener.
A destra, settate la lista dei mercati da scansire che può essere "predefinita" oppure da voi "personalizzata"
ed il periodo (giornaliero se non avete l'abbonamento) e
Qui abbiamo due opzioni di programmazione mediante il linguaggio BASIC di Probuilder che viene
utilizzato per tutte e 3 le applicazioni:
- Creazione semplificata, che consiste nel cliccare sugli indicatori che avete impostato sul grafico e scegliere
le opzioni dalla finestra automatica di programmazione assistita che si presenta.
E' di grande aiuto all'inizio quando non sappiamo bene come scrivere un codice. Cliccando ogni volta su
nuovo impostiamo tutte le condizioni una per una.
- Creazione per programmazione, dove siete voi stessi a scrivere il codice di programmazione ed è ciò che
faremo adesso.
3 - CREAZIONE PER PROGRAMMAZIONE
Quando hai cliccato su Creazione per Programmazione si apre la seguente finestra di base.
Un consiglio è quello di scrivere su foglio di carta o word un elenco con le condizioni di mercato che
ricercate in modo da avere una scaletta completa.
Il passo successivo è quello di tradurre le condizioni nel linguaggio probuilder, cioè di codificarle.
Ogni qualvolta desideri scrivere dei commenti sul codice, ti basta digitare due barre slash // come
nell'esempio qui sotto oppure il codice rem, prima di qualsiasi commento o descrizione.
Va specificato che non fa nessuna differenza tra maiuscolo e minuscolo, potete utilizzarli entrambi.
Quando un codice non è corretto uscirà accanto al codice il simbolo di un triangolo giallo con un punto
esclamativo.
Nel caso operi tramite Fx, cliccando sulla sezione di sinistra "categorie" vengono visualizzate le varie
"funzioni" sulla sezione di destra.
Dovete scegliere la funzione che v'interessa e proscreener scriverà direttamente il codice probuilder
relativo.
Ovviamente dovrete per prima cosa nominare la condizione come vedremo appena di seguito.
4 - LE FASI DI PROGRAMMAZIONE PROSCREENER
_________________________________________________________________________________
1) Per prima cosa bisogna impostare il periodo di riferimento per la ricerca mediante il comando
timeframe.
A pagina 15 del manuale ci sono tutti i codici dei timeframes, noi utilizziamo per i dati di fine giornata il
codice (daily) ma possiamo utilizzare anche il settimanale (weekly).
Possiamo utilizzare condizioni con dati giornalieri e con altri timeframes utilizzando l'appropriato codice
prima delle relative condizioni.
_________________________________________________________________________________
2) Per definire le condizioni basta nominarle come vuoi facendole seguire da un uguale, per esempio in
questo modo:
TIMEFRAME (daily)
C1=
C2=
C3=
TIMEFRAME (weekly)
C4=
C5=
ecc...
oppure
TIMEFRAME (daily)
condizione 1=
condizione 2=
condizione 3=
TIMEFRAME (weekly)
condizione 4=
condizione 5=
ecc...
Nell'esempio sopra le prime 3 condizioni riguarderanno il timeframe giornaliero, le altre 3 condizioni quello
settimanale.
Come già detto puoi descrivere a parole la funzione dell'algoritmo mediante le // prima o dopo ogni
condizione.
_________________________________________________________________________________
3) Infine, quando hai elencato tutte le condizioni di mercato, la parola di comando chiave per il proscreener
è "screener" seguito dalle condizioni indicate comprese tra due parentesi quadre, esempio:
AND è la congiunzione E e significa che volete che lo screener trovi tutte le condizioni congiunte, mentre
OR significa "oppure", e cioè che vuoi una certa condizione oppure un'altra.
C1 OR C2 troverà i mercati che hanno la condizione 1 oppure la condizione 2, e non necessariamente che
abbiano entrambi le condizioni, come nel caso di C1 AND C2.
Per facilitare il tutto puoi utilizzare delle parentesi tonde all'interno della parentesi quadra che raccoglie le
varie congiunzioni.
Per esempio:
- le CONDIZIONI 3, 4 e 5.
Questo metodo è utile se vuoi trovare contemporaneamente 2 tipologie speculari di mercato, per esempio
condizioni di bull market per eventuali trades long e condizioni di bear market per eventuali trades short.
Oppure quando cerchi diversi pattern grafici come vedremo negli esempi successivamente.
_________________________________________________________________________________
Una volta che hai ultimato il codice, scegli il mercato nella sezione di destra ed in che ordine determinare i
risultati.
Una volta che hai la lista dei risultati, puoi metterli in ordine in base al nome, al prezzo, alla % di variazione
o al volume nella tabella dei risultati.
Per creare una lista personalizzata clicca sull'icona chiave inglese della finestra liste che io ho disposto sul
lato destro della schermata.
Per aggiungere i mercati trovati dallo screener, basta cliccare con il tasto destro su ogni mercato ed inserirli
nella tua watchlist.
Vediamo ora come si settano alcuni comandi utili ai fini della determinazione delle condizioni di ricerca,
soprattutto per quanto riguarda gli indicatori scritti mediante linguaggio probuilder.
Per quanto riguarda i comandi ed i codici, vi ricordo che in fondo al manuale c'è un glossario completo da
consultare.
Ribadisco inoltre il fatto che i codici puoi scriverli tu stesso oppure inserirli mediante l'icona di aiuto FX
come visto nella figura sopra.
_________________________________________________________________________________
Per prima cosa vediamo le costanti di prezzo che si adattano al timeframe del grafico:
Per richiamare il periodo di un prezzo, utilizziamo la parentesi quadra [n] con il periodo precedente n da
richiamare:
Close[n]= prezzo di chiusura della barra di N periodi precedenti alla barra corrente.
High [n]= prezzo massimo della barra di N periodi precedenti alla barra corrente.
Volume[n]=n° di titoli scambiati durante la sessione di N periodi precedenti alla barra corrente.
Quindi, open[0] o solamente open (senza la parentesi) rappresenta il prezzo d'apertura della barra
corrente;
open[1] rappresenta il prezzo di apertura del periodo precedente alla barra corrente;
close [2] rappresenta il prezzo di chiusura di 2 periodi precedenti alla barra corrente,
ecc....
_________________________________________________________________________________
Se state scrivendo uno screener per timeframes diversi dal giornaliero potrebbero servirti i prezzi principali
di una data sessione giornaliera, cioè le costanti giornaliere di prezzo:
_________________________________________________________________________________
ABS(a).
Per esempio per considerare il valore assoluto dei prezzi di apertura e prezzo di chiusura della barra
corrente: ABS(open-close).
_________________________________________________________________________________
Un'altra funzione importante del prezzo è quella che riguarda i massimi e i minimi assoluti di periodo
secondo la seguente formula:
Highest [n](high)
Trova il prezzo massimo assoluto compreso tra i massimi dall'ennesimo periodo precedente a quello
corrente.
Lowest [n](low)
Trova il minimo assoluto compreso tra i minimi dall'ennesimo periodo precedente a quello corrente.
Se stai utilizzando un grafico con il solo prezzo di chiusura e vuoi che lo screener cerchi il valore più alto o
più basso dei soli prezzi di chiusura, basterà sostituire (high) con (close):
Highest [n](close)
Lowest [n](close)
Highest [n](open)
Lowest [n](open)
Se vuoi cercare il più alto minimo o il più basso massimo compresi in un determinato periodo:
Highest [n](low)
Lowest [n](high)
_________________________________________________________________________________
5) CANALE DI DONCHIAN.
Tale indicatore traccia sul grafico linee che identificano i massimi ed i minimi assoluti di periodo impostati
però al giorno precedente in modo che se il prezzo fa un nuovo massimo o minimo, esso incroci la linea di
resistenza a rialzo o supporto a ribasso.
Se vi serve settare il codice del canale di Donchian per uno screener od un sistema i codici esatti sono
questi:
Resistenza:
highest[x](high)[1]
Supporto:
lowest[x](low)[1]
Linea mediana:
(highest[x](high)[1])+(lowest[x](low)[1])/2
Anche in questo caso, se utilizzi il grafico col solo prezzo di chiusura (a linee):
Resistenza:
highest[x](close)[1]
Supporto:
lowest[x](close)[1]
Linea mediana:
(highest[x](close)[1])+(lowest[x](close)[1])/2
Dove X rappresenta il periodo del canale ed il [1] rappresenta il periodo precedente alla barra corrente.
6 - ALTRE FUNZIONI ESSENZIALI DEL LINGUAGGIO PROBUILDER
Ora vediamo quali sono altri comandi di programmazione essenziali come gli operatori matematici:
a <> b: a é diverso da b
Esempio:
close[1]<open[1]
high[0]>=high[10]
_________________________________________________________________________________
Basta vedere il relativo codice nel glossario (sono quelli scritti in verde nella guida di PROBUILDER) oppure
richiamarli con l'opzione Fx nella schermata di programmazione.
Se vogliamo scriverli noi stessi, dobbiamo solo scrivere le parti costituenti di un indicatore per esempio:
Indicatore[x](price)
OVVERO:
Nome indicatore[periodo dell'indicatore](tipo di prezzo su cui è costruito: CLOSE, OPEN, HIGH O LOW)
Per esempio le medie mobili (semplice, esponenziale, ponderata, DEMA) sono così nominate:
Average[x](close)
exponentialaverage[x](close)
weightedaverage[x](close)
Dema[x](close)
Esempio di altri indicatori con valori impostati di default (che potete ovviamente cambiare) :
SAR[At,St,Lim] ---->SAR[0.02,0.02,0.2]
Gli indicatori in questo modo trovati saranno quelli relativi al periodo corrente.
Se vogliamo considerare i valori di periodi precedenti dell'indicatore dobbiamo aggiungere anche in questo
caso, il periodo ennesimo [n] alla fine del codice, racchiuso da una parentesi quadra.
Esempio:
RSI[14](close)[10]
Average[20](close)[10]
_________________________________________________________________________________
E' possibile, quando si ha progettato un indicatore personalizzato e quindi salvato, richiamare l'indicatore
tramite la funzione "CALL" o richiamo.
Ciò va fatto inserendo nello screener la condizione con il richiamo del nostro indicatore e con i parametri da
cui è costituito.
Esempio:
C1=CALL "nomeindicatore[a,b](price)"<=>valore
Prima richiamiamo l'indicatore e lo poniamo come condizione C1 oppure con un altro nome a piacere come
per tutte le altre condizioni.
Voglio ricercare i mercati in cui l'indicatore è superiore al prezzo di chiusura corrente. Ho due scelte:
myMaxx123 = call "maxx123[3,20](close)" con cui costruirò il proscreener con le altre condizioni, per
esempio:
timeframe (daily)
c2=close
c3=myMaxx123>close
screener [c3]
2) oppure posso scriverlo io stesso utilizzando il nome che voglio per esempio C1 o sostituendo
semplicemente il nome dato da Fx nel caso precedente.
timeframe (daily)
c2=close
c3=c1>close
screener [c3]
Per esempio, poniamo il caso che l'RSI non sia presente nell'elenco indicatori della piattaforma.
Prima, costruisco l'indicatore con il linguaggio probuilder salvandolo con il nome RSI, e poi lo richiamo in
proscreener con la funzione CALL.
timeframe (daily)
c2= c1>70
c3= c1<30
In questo caso ricerco i mercati in fase di ipercomprato ed in fase di ipervenduto insieme perchè ho
utilizzato la funzione logica OR.
_________________________________________________________________________________
Per quanto riguarda le medie mobili le istruzioni essenziali riguardano gli incroci delle medie mobili
secondo i seguenti comandi:
Lo stesso può essere fatto per l'incrocio di una media mobile col prezzo:
Mediante questa formula lo screener troverà quei mercati dove è appena avvenuto un incrocio tra medie
mobili o di una media mobile con il prezzo di chiusura.
Se volete individuare incroci anche di massimi o minimi con le medie mobili potete utilizzare al posto di
close le costanti high o low.
________________________________________________________________________________
Esempio:
Applicate una media mobile semplice di 20 periodi all'indicatore RSI[14] e quindi volete ricercare quei
mercati in cui la linea RSI è maggiore della media mobile applicata ad esso:
timeframe (daily)
c1= average[20](RSI[14](close))<RSI[14](close)
screener [c1]
timeframe (daily)
c1= RSI[14](close)
c2= average[20](c1)
c3= c2<c1
screener [c3]
La stessa cosa potete farla per esempio sull' OBV o PTV (indicatori di volumi):
timeframe (daily)
c1= average[20](OBV)<OBV
screener [c1]
timeframe (daily)
c1= OBV
c2= average[20](C1)
c3= c2<c1
screener [c3]
Altro esempio:
Volete ricercare quei mercati con volume medio di 20 periodi superiore a 100.000 contratti.
Per farlo dovete applicare una media mobile semplice di 20 periodi sull'indicatore di volume:
timeframe (daily)
c1=average[20](volume)>100000
screener [c1]
Vediamo nella prossima pagina alcuni screener che ho programmato e che possono esservi utili.
________________________________________________________________________________
E' possibile, settare mediante il comando criteria la lista screener in base alla grandezza del valore al quale
vogliamo dare più peso ed utilizzarlo come discriminante della ricerca.
Se ad esempio, voglio che proscreener mi metta in ordine crescente di valore la % di performance annuale
gli strumenti trovati, devo prima di tutto settare il comando nella finestra di programmazione, in basso a
destra
Infine richiamo nel comando screener le condizioni e tra parentesi tonda il comando CRITERIA.
E' possibile anche nominare il parametro visualizzato nella lista screener come di seguito: (CRITERIA AS
"ROC%")
TIMEFRAME (WEEKLY)
C1=......
C2=......
C3=......
C4=......
C5=......
CRITERIA=ROC[52](close)
Come vedete nell'esempio sotto, si formerà una colonna chiamata ROC% con i titoli messi in ordine
decrescente, realtivamente al proprio valore di ROC.