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.
2) Elaborazione di dati.
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.
Questo tipo di indicatore è detto binario e viene posto sotto il grafico del prezzo.
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.
I comandi chiave per questa tipologia sono le istruzioni condizionate descritte a pagina 15 del manuale
probuilder:
IF : (SE)
ELSE : (ALTRO) : Istruzione per introdurre la seconda condizione in alternativa alla prima uscita di IF.
IF/THEN/ENDIF:
IF a THEN b
ENDIF
IF/THEN/ELSE/ENDIF:
IF a THEN b ELSE c
ENDIF
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)
// mi da Risultato +1
R=+1
// 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.
In questo caso ci sono 2 condizioni (i 2 incroci di SMA) e 3 risultati R (+1, -1, 0).
Qui posso cambiare colori, stile (da linea ad istogramma), eliminare od aggiungere zone di colore, inserire
linee orizzontali, ecc...
Gli istogrammi verdi sono i segnali di acquisto, mentre quelli rossi sono segnali di vendita.
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.
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 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)
// RISULTATO +2
R=+2
// risultato -1
R=-1
// RISULTATO -2
R=-2
// RISULTATO +1
R=+1
// ALTRIMENTI
ELSE
// RISULTATO 0
R=0
// CHIUDO ISTRUZIONI
ENDIF
RETURN R
Vediamo ora un esempio con alcuni pattern di candele reversals che abbiamo programmato nel capitolo
precedente, per esempio:
In questo caso il nostro indicatore ci segnalerà la formazione di tutti i patterns di prezzo che vogliamo.
// definizione indicatori:
// hammer rialzista
// range del pattern rialzista maggiore al valore di volatilità ATR
C7= range[0]>averagetruerange[Y](close)*1
// risultato +1
R=+1
// 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.
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.
A=average[breve]-average[lunga]
return A
// prezzo - media mobile
A=close-average[x]
return A as "differenza"
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).
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).
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"
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"
periodoATR
moltiplicatore
4) 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à.
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
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.
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
Ora che avete appreso le basi per l'indicatore di segnali e di elaborazione dati vediamo la tipologia degli
indicatori sul prezzo.
Ricordo che vanno inseriti tramite l'icona della chiave inglese altrimenti vengono visualizzati di default in
una finestra separata sotto il grafico del prezzo.
Vogliamo creare un indicatore che replica il famoso donchian channels ma applicato ai prezzi di chiusura
invece che a massimi e minimi.
//Resistenza:
resistenza= highest[x](high)[1]
//Supporto:
supporto=lowest[x](low)[1]
//Linea mediana:
mediana=((highest[x](high)[1])+(lowest[x](low)[1]))/2
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
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:
//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)
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.
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.
3 per il multiplier e
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
trend=-1
endif
else
flag=0
endif
flagh=1
else
flagh=0
endif
dn=dn[1]
endif
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
endif
_________________________________________________________________________________
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
La linea rossa è il supertrend, quella blu è il volatility stop settati con gli stessi parametri: 3 e 10.
_________________________________________________________________________________
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.
ATRMult (moltiplicatore) e
ATRMult=3
ATRLen=21
ONCE HClose=Close
ONCE LClose=Close
Value1=ATRMult * average[ATRLen](AverageTrueRange[ATRLen])
HClose = CLOSE
ENDIF
LClose = CLOSE
ENDIF
HClose=CLOSE
ELSE
Value2=HClose - Value1
LClose=CLOSE
ENDIF
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)
ret = hiLimit
ret = loLimit
ELSE
ret = ret[1]
ENDIF
RETURN ret as "Trend Trader"
Length
Multiplier
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.
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.
La formula:
A=ROC[X]
// determinazione del periodo tra il più alto e più basso valore: (volatilità)
d=b-c
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,
Nell'esempio ho settato i parametri a 252 (ciclo annuale) ed una lisciatura di 5 giorni (1 settimana).
TREND/VOLATILITY (252-5)