Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1686

 
Aleksei Stepanenko #:
é maior ou igual a, porque o primeiro elemento da matriz também precisa ser levado em conta, e seu índice na matriz é zero.
Não entendo de que matriz todos estão falando aqui. Se a OrderTotal não funciona assim. Não é uma matriz, é uma função que devolve um número.
 
Aleksei Stepanenko #:
Não, está tudo bem. Se não houver posições, então i=OrdensTotal()-1 será igual a -1. E a condição de loop i>=0 não será executada imediatamente. E o programa não entrará no laço.
Mas isto não é correto, a "soma das ordens" é 1, ou seja, excluiremos sempre 1 ordem do laço.
 
Nerd Trader #:
Não entendo a que matriz todos estão se referindo aqui. Se a OrderTotal não funciona assim.

As ordens estão essencialmente em um array no programa, nós simplesmente não vemos isso. OrdensTotal é igual a ArraySize, e mostra o número total de elementos.

Em uma matriz, o índice do primeiro elemento começa sempre com zero, e o tamanho do último elemento menos um.

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

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

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

As ordens estão essencialmente em um array no programa, simplesmente não o vemos. OrdensTotal é igual a ArraySize, e mostra o número total de elementos.

O índice do primeiro elemento da matriz é sempre zero, enquanto o tamanho do último, respectivamente, é menos um.

Que diferença faz onde as ordens estão localizadas, se OrderTotal não é uma matriz. Ele retorna o número de pedidos, não o índice de matriz.

 
Nerd Trader #:
Mas isso não é correto, acontece que "soma de ordens" é 1, o que significa que 1 ordem será sempre excluída do laço.

os pedidos estão em uma lista numerada... A lista conta regressivamente a partir de 0...

Por exemplo

número de série 0, tipo de compra, lote 0,1

número de série 1, tipo de venda, lote 1

número de série 2, tipo de venda, lote 0,5

número de sequência 3, tipo de compra, lote 0,16

Se você agora chamar OrderTotal(), ele irá = 4

Mas se quisermos navegar por todas as linhas da lista, precisamos passar pelos números 0 1 2 3, o número 4 não está aqui... embora existam 4 ordens.

Então um truque é feito, ao montar um loop, menos 1 no número de pedidos, é isso...


Nerd Trader#:

Que diferença faz onde as ordens estão localizadas se o OrderTotal não é uma matriz. Ele retorna o número de pedidos, não o índice de matriz.

Correto, MAS há um fato implícito, tendo o número de pedidos você pode obter os números de todos os pedidos da lista
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2021.10.19
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
OrdersTotal é o número total, mas os índices em quase todas as linguagens de programação começam com 0, e não com 1. Acostume-se a isso. Volte uma unidade e pronto, e será o mesmo que você pensa.
 
Nerd Trader #:

Que diferença faz onde as ordens estão localizadas se o OrderTotal não é uma matriz

O número de pedidos e os números de pedidos na matriz são coisas diferentes. E também há ingressos)
 
Nerd Trader #:
Mas isto não é correto, você recebe "soma de pedidos" - 1, ou seja, 1 pedido será sempre excluído do laço.

Se você não gosta de "-1", você pode fazer isso

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

As ordens estão essencialmente em um array no programa, simplesmente não o vemos. OrdensTotal é igual a ArraySize, e mostra o número total de elementos.

Em uma matriz, o índice do primeiro elemento começa sempre com zero, e o tamanho do último - menos um.

Então, total e índice de matriz são coisas diferentes, por que você acha que é a mesma coisa? Para criar um array com 1 índice, digite 1, não 0, (int ar[1]), assim ArraySize( ar ) também retorna 1, não 0.

 
MakarFX #:

Se você não gosta de "-1", você pode

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

não é correto... um pedido com o número 0 será pulado...

A maneira correta é -

for(int i = OrdersTotal()-1; i >= 0 ; i --)
 {
 }
Razão: