Ciao Roberto, eccomi qui. Questi giorni sono un po’ …
… infernali per me! Spero di aver più tempo questa sera.
Intanto provo a rispondere alle tue domande.
In merito alla variabile percent hai perfettamente ragione: il tuo suggerimento sicuramente contribuisce a migliorare il codice.
Ora provo a spiegarti la logica dell’indicatore (e nel contempo, rispondo anche alla domanda sulla variabile Lower).
Lo scopo è quello di segnalare massimi (picchi) e minimi (valli) dei prezzi di chiusura di un’attività finanziaria su qualunque time frame. Che caratteristiche devono avere questi punti di estremo?
Ad esempio, un picco, per essere tale, quali caratteristiche deve avere? Due:
a. deve essere maggiore, rispetto al minimo (valle) precedente, almeno della percentuale percent;
b. deve essere superiore, rispetto al minimo (valle) successivo, almeno della percentuale percent.
Quando l’indicatore intercetta un tale massimo pone, sulla barra o candela corrispondente, una freccia orientata verso il basso di colore rosso, ad una distanza di rge/2 dal massimo di tale candela.
Quando l’indicatore intercetta, invece, un minimo, pone, sotto la barra o candela corrispondente, una freccia orientata verso l’alto di colore verde, ad una distanza di rge/2 dal minimo di tale candela.
Ora, analizziamo il codice.
Le prime tre righe dovrebbero essere chiare.
Alla riga 4 incontriamo la variabile direzione. All’inizio tale variabile è nulla e, quindi, sono simultaneamente soddisfatte le condizioni testate in riga 4 e in riga 22: ciò in quanto il programma, inizialmente, non sa se cercare un massimo o un minimo.
In riga 5 pone, nella variabile Higher, il massimo tra il prezzo di chiusura e la variabile Higher stessa. Dal momento che, inizialmente, Higher è nulla, in Higher verrà copiato il valore della close della prima barra. Nelle barre successive, invece, ProBuilder andrà a porre, in Higher, il valore della close della barra corrente solo se questo è maggiore di quanto contenuto nella variabile Higher. In questo modo, ogni volta che troviamo una close più alta, la memorizziamo in Higher andando a “ricoprire” il valore precedente.
In riga 6 confrontiamo il valore di Higher della barra corrente con quello della barra immediatamente precedente. Se sono diversi, memorizziamo (in riga 7) nella variabile PiccoBarra l’ordine della barra corrente. Se sono diversi vuol dire che il valore di Higher della barra in corso è sicuramente maggiore rispetto a quello della barra precedente; ciò in quanto l’aggiornamento di Higher viene fatto tutte le volte che si trova una close maggiore del valore di Higher della barra precedente. Abbiamo trovato un possibile “candidato” per il picco che stiamo cercando e ne memorizziamo il valore (close) in Higher e il tempo (barindex) in piccoBarra.
Le righe 8 e 9 chiudono i due cicli.
In riga 11 calcoliamo la variazione percentuale della close corrente rispetto al valore assunto dalla variabile Higher e poniamo tale variazione in PiccoPercento. Ed in riga 12 inizializziamo una variabile logica: NuovoPicco. Questa variabile sarà vera quando PiccoPercento avrà superato la percentuale impostata (nell’esempio del codice postato è l’1%).
In riga 14 testiamo il valore della variabile logica NuovoPicco. Se questa è vera vuol dire che il nostro “candidato” picco è divenuto a tutti gli effetti un nuovo picco e lo confermiamo. Se la condizione è verificata, pertanto, eseguiamo tre azioni:
1. azzeriamo la variabile Higher che dovrà essere pronta per contenere il valore del successivo picco;
2. poniamo direzione eguale ad 1 in modo da testare, nel prosieguo delle barre successive, soltanto la presenza di una Valle;
3. Disegniamo la freccia secondo le specifiche prima indicate.
In riga 21 c’è una particolarità che però è importante ai fini del buon funzionamento del programma. La variabile Lower, deputata a contenere il valore della close di una Valle, viene inizializzata non a zero ma al valore della close corrente. Se invece la inizializzassimo a zero, il programma non riuscirebbe a trovare nessuna Valle: ciò in quanto non abbiamo close negative!
In riga 22 eseguiamo il test della variabile direzione: se questo è non positivo vuol dire che dobbiamo cercare una Valle.
In riga 23, nella variabile Lower, viene posto il minimo tra il prezzo di chiusura e la variabile Lower stessa. Dal momento che, inizialmente, Lower è pari alla close della prima barra, in Lower verrà copiato il valore della close della barra in esame solo se questa risulta inferiore. In questo modo, ogni volta che troviamo una close più bassa, la memorizziamo in Lower andando a sostituire il valore precedente.
A questo punto il resto del programma dovrebbe essere chiaro. Una sola ed ultima specificazione in merito alla riga 33. Questa è la corrispondente della riga 15. Solo che in questo caso dobbiamo reinizializzare la variabile Lower, dopo aver trovato una Nuova Valle, ad un valore teoricamente infinito. Dal momento che questo non è possibile, l’ho inizializzata ad una valore comunque molto alto.
Spero di non aver tralasciato nulla.
Ora devo scappare perchè sono in gran ritardo.
Grazie Roberto, per il tempo che mi vorrai dedicare.
Una buona giornata.
🙂