Sei sulla pagina 1di 28

PROREALTIME - PROBUILDER

ESEMPI DI INDICATORI PERSONALIZZATI

Esporrò ora, come già anticipato nella precedente pagina, alcuni semplici algoritmi e comandi per 4
tipologie di indicatore in modo che possiate utilizzare gli esempi come base per i vostri.

1) Segnali di trading o di formazione di patterns.

2) Elaborazione di dati.

2) Indicatore lineare sul grafico del prezzo.

3) Oscillatore a pista ciclica.

Vediamoli ora uno per uno e quali sono le funzioni necessarie per la loro programazione.

Potete trovare alcuni indicatori programmati da prorealtime e da utenti nella biblioteca indicatori del sito di
prorealtime oppure in quella di prorealcode.

1 - SEGNALI DI TRADING O DI FORMAZIONE DI PATTERNS

Questo tipo di indicatore è detto binario e viene posto sotto il grafico del prezzo.

Permette di visualizzare in forma di istogramma o di linee, la generazione di un segnale di trading in base


alla vostra strategia, per esempio un incrocio di medie mobili a rialzo o a ribasso.

Nel caso si generino segnali di acquisto verrà visualizzata una barra verso l'alto (+1) di colore verde
(personalizzabile), nel caso di un segnale di vendita viene visualizzata una barra verso il basso (-1) di colore
rosso (personalizzabile).

Lo stesso può essere impostato qualora si formino dei pattern rialzisti o ribasissisti.

In questo modo sarà più semplice la visualizzazione dei segnali di trading.

 
I comandi chiave per questa tipologia sono le istruzioni condizionate descritte a pagina 15 del manuale
probuilder:

IF : (SE)

THEN : (ALLORA o QUINDI): Istruzione che segue l'istruzione condizionale "IF"

ELSE : (ALTRO) : Istruzione per introdurre la seconda condizione in alternativa alla prima uscita di IF.

