Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1686

 
Aleksei Stepanenko #:
è maggiore o uguale a, perché anche il primo elemento della matrice deve essere preso in considerazione, e il suo indice nella matrice è zero.
Non capisco di quale matrice stiano parlando tutti qui. Se OrdersTotal non funziona così. Non è un array, è una funzione che restituisce un numero.
 
Aleksei Stepanenko #:
No, va bene. Se non ci sono posizioni, allora i=OrdersTotal()-1 sarà uguale a -1. E la condizione di loop i>=0 non sarà eseguita immediatamente. E il programma non entrerà nel ciclo.
Ma questo non è corretto, la "somma degli ordini" è 1, cioè escluderemo sempre 1 ordine dal ciclo.
 
Nerd Trader #:
Non capisco a quale matrice tutti si riferiscono qui. Se OrdersTotal non funziona così.

Gli ordini sono essenzialmente in un array nel programma, solo che non lo vediamo. OrdersTotal è uguale a ArraySize, e mostra il numero totale di elementi.

In una matrice, l'indice del primo elemento inizia sempre con zero, e la dimensione dell'ultimo elemento meno uno.

Пример: всего 5 ордеров, индексы: 0,1,2,3,4.

или массив из 5 элементов, индексы те же.

for(int i=5-1; i>=0; i--)
 
Aleksei Stepanenko #:

Gli ordini sono essenzialmente in un array nel programma, solo che non lo vediamo. OrdersTotal è uguale a ArraySize, e mostra il numero totale di elementi.

L'indice del primo elemento della matrice è sempre zero, mentre la dimensione dell'ultimo, rispettivamente, è meno uno.

Che differenza fa dove si trovano gli ordini, se OrdersTotal non è un array. Restituisce il numero di ordini, non l'indice dell'array.

 
Nerd Trader #:
Ma questo non è corretto, risulta che "somma degli ordini" è 1, il che significa che 1 ordine sarà sempre escluso dal ciclo.

gli ordini sono in una lista numerata... La lista conta alla rovescia da 0...

Per esempio

numero di serie 0, tipo di acquisto, lotto 0.1

numero di serie 1, tipo di vendita, lotto 1

numero di serie 2, tipo di vendita, lotto 0,5

numero di sequenza 3, tipo di acquisto, lotto 0,16

Se ora chiamate OrdersTotal() sarà = 4

Ma se vogliamo navigare attraverso tutte le righe della lista, dobbiamo passare attraverso i numeri 0 1 2 3, il numero 4 non è qui... anche se ci sono 4 ordini.

Così si fa un trucco, quando si mette insieme un ciclo, meno 1 sul numero di ordini, ecco fatto...


Nerd Trader#:

Che differenza fa dove si trovano gli ordini se OrdersTotal non è un array. Restituisce il numero di ordini, non l'indice dell'array.

Corretto, MA c'è un fatto implicito, avendo il numero di ordini si possono ottenere i numeri di tutti gli ordini nella lista
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2021.10.19
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
OrdersTotal è il numero totale, ma gli indici in quasi tutti i linguaggi di programmazione iniziano con 0, non con 1. Basta abituarsi. Spostatevi indietro di una unità e basta, e sarà la stessa cosa che pensate.
 
Nerd Trader #:

Che differenza fa dove si trovano gli ordini se OrdersTotal non è un array

Il numero di ordini e i numeri di ordine nell'array sono cose diverse. E ci sono anche i biglietti)
 
Nerd Trader #:
Ma questo non è corretto, si ottiene "somma degli ordini" - 1, cioè 1 ordine sarà sempre escluso dal ciclo.

Se non ti piace "-1", puoi fare così

for(int i = OrdersTotal(); i >= 1 ; i --)
 
Aleksei Stepanenko #:

Gli ordini sono essenzialmente in un array nel programma, solo che non lo vediamo. OrdersTotal è uguale a ArraySize, e mostra il numero totale di elementi.

In una matrice, l'indice del primo elemento inizia sempre con zero, e la dimensione dell'ultimo - meno uno.

Quindi il totale e l'indice dell'array sono cose diverse, perché pensi che sia la stessa cosa? Per creare un array con 1 indice, digitate 1, non 0, (int ar[1]), quindi anche ArraySize( ar ) restituisce 1, non 0.

 
MakarFX #:

Se non ti piace "-1", puoi

for(int i = OrdersTotal(); i > 0 ; i --)

non è corretto... un ordine con il numero 0 sarà saltato...

Il modo corretto è -

for(int i = OrdersTotal()-1; i >= 0 ; i --)
 {
 }
Motivazione: