Discussione sull’articolo "Indicatori Personalizzati in MQL5 per Principianti" - pagina 2

 
serg7771959:

Nicholas!

Puoi dirmi perché quando provo a riempire un array di indicatori in un ciclo usando la formula Mass[ i ]= Mass[ i+1]+A; dove A è una variabile, la compilazione va a buon fine senza errori, ma quando unisco la finestra ottengo il messaggio array out of range (array fuori range)?


Perché il ciclo deve essere realizzato tenendo conto della cella in cui verrà effettuato l'ultimo inserimento. Se la dimensione dell'array Mass[], diciamo, è 10, il ciclo va da zero a 9 (questo è l'indice dell'ultima cella dell'array), quindi a i==9, si tenta di scrivere nella cella con l'indice 9+1. L'array non ha la cella 10. Quindi si ottiene un'uscita al di fuori dell'array.
 
Abbiamo bisogno di più tutorial come questo!!!
 

Nikolay, grazie. È un ottimo tutorial!
Ma penso che quella variabile

const int begin

sarà sempre a valore zero, nel codice. È significativo per il calcolo?

 
igorsds:

Nikolay, grazie. È un ottimo tutorial!
Ma credo che quella variabile

sarà sempre a valore zero, nel codice. È significativo per il calcolo?

Il valore di "begin" sarà diverso a seconda dell'indicatore applicato. Se si applica all'RSI,"begin" sarà 14, ad esempio.

 

Se si prova a compilare per la prima volta, è possibile che si verifichi un errore di buffer. Modificare quindi la quantità di buffer:

#property indicator_buffers 2

In seguito, è possibile tornare a 1 (uno) buffer:

#property indicator_buffers 1

 
Come si combina con fibo zigzag
 

Non capisco. Supponiamo che

rates_total == MA_Period - 1

e questa è la prima chiamata della funzione, quindi

prev_calculated == 0

e anche begin == 0

allora la condizione nel primo if(rates_total < MA_Period - 1 + begin) viene valutata come falsa

allora

verrebbe eseguitofirst = MA_Period - 1

ma poi NESSUN CALCOLO perché la condizione nel primo ciclo for è valutata falsa.

Penso che la prima condizione if dovrebbe essere

if( rates_total < MA_Period + begin )

Mi sfugge qualcosa?

 

E un'altra cosa. Perché dovrei iniziare a calcolare dalla barra con il numero (prev_calculated - 1), se ho già calcolato l'indicatore prev_calculated volte?

Ad esempio, ho calcolato l'indicatore 5 volte per le barre 0, 1, 2, 3 e 4. Non ho bisogno di calcolarlo di nuovo alla barra 4. Dovrei continuare dalla barra 5.

 
LRDPRDX #:

E un'altra cosa. Perché dovrei iniziare il calcolo dalla barra con il numero (prev_calculated - 1), se ho già calcolato l'indicatore prev_calculated volte?

Per esempio, ho calcolato l'indicatore 5 volte per le barre 0, 1, 2, 3 e 4. Non ho bisogno di calcolarlo di nuovo alla barra 4. Dovrei continuare dalla barra 5.

Ok. Penso di non essere nel giusto, perché la quarta barra potrebbe essere stata modificata dall'ultimo calcolo. Quindi il (prev_calculated - 1) sembra corretto.
 
Truffe all ordine del giorno. Bravi