ELSIF : (ALTRIMENTI): Contrazione di ELSE IF (da inserire all'interno della condizione).

ENDIF: (FINE): Istruzione di chiusura delle istruzioni condizionali.

Nello specifico queste istruzioni si utilizzano in questo modo:

IF/THEN/ENDIF:

IF a THEN b

ENDIF

Insieme di istruzioni condizionali senza la seconda condizione.

IF/THEN/ELSE/ENDIF:

IF a THEN b ELSE c

ENDIF

Insieme di più istruzioni condizionali.

Vediamo un esempio concreto.

Un facile esempio ad una codizione è l'incrocio di 2 medie mobili semplici.

Questo sistema genera un segnale di acquisto (+1) nel caso in cui la media mobile semplice (SMA) breve
incrocia a rialzo la media mobile lunga.

Al contrario genera un segnale di vendita (-1) quando la media mobile breve incrocia a ribasso la media
mobile  lunga.

 
Traduco mediante le // le operazioni.

// definizione indicatori:

a=Average[breve](close)

b=Average[lunga](close)

// se la SMA breve incrocia a rialzo la SMA lunga ALLORA

IF a crosses over b THEN

// mi da Risultato  +1

R=+1

// ALTRIMENTI SE la SMA breve incrocia a ribasso la SMA lunga ALLORA

ELSIF a crosses under b THEN

// mi da risultato -1

R=-1

// ALTRIMENTI

ELSE

// mi da risultato nullo 0

R=0

// CHIUDO ISTRUZIONI

ENDIF

RETURN R

Come vedete, prima di tutto elenco gli indicatori che mi servono per determinare i segnali.

Poi descrivo le condizioni mediante le istruzioni condizionate.

In questo caso ci sono 2 condizioni (i 2 incroci di SMA) e 3 risultati R (+1, -1, 0).

Devo in seguito definire le variabili (breve) e (lunga) delle SMA.


Metto dei valori di default che possono essere 5 per la breve e 20 per la lunga.

Clicco su CONVALIDA PROGRAMMA e si apre la finestra di settaggio degli indicatori.

Qui posso cambiare colori, stile (da linea ad istogramma), eliminare od aggiungere zone di colore, inserire
linee orizzontali, ecc...

Ecco creato l'indicatore binario ad istogramma.

Gli istogrammi verdi sono i segnali di acquisto, mentre quelli rossi sono segnali di vendita.

E' anche possibile dare un nome a R nel seguente modo:

RETURN R AS "NOME".

IMPORTANTE:

Una volta impostati i colori e gli stili del vostro indicatore, cliccate sull'opzione APPLICA QUESTA
CONFIGURAZIONE AGLI ALTRI INDICATORI.

Facendo così il vostro indicatore rimarrà in memoria con gli utlimi settaggi altrimenti ritornerà con quelli di
default.

 
 

Vediamo ora un sistema di trading in cui vengono implicati 4 segnali.

Uno di entrata in posizione di acquisto (long).

Uno di uscita dalla posizione di acquisto (exit long).

Uno di entrata in vendita (short).

Uno di uscita dalla vendita (exit short).

Per questo sistema devo avere quattro condizioni da settare:

Voglio acquistare quando il prezzo chiude sopra la resistenza a 50 giorni.

Voglio uscire dalla posizione long quando il prezzo incrocia a ribasso la media mobile a 10 periodi (Lo
utilizzo come stop e trailing profit).

Voglio vendere quando il prezzo chiude sotto il supporto di 50 giorni.

Voglio uscire dalla posizione short quando il prezzo incrocia a rialzo la media mobile a 10 periodi (Lo utilizzo
come stop e trailing profit).

Voglio inoltre inserire i periodi come variabili in modo da poter cambiare i settaggi.

Per prima cosa inserisco gli indicatori che mi servono per questi segnali.

// definizione indicatori:

prezzo=close[0]

resistenza=highest[x](high)[1]

supporto=lowest[x](low)[1]

trailin=average[y](close)

// SE il prezzo è superiore alla resistenza, ALLORA


IF prezzo > resistenza THEN

// RISULTATO +2

R=+2

// ALTRIMENTI SE il prezzo incrocia a ribasso la media mobile, ALLORA

ELSIF prezzo crosses under trailin THEN

// risultato -1

R=-1

// ALTRIMENTI SE il prezzo è inferiore al supporto, ALLORA

ELSIF prezzo <supporto THEN

// RISULTATO -2

R=-2

// ALTRIMENTI SE il prezzo incrocia a rialzo la media mobile, ALLORA

ELSIF prezzo crosses over trailin THEN

// RISULTATO +1

R=+1

// ALTRIMENTI

ELSE

// RISULTATO 0

R=0

// CHIUDO ISTRUZIONI
ENDIF

RETURN R

Definiamo le variabili di default e scegliamo stile e colori dell'indicatore.

Le barre più lunghe sono le entrate in posizione long e short.

Quelle più piccole sono le uscite.

Ovviamente vanno ignorate le barre piccole quando non siamo in posizione.

Convalidiamo e cambiamo i settaggi dell'indicatore e clicchiamo su:

APPLICA QUESTA CONFIGURAZIONE AGLI ALTRI INDICATORI.

Vediamo ora un esempio con alcuni pattern di candele reversals che abbiamo programmato nel capitolo
precedente, per esempio:

l'engulfing, hammer e swing point low per il segnale rialzista,


mentre l'engulfing, shooting star e swing point high per il segnale ribassista.

In questo caso il nostro indicatore ci segnalerà la formazione di tutti i patterns di prezzo che vogliamo.

// definizione indicatori:

// engulfing pattern rialzista (anche reversal day)

C1=range[0]>=range[1] AND close[1]<open[1] AND close[0]>open[0] AND open[0]<=close[1] AND


close[0]>=open[1]

// hammer rialzista

C2 = close[1]<open[1] AND open[0]>low[0]+(range*0.66) AND close[0]>low[0]+(range*0.66) AND


range[0]>abs(open-close)*4 AND low[0]<low[1]

// swing point low + one white soldier (rialzista)

C3 = close[2]<open[2] AND low[2]>low[1] AND low[0]>low[1] AND close[0]>open[0] AND


close[0]>high[1] AND high[2]>high[1] AND high[0]>high[1] AND high[0]>high[2] AND close[0]>open[2]
AND close[0]>=low[0]+(range[1]*0.50)

// engulfing pattern ribassista (anche reversal day)

C4=range[0]>=range[1] AND close[1]>open[1] AND close[0]<open[0] AND open[0]>=close[1] AND


close[0]<=open[1]

// shooting star ribassista

C5 = close[1]>open[1] AND open[0]<high[0]-(range*0.66) AND close[0]<high[0]-(range*0.66) AND


range[0]>abs(open-close)*4 AND high[0]>high[1]

// swing point high + one white soldier (ribassista)

C6 = close[2]>open[2] AND high[2]<high[1] AND high[0]<high[1] AND close[0]<open[0] AND


close[0]<low[1] AND low[2]<low[1] AND low[0]<low[1] AND low[0]<low[2] AND close[0]<open[2] AND
close[0]<=high[0]-(range[1]*0.50)

 
// range del pattern rialzista maggiore al valore di volatilità ATR

C7= range[0]>averagetruerange[Y](close)*1

// identificazione patterns rialzisti

IF (C1 OR C2 OR C3) AND C7 THEN

// risultato +1

R=+1

// identificazione patterns ribassisti

ELSIF (C4 OR C5 OR C6) AND C7 THEN

// risultato -1

R=-1

ELSE

R=0

ENDIF

RETURN R AS "PATTERN"

Inseriamo la variabile dell'ATR, Y, per la grandezza del range del pattern reversal e se volete settate il
moltiplicatore a vostro piacimento (es: *1,5)  e convalidiamo.

Cambiamo i settaggi dell'indicatore e clicchiamo su APPLICA QUESTA CONFIGURAZIONE AGLI ALTRI


INDICATORI.

 
2 - ELABORAZIONE DI DATI

E' possibile sempre tramite un grafico sottostante il grafico del prezzo, elaborare i dati riguardante il prezzo
stesso o di altri indicatori come per esempio fa l'ATR (Average True Range) oppure il ROC (Rate Of Change).

Esempio:

voglio determinare la differenza tra due medie mobili oppure tra una media mobile ed il prezzo di chiusura.

Voglio fare questo per capire se due medie mobili si stanno avvicinando.

Lo stesso per il prezzo e la media mobile.

Si tratta quindi per entrambi i casi di una semplice sottrazione.

// media mobile a breve periodo - media mobile a lungo periodo

A=average[breve]-average[lunga]

return A

 
// prezzo - media mobile

A=close-average[x]

return A as "differenza"

Posso impostare il grafico ad istogramma od a linee.

Inserisco una linea di valore 0 e setto i colori verde quando il valore è positivo (incrocio a rialzo) e rosso
quando il valore è negativo (incrocio a ribasso).

DISTANZA MEDIA MOBILE-PREZZO GRAFICO A LINEA


DISTANZA TRA 2 MEDIE MOBILI GRAFICO AD ISTOGRAMMA

La stessa cosa può essere fatta per esempio con supporti e resistenze del canale di donchian.

// resistenza - supporto

A=highest[x](high)-lowest[x](low)

return A

2) ROC IN PIPS

