Sei sulla pagina 1di 22

PIATTAFORMA PROREALTIME

2 - PROSCREENER

1 - LO SCAN DI MERCATO

Proscreener è la funzione che ci permette di programmare "screeners" 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.

In questa finestra trovate l'elenco dei vostri proscreener che potete:


modificare (modifica), crearne di nuovi (nuovo), duplicare (duplica), cancellare (cancella), esportarli
(esporta) od importarli (importa).

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

In basso potete scrivere una descrizione per ogni screener impostato.

Per creare un nuovo screener, cliccate su "nuovo" ed avete l'interfaccia di programmazione.

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.

Cancella quanto scritto di default.

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.

Inoltre le virgole vanno scritte con il punto.

Per esempio: 1,5 va scritto 1.5

Quando un codice non è corretto uscirà accanto al codice il simbolo di un triangolo giallo con un punto
esclamativo.

Significa che dovete correggere qualcosa.

Per inserire le condizioni ci sono due modi:

1) scriverle manualmente una dopo l'altra;

2) cliccare sull'icona Fx per inserire i codici di funzioni e di indicatori.

(raccomandata soprattutto agli inizi - vedi finestra sotto).

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

Le fasi per la programmazione di uno screener sono essenzialmente 3:

1) IMPOSTARE I TIMEFRAMES DI RICERCA PER OGNI CONDIZIONE.

2) IMPOSTARE LE CONDIZIONI DI MERCATO.

3) IMPOSTARE IL COMANDO DI RICERCA FINALE "SCREENER".

_________________________________________________________________________________

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.

La descrizione verrà scritta in grigio e non farà parte del codice.

_________________________________________________________________________________

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:

SCREENER [C1 AND C2 AND C3 AND C4 AND C5]

Puoi utilizzare i codici AND e/o OR per le condizioni.

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.

C1 AND C2 OR C3 troverà la condizione 1 e la condizione 2 oppure la 3.

Per facilitare il tutto puoi utilizzare delle parentesi tonde all'interno della parentesi quadra che raccoglie le
varie congiunzioni.

Per esempio:

SCREENER [(C1 AND C2) OR (C3 AND C4) AND C5]

In questo caso hai due opzioni di ricerca:


- le CONDIZIONI 1, 2 e 5 oppure

- le CONDIZIONI 3, 4 e 5.

Può essere anche scritto in questo modo richiamando 2 volte la condizione 5:

SCREENER [(C1 AND C2 AND C5) OR (C3 AND C4 AND C5)]

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.

Ti ricordo che con la versione free sono visualizzabili solo 50 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.

E' possibile visualizzarli uno ad uno ed inserirli in una watchlist personalizzata.

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.

5 - ALCUNI COMANDI CHIAVE DI PROGRAMMAZIONE DEL LINGUAGGIO PROBUILDER: COSTANTI DI


PREZZO.

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.

_________________________________________________________________________________

1) COSTANTI DI PREZZO ADATTATI AL TIMEFRAME.

Per prima cosa vediamo le costanti di prezzo che si adattano al timeframe del grafico:

Open=prezzo di apertura della barra corrente.

Close= prezzo di chiusura della barra corrente.

High= prezzo massimo della barra corrente.

Low=prezzo minimo della barra corrente.

Volume=n° di titoli scambiati durante la barra corrente.

Per richiamare il periodo di un prezzo, utilizziamo la parentesi quadra [n] con il periodo precedente n da
richiamare:

Open[n]=prezzo di apertura della barra di N periodi precedenti alla barra corrente.

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.

Low[n]=prezzo minimo 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....

Altre costanti di prezzo importanti sono:

_________________________________________________________________________________

2) COSTANTI DI PREZZO GIORNALIERE.

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:

DOpen(n)= prezzo di apertura della ennesima giornata precedente al giorno in corso.

DClose(n)= prezzo di chiusura della ennesima giornata precedente al giorno in corso.

DHigh(n)= prezzo massimo della ennesima giornata precedente al giorno in corso.

DLow(n)=prezzo minimo della ennesima giornata precedente al giorno in corso.

Nota che in questo caso la parentesi è tonda e non quadra.

Per la giornata corrente basta omettere di scrivere la parte con le parentesi:

DOpen, DClose, ecc..

 _________________________________________________________________________________

3) RANGE E VALORE ASSOLUTO DI PREZZO.

Il range di prezzo invece è definito dal codice:

Range[n] ed equivale alla formula:


high-low[n],

dove n rappresenta l'ennesima giornata precedente.

Mentre per quanto riguarda il valore assoluto il codice è il seguente:

ABS(a).

Per esempio per considerare il valore assoluto dei prezzi di apertura e prezzo di chiusura della barra
corrente: ABS(open-close).

