Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1686

 
Aleksei Stepanenko #:
es mayor o igual que, porque también hay que tener en cuenta el primer elemento de la matriz, y su índice en la matriz es cero.
No entiendo de qué conjunto habla todo el mundo aquí. Si OrdersTotal no funciona así. No es un array, es una función que devuelve un número.
 
Aleksei Stepanenko #:
No, está bien. Si no hay posiciones, entonces i=Total de órdenes()-1 será igual a -1. Y la condición del bucle i>=0 no se ejecutará inmediatamente. Y el programa no entrará en el bucle.
Pero esto no es correcto, la "suma de órdenes" es 1, es decir, siempre excluiremos 1 orden del bucle.
 
Nerd Trader #:
No entiendo a qué conjunto se refiere todo el mundo aquí. Si OrdersTotal no funciona así.

Los pedidos están esencialmente en un array en el programa, sólo que no lo vemos. OrdersTotal es igual a ArraySize, y muestra el número total de elementos.

En un array, el índice del primer elemento siempre empieza por cero, y el tamaño del último elemento menos uno.

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

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

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

Los pedidos están esencialmente en un array en el programa, sólo que no lo vemos. OrdersTotal es igual a ArraySize, y muestra el número total de elementos.

El índice del primer elemento de la matriz es siempre cero, mientras que el tamaño del último, respectivamente, es menos uno.

Qué diferencia hay en la ubicación de los pedidos, si OrdersTotal no es un array. Devuelve el número de pedidos, no el índice del array.

 
Nerd Trader #:
Pero eso no es correcto, resulta que la "suma de órdenes" es 1, lo que significa que 1 orden siempre será excluida del bucle.

los pedidos están en una lista numerada... La lista cuenta desde 0...

Por ejemplo

número de serie 0, tipo de compra, lote 0.1

número de serie 1, tipo de venta, lote 1

número de serie 2, tipo de venta, lote 0,5

número de secuencia 3, tipo de compra, lote 0,16

Si ahora llama a OrdersTotal() será = 4

Pero si queremos navegar por todas las filas de la lista, tenemos que pasar por los números 0 1 2 3, el número 4 no está aquí... aunque hay 4 órdenes.

Así que se hace un truco, al armar un bucle, menos 1 en el número de órdenes, eso es...


Nerd Trader#:

Qué diferencia hay en la ubicación de los pedidos si OrdersTotal no es un array. Devuelve el número de pedidos, no el índice del array.

Correcto, PERO hay un hecho implícito, teniendo el número de pedidos se pueden obtener los números de todos los pedidos de la lista
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2021.10.19
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
OrdersTotal es el número total, pero los índices en casi todos los lenguajes de programación empiezan por 0, no por 1. Acostúmbrate a ello. Retrocede una unidad y ya está, y será lo mismo que crees.
 
Nerd Trader #:

Qué diferencia hay en la ubicación de los pedidos si OrdersTotal no es un array

El número de pedidos y los números de pedido en la matriz son cosas diferentes. Y también hay entradas)
 
Nerd Trader #:
Pero esto no es correcto, se obtiene "suma de pedidos" - 1, es decir, siempre se excluirá 1 pedido del bucle.

Si no te gusta el "-1", puedes hacer esto

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

Los pedidos están esencialmente en un array en el programa, sólo que no lo vemos. OrdersTotal es igual a ArraySize, y muestra el número total de elementos.

En un array, el índice del primer elemento siempre empieza por cero, y el tamaño del último - menos uno.

Así que el índice total y el índice de matriz son cosas diferentes, ¿por qué crees que es lo mismo? Para crear un array con 1 índice, escribe 1, no 0, (int ar[1]), por lo que ArraySize( ar ) también devuelve 1, no 0.

 
MakarFX #:

Si no te gusta el "-1", puedes

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

eso no es correcto... un pedido con el número 0 se saltará...

La forma correcta es la siguiente

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