Un altro esempio è quello di determinare la differenza tra la chiusura di oggi e quella di N periodi
precedenti ma in pips (per il mercato forex).

E' praticamente l'indicatore ROC ma espresso in pips.

Le variabili sono:

X: il periodo

Y: il moltiplicatore, 10000 per i cross con 4 cifre dopo la virgola e 100 per i cross con 2 cifre dopo la virgola
(es: JPY)
 

A=(close[0]-close[x])*y
return A as "rocpips"

3) PREZZO STOP LOSS IN ATR

Un altro esempio è quello relativo alla determinazione del prezzo di stop loss.

Molti traders determinano lo stop loss in base all'indicatore di volatilità Average True Range (ATR).

In pratica designano lo stop loss (per un trade long) sottraendo al minimo od al prezzo di chiusura al
momento dell'apertura di un trade, oppure aggiungendo al massimo od al prezzo corrente (per un trade
short) il valore di un multiplo dell'ATR.

Quindi costruiamo un indicatore che ci dica subito il livello di prezzo dello stop loss per il trade, senza
calcolare noi ogni volta il prezzo.

Per fare questo basta creare il codice che veda entrambi i prezzi sia in direzione long che in direzione short.

//definizione indicatori
A=high
b=low
c=averagetruerange[periodoATR](close)
d=moltiplicatore
// calcolo stop loss posizione long
e=b-(c*d)
// calcolo stop loss posizione short
f=a+(c*d)
return e as "stoplosslong", f as "stoplossshort"

