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.

 



Scrivi commento

Commenti: 0