Ciao Lady... allora, andiamo per ordine

Ho buttato giu un pò di codice, qui potrai scaricare l'indicatore completo:
PriceLevel.mq4
(come puoi notare ho commentato diverse parti di codice proprio perché, come dicevamo, l'importante per ora è sapere quali siano i livelli migliori. Per disegnare le linee basterà usare le funzioni che ti ho predisposto).
Procedo con la spiegazione.
A noi serviva un modo per attribuire al prezzo di chiusura un giusto "peso", praticamente ho creato un array bidimensionale chiamato: prices[10][2] dove andremo a salvare PREZZO e NUMERO RIPETIZIONI.
Alla fine il risultato dovrebbe essere ad esempio:
1.2050 - 4
1.2340 - 3
1.2550 - 2
ecc ecc
dove quel numero accanto al prezzo indica proprio il numero di volte che quel prezzo si ripete.
Ora passo alla spiegazione del codice dell'indicatore.
- Codice: Seleziona tutto
extern int MARGIN = 2;
extern int PERIOD = 90;
extern color COLOR = DarkBlue;
-
MARGIN: Numero di pip di margine. Praticamente quando sarà fatta la lettura del prezzo di chiusura conterà tutti gli altri prezzi all'interno del range PREZZO+MARGIN e PREZZO-MARGIN
-
PERIOD: Semplicemente il numero delle barre da prendere in cosiderazione. Fai attenzione che l'indicatore si adatta al time frame del grafico.
-
COLOR: Il colore che vuoi usare per le linee
Ora passiamo al cuore dell'indicatore:
- Codice: Seleziona tutto
for(int i=0; i < Bars-bar && i < PERIOD; i++){
close = Close[i];
exists = false;
for(int c=0;c <= counter; c++){
if (prices[c][0]+(Poin*MARGIN) >= close && prices[c][0]-(Poin*MARGIN) <= close){
prices[c][1] += 1;
exists = true;
break;
}
}
if (!exists) add(close);
}
praticamente in questo loop, come accennato in precedenza, vado a scorrere il numero delle barre impostate, poi faccio la lettura del prezzo di chiusura tramite l'array Close[], e poi vado a controllare nel mio array (dove salvo prezzo - ripetizioni) se il prezzo di chiusura è compreso nel range di un altro preso in precedenza. Se è compreso allora incremento il numero di ripetizioni di 1, altrimenti lo aggiungo nell'array prices.
Una volta trovati i prezzi e conteggiati, avremo un array disordinato, quindi tramite il seguente codice:
- Codice: Seleziona tutto
for(i=0; i<=counter-1; i++){
for(c=i; c<=counter; c++){
if (prices[i][1] < prices[c][1]){
p = prices[c][0];
times = prices[c][1];
prices[c][0] = prices[i][0];
prices[c][1] = prices[i][1];
prices[i][0] = p;
prices[i][1] = times;
}
}
}
andremo a spostare i vari prezzi ordinandoli da quello più ripetuto a quello meno.
La funzione
add() diciamo è una funzione intelligente, praticamente autodimensiona l'array qualora i livelli siano maggiori del numero dichiarato.
- Codice: Seleziona tutto
double prices[10][2];
Ora, avendo l'array ordinato, ed avendo la funzione(
addLine()) che traccia una linea orizzontale al prezzo indicato. Credo ti venga facile concludere l'indicatore.
Sicuramente avrai qualche domanda da fare

Non ti preoccupare, per dubbi o altro, ti aiuto volentieri!
fammi sapere
Ciao
Questo messaggio ha dei contenuti visibli solo dagli iscritti, effettua il login oppure iscriviti.