Inseriamo le variabili con i valori predefiniti:

periodoATR

moltiplicatore

Convalidiamo e settiamo i colori delle linee di prezzo dello stop loss.

La linea rossa sarà lo stop loss in caso di trade short.

Quella blu sarà lo stop loss in caso di trade long.


 

4) VOLATILITY FACTOR

Un altro strumento interessante è il volatility factor.

Esso determina la distanza tra massimo e minimo di un periodo (designato dal canale di Donchian) in %.

Questo indicatore è utile da utilizzare anche negli screeners per definire periodi di bassa o alta volatilità.

La bassa volatilità è segnale di trading range, l'alta volatilià di trend.

Aggiungendo una media mobile all'indicatore possiamo determinare se la volatilità è maggiore o minore
della media di periodo.

 
// volatility factor

upper=highest[x](high)[1]
lower=lowest[x](low)[1]
volatilityfactor= ((upper-lower)/close)*100
return volatilityfactor

5) % DI MOVIMENTO MEDIA MOBILE

Un altro indicatore utilissimo è quello che calcola la % di movimento del prezzo di una media mobile
esponenziale (o qualunque altra), dal periodo corrente ad un periodo precedente Y.

Anche questo indicatore può essere utilizzato per lo screeneing di mercato.

Quando l'istogramma aumenta sopra lo 0 il trend è in fase up, quando aumenta in senso contrario, sotto lo
0, il trend è in fase down.

emaX = exponentialaverage[X](CLOSE)
emaXPrev = ExponentialAverage[X][Y]
PercentageMove = (((emaX - emaXPrev) / emaXPrev) * 100)

Return PercentageMove
 

3 - INDICATORI LINEARI SUL GRAFICO DEL PREZZO

Ora che avete appreso le basi per l'indicatore di segnali e di elaborazione dati vediamo la tipologia degli
indicatori sul prezzo.

Questa tiplogia di indicatore viene rappresentata sul grafico del prezzo.

E' il classico indicatore lineare come la media mobile od i canali di donchian.

Ricordo che vanno inseriti tramite l'icona della chiave inglese altrimenti vengono visualizzati di default in
una finestra separata sotto il grafico del prezzo.

Vediamo degli esempi.

Vogliamo creare un indicatore che replica il famoso donchian channels ma applicato ai prezzi di chiusura
invece che a massimi e minimi.

Il codice per il donchian channels è il seguente:


 

//Resistenza:

resistenza= highest[x](high)[1]

//Supporto:

supporto=lowest[x](low)[1]

//Linea mediana:

mediana=((highest[x](high)[1])+(lowest[x](low)[1]))/2

return resistenza, supporto, mediana

Nel caso utilizziate il grafico col solo prezzo di chiusura (a linee) adattiamo gli algoritmi precedenti ai prezzi
di chiusura:

//Resistenza:

resistenza=highest[x](close)[1]

//Supporto:

supporto=lowest[x](close)[1]

//Linea mediana:

mediana=((highest[x](close)[1])+(lowest[x](close)[1]))/2

return resistenza, supporto, mediana

Dove X rappresenta il periodo del canale ed il [1] rappresenta il periodo precedente.

Settiamo i parametri ed i colori e li salviamo.

 
 

Se vogliamo applicare una lisciatura su supporti e resistenze del canale per farle diventare curve come delle
envelopes, possiamo applicare una media mobile ai valori dei canali direttamente nel comando return,
impostando poi anche la variabile della media mobile Y:

return average[y](resistenza) , average[y](supporto), average[y](mediana)

oppure fare dei codici prima del comando RETURN.

//Resistenza:

resistenza=highest[x](close)[1]

//Supporto:

supporto=lowest[x](close)[1]

//Linea mediana:

mediana=((highest[x](close)[1])+(lowest[x](close)[1]))/2