Mentre per il valore assoluto di N periodi precedenti:  ABS(open-close)[n].

 _________________________________________________________________________________

4) MASSIMI E MINIMI DI PERIODO.

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)

Lo stesso vale per i prezzi di apertura:

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.

Al precedente punto è legato l'indicatore "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

1) SEMPLICI OPERATORI MATEMATICI.

Ora vediamo quali sono altri comandi di programmazione essenziali come gli operatori matematici:

a < b: a é strettamente inferiore a b

a <= b o a =< b: a é inferiore o uguale a b

a > b: a é strettamente superiore a b

a >= b o a => b: a é superiore o uguale a b

a = b: a é uguale a b (o riceve il valore b)

a <> b: a é diverso da b

Esempio:

close[1]<open[1]

La chiusura del periodo precedente deve essere minore dell'apertura.

high[0]>=high[10]

Il massimo corrente deve essere maggiore o uguale al massimo di 10 periodi precedenti.

La somma è definita mediante il simbolo +

La sottrazione mediante il simbolo -

La moltiplicazione mediante il simbolo *

La divisione mediante il simbolo /

 _________________________________________________________________________________

 2) RICHIAMO DI INDICATORI DI DEFAULT.


Gli indicatori sono molto semplici da richiamare nei codici.

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) :

RSI[x](price) ----> RSI[14](close)

MACD[S,L,Si](price) ----> MACD[12,26,9](close)

ROC[x](price) ----> ROC[20](close)

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]

Considera il valore degli indicatori di 10 periodi precedenti alla barra corrente.

 _________________________________________________________________________________

 3) RICHIAMO DI INDICATORI DI PERSONALIZZATI.

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

Le virgolette comprendono il nome con cui è salvato ed i parametri.

Prima richiamiamo l'indicatore e lo poniamo come condizione C1 oppure con un altro nome a piacere come
per tutte le altre condizioni.

Invece di C1 posso chiamarlo col nome stesso del mio indicatore.

Successivamente inserisco le condizioni che implicano il suo utilizzo.

Per esempio, ho costruito un indicatore lineare chiamato MAXX123.

E' costituito da due parametri ed è costruito sul prezzo di chiusura.

Voglio ricercare i mercati in cui l'indicatore è superiore al prezzo di chiusura corrente. Ho due scelte:

1) inserirlo con lo strumento Fx che lo chiamerà

myMaxx123 = call "maxx123[3,20](close)" con cui costruirò il proscreener con le altre condizioni, per
esempio:
 

timeframe (daily)

myMaxx123= call "maxx123[3,20](close)"

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)

c1= call "maxx123[3,20](close)"

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)

c1= call "RSI[14](close)"

c2= c1>70

c3= c1<30

screener [c2 OR c3]

In questo caso ricerco i mercati in fase di ipercomprato ed in fase di ipervenduto insieme perchè ho
utilizzato la funzione logica OR.
 _________________________________________________________________________________

 4) FUNZIONI SPECIALI PER LE MEDIE MOBILI.

Per quanto riguarda le medie mobili le istruzioni essenziali riguardano gli incroci delle medie mobili
secondo i seguenti comandi:

a crosses over b (incrocio a rialzo)

es: average[10](close) crosses over average[50](close);

a crosses under b (incrocio a ribasso)

es: average[10](close) crosses under average[50](close);

Lo stesso può essere fatto per l'incrocio di una media mobile col prezzo:

close crosses over average[N](close)

close crosses under average[N](close)

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.

Il prezzo deve chiudere sopra o sotto la media mobile.

Se volete individuare incroci anche di massimi o minimi con le medie mobili potete utilizzare al posto di
close le costanti high o low.

high crosses over average[N](close)

low crosses under average[N](close)

 ________________________________________________________________________________

5) INDICATORI SECONDARI APPLICATI AD INDICATORI PRINCIPALI.


Un'altra funzione utile è quella di determinare il valore di un indicatore secondario applicato ad un
indicatore principale in base alla seguente formula:

Indicatore secondario[n](indicatore principale)<=>indicatore principale oppure un determinato valore.

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]

oppure scomponendo i codici:

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]

oppure scomponendo i codici:


 

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.

 ________________________________________________________________________________

 6) IL COMANDO FILTRO "CRITERIA".

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

mostra valori + grandi


e poi impostare nel codice proscreener l'indicatore che voglio come criterio di ricerca, cioè il ROC% a 52
settimane (annuale) o 250 giorni.

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)

SCREENER[C1 and C2 and C3 and C4 and C5](CRITERIA AS "ROC%").

Come vedete nell'esempio sotto, si formerà una colonna chiamata ROC% con i titoli messi in ordine
decrescente, realtivamente al proprio valore di ROC.

Potrebbero piacerti anche