新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1686

 
Aleksei Stepanenko #:
大于或等于,因为数组的 第一个元素 也需要被考虑,它在数组中的索引是0。
我不明白大家在这里谈论的是什么阵列。如果OrdersTotal不这样做。这不是一个数组,是一个返回数字的函数。
 
Aleksei Stepanenko #:
不,没关系的。如果没有位置,那么i=OrdersTotal()-1 将等于-1。而循环条件i>=0将不会被立即执行。而程序将不会进入循环。
但这是不正确的,"订单之和 "是1,也就是说,我们将永远从循环中排除1个订单。
 
Nerd Trader #:
我不明白大家在这里指的是什么阵列。如果OrdersTotal不这样做。

订单本质上是在程序中的一个数组中,只是我们没有看到。OrdersTotal等于ArraySize,显示元素的总数。

在一个数组中,第一个元素的索引总是从0开始,而最后一个元素的大小则是减去1。

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

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

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

订单本质上是在程序中的一个数组中,只是我们没有看到。OrdersTotal等于ArraySize,显示元素的总数。

数组中第一个元素的索引始终为零,而最后一个元素的大小分别为负一。

如果OrdersTotal不是一个数组,那么订单的位置有什么区别呢?它返回订单的数量,而不是数组的索引。

 
Nerd Trader #:
但这是不正确的,事实证明 "订单之和 "是1,这意味着1个订单将永远被排除在循环之外。

订单是在一个编号的列表中...列表从0开始倒数...

比如说

序列号0,购买类型,批量0.1

序号1,出售类型,批号1

序号2,出售型,批号0.5

序号3,买入型,手数0.16

如果你现在调用OrdersTotal(),它将=4

但如果我们想浏览列表的所有行,我们需要通过数字0 1 2 3,数字4不在这里......虽然有4个订单。

所以做了一个诀窍,当把一个循环放在一起时,在订单数量上减去1,就是这样......。


书呆子交易#:

如果OrdersTotal不是一个数组,订单的位置有什么区别呢?它返回订单的数量,而不是数组的索引。

正确,但有一个隐含的事实,有了订单的数量,你可以得到列表中所有订单的数量。
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2021.10.19
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
OrdersTotal 是总数,但几乎所有编程语言的索引都是从0开始,而不是1。习惯就好了。向后移动一个单位,就这样,就会和你想的一样。
 
Nerd Trader #:

如果OrdersTotal不是一个数组,那么订单的位置有什么区别呢?

在一个数组中,订单的数量和它们的序号是不同的东西。而且还有门票)
 
Nerd Trader #:
但这是不正确的,事实证明,"订单之和 "是1,这意味着1个订单将永远被排除在循环之外。

如果你不喜欢"-1",你可以这样做

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

订单本质上是在程序中的一个数组中,只是我们没有看到。 OrdersTotal等于ArraySize,显示元素的总数。

在一个数组中,第一个元素的索引总是从零开始,而最后一个元素的大小--减一。

所以总数和数组索引是不同的东西,为什么你认为它是一样的?要创建一个索引为1的数组,要输入1,而不是0,(int ar[1]),所以ArraySize( ar ) 也会返回1,而不是0。

 
MakarFX #:

如果你不喜欢"-1",你可以

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

这是不正确的...数字为0的订单将被跳过...

正确的方法是--

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