// lisciatura resistenza
lisciares=average[y](resistenza)

// lisciatura supporto

lisciasupp=average[y](supporto)

// lisciatura mediana

lisciamed=average[y](mediana)

return lisciares, lisciasupp, lisciamed

Vediamo ora alcuni indicatori importanti lineari che fungono da stop loss e trailing profit e che possono
essere utili da studiare.

Essi sono dei veri e propri sistemi di trading di tipo stop and reverse come il parabolic SAR e sono costruiti
(come il volatility stop) sull'indicatore ATR.

Il primo è il SUPERTREND il cui codice ho trovato proprio sul sito di prorealcode.

Sebbene il principio di questo indicatore sia abbastanza facile ed intuitivo, i codici che lo compongono sono
abbastanza elaborati.
Questa versione può essere usata solo con la piattaforma v10.3 o versione superiore.

E' disponibile nella stessa pagina anche il codice per la versione v10.2.

In base al fatto che il trend sia rialzista o ribassista, l'indicatore si posiziona al di sopra o al di sotto del
prezzo medio ad una distanza pari all'ATR moltiplicata per un coefficiente (multiplier).

Man mano che il trend prosegue, la linea supertrend porsegue nella stessa direzione mantenendosi alla
distanza impostata.

Se il prezzo ritraccia, il supertrend rimane fermo facendo da stop profit.

Le impostazioni di default sono:

3 per il multiplier e

10 per il periodo dell'ATR.

Ecco il codice:

multiplier=X

period=Y

moy=averagetruerange[period](close)

price=medianprice

up=price+multiplier*moy

dn=price-multiplier*moy

once trend=1

if close>up[1] then

trend=1

elsif close<dn[1] then

trend=-1

endif

if trend<0 and trend[1]>0 then


flag=1

else

flag=0

endif

if trend>0 and trend[1]<0 then

flagh=1

else

flagh=0

endif

if trend>0 and dn<dn[1] then

dn=dn[1]

endif

if trend<0 and up>up[1] then

up=up[1]

endif

if flag=1 then

up=price+multiplier*moy

endif

if flagh=1 then

dn=price-multiplier*moy

endif

if trend=1 then

mysupertrend=dn

else

mysupertrend=up

endif
if mysupertrend > mysupertrend[1] then

elsif mysupertrend < mysupertrend[1] then

endif

return mysupertrend as "SuperTrend"

_________________________________________________________________________________

Il secondo indicatore è il VOLATILITY STOP.

E' lo stesso codice del Supertrend con la differenza che si applica ai prezzi di chiusura. Quindi basta
sostituire l'istruzione "medianprice" con l'istruzione "close" nella quarta riga:

price=medianprice

price=close

Nel grafico sotto metto in comparazione i due indicatori.

La linea rossa è il supertrend, quella blu è il volatility stop settati con gli stessi parametri: 3 e 10.

Come potete vedere le differenze sono minime.

 
_________________________________________________________________________________

Il terzo indicatore lineare che voglio illustrarvi è il famoso ABRAHAM indicator e funziona similmente agli
altri due.

Ho trovato due versioni di questo indicatore, che sono abbastanza diverse fra loro.

La prima sul forum di finanzaonline su cui alcuni utenti hanno postato degli indicatori per prorealtime
incluso questo.

Anche in questo caso vanno impostate le variabili:

ATRMult (moltiplicatore) e

ATRLen (periodo dell'ATR).

Riporto qui il codice:

ATRMult=3

ATRLen=21
ONCE HClose=Close

ONCE LClose=Close

ONCE Value2= HClose - Value1

Value1=ATRMult * average[ATRLen](AverageTrueRange[ATRLen])

IF CLOSE > HClose THEN

HClose = CLOSE

ENDIF

IF CLOSE < LClose THEN

LClose = CLOSE

ENDIF

IF CLOSE <= Value2 THEN

Value2= LClose + Value1

HClose=CLOSE

ELSE

Value2=HClose - Value1

LClose=CLOSE

ENDIF

Col=SGN (Value2 - Close)

RETURN value2 AS "Abraham Trend"

Sotto comparo invece l'Abraham indicator (blu) con il supertrend (rosso).

Come potete vedere anche in questo caso le linee sono simili, anche se la Abraham indicator line risulta più
curva in certi passaggi di prezzo.

 
 

La seconda versione chiamata anche TREND TRADER (non so a questo punto se è un indicatore diverso, ma
è sempre di Andrew Abraham) l'ho trovata sempre sul sito prorealcode, da cui vi riporto il codice:

avrTR = weightedaverage[Length](AverageTrueRange[1](close))

highestC = highest[Length](high)

lowestC = lowest[Length](low)

hiLimit = highestC[1]-(avrTR[1]*Multiplier)

lolimit = lowestC[1]+(avrTR[1]*Multiplier)

if(close > hiLimit AND close > loLimit) THEN

ret = hiLimit

ELSIF (close < loLimit AND close < hiLimit) THEN

ret = loLimit

ELSE

ret = ret[1]

ENDIF
RETURN ret as "Trend Trader"

Anche in questo caso le variabili sono:

Length

Multiplier

Vediamo le differenze tra i due.

In blu è visualizzato l'abraham indicator, mentre in rosso il trend trader.

Come possiamo notare, le linee supertrend e volatility stop rimangono fisse, mentre gli ultimi due indicatori
possono anche retrocedere di qualche unità, soprattutto l'Abraham indicator, che forma anche linee curve.

4 - OSCILLATORE A PISTA CICLICA

 
Questa tipologia di indicatore viene rappresentata direttamente sotto il grafico del prezzo e quindi può
essere aggiunto direttamente tramite l'icona indicatori.

Vediamo ora come creare un oscillatore, cioè un indicatore a pista ciclica compreso tra due fasce di valori.

Questo oscillatore di mia invenzione chiamato "trend/volatility" è una variante del Rate of change (ROC) in
cui metto in rapporto il valore della performance dello strumento su un dato periodo (cioè il ROC) con la
volatilità del trend espressa dal valore più alto e più basso (massimi e minimi assoluti) dello stesso periodo.

Il rapporto è espresso in % ed oscilla tra i valori di +100 e -100 che rappresentano anche la direzione e la
forza di uptrend e downtrend.

Più l'uptrend è forte, più s'avvicina +100 e quindi possiamo considerarlo ipercomprato.

Al contrario, più il downtrend è forte, più s'avvicina -100 e quindi possiamo considerarlo ipervenduto.

Quando la linea oscilla constantemente tra +50 e -50 il prezzo è da considerarsi in trading range.

Quando il prezzo dopo una fase di forte ipercomprato o ipervenduto riscende dal valore +50 o risale dal
valore -50 un'inversione di tendenza è chiaramente in atto.

E' più adatto ai trend di lungo periodo.

La formula:

// definizione roc (performance) di X periodi

A=ROC[X]

// definizione più alto valore di chiusura di X periodi


b=HIGHEST[X](high)[0]

// definizione più basso valore di chiusura di X periodi


c=LOWEST[x](low)[0]

// determinazione del periodo tra il più alto e più basso valore: (volatilità)
d=b-c

// determinazione rapporto tra performance e volatilità


e= 100/C*D

trasformazione in % del rapporto tra roc e volatilità


F=(A/E)*100
//lisciatura con media mobile esponenziale di Y periodi
g=exponentialaverage[Y](F)
return g

Con X variabile per il periodo di analisi del trend da impostare.

Y è il periodo della media mobile esponenziale per la lisciatura dei dati.

Come potete vedere successivamente ho aggiunto le linee orizzontali di valore

di +100, +50, 0, -50 e -100 e le zone di colore sopra la linea +50 in verde, e sotto la linea -50 in rosso che
identificano le fasce di ipercomprato ed ipervenduto.

Questo indicatore è utile per misurare la forza del trend a rialzo o a ribasso,

definire zone di ipercomprato e ipervenduto e determinare eventuali divergenze col prezzo.

Nell'esempio ho settato i parametri a 252 (ciclo annuale) ed una lisciatura di 5 giorni (1 settimana).

Va utilizzato in comparazione e come strumento di conferma col grafico del prezzo:

TREND/VOLATILITY (252-5)

Potrebbero piacerti anche