[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 492

 
hoz:

顺便说一句,是的...我已经在上面添加了这个函数的完整代码。

我想不这样写会更符合逻辑。

然后像这样设置循环。

对吗?只是,从零开始的位置数的计数器不被认为是这样的......这不符合逻辑,因此,没有理由混淆自己......

你必须归零,而不是归一,才能搜索到订单。

for(i=total; i>=0; i--)

一位专家曾向我解释说,我们正在搜索一个订单阵列,最好从一个较高的数字开始搜索。在数组中,第一个元素的索引是0(零),所以我们不应该达到1,这也是为什么我们应该去找OrdersTotal()-1,而不是简单的OrdersTotal()。

我的订单搜索是这样做的。

for (int i=OrdersTotal()-1; i>=0; i--)
 
paladin80:

你必须一直降到零,而不是一,才能搜索到订单。

一位专家曾经向我解释说,这是一个订单阵列,然后是的,最好从一个更大的数字开始。在数组中,第一个元素的索引是0(零),所以不是到1,也是因为这个原因,我们需要OrdersTotal() - 1,而不仅仅是OrdersTotal()。

这是非常有趣的。而我做的第一件事就是打开教科书,试图在那里找到答案。然后https://book.mql4.com/ru/trading/ordermodify,看到了教程是如何使之溢出的。

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер

这是误导我的因素......

 
hoz:

非常有趣。而我做的第一件事就是打开课本,试图在那里找到答案。然后https://book.mql4.com/ru/trading/ordermodify,我看到了教科书是如何被夸大的。

这就是误导我的因素......


你没有注意到下一句话吗?

   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер     
   {      
     if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
//
//Тут компенсируется отсутствие нуля с i-1
 
borilunad:


你没有注意到下一句话吗?

不,但不知为何,写起来却歪打正着。我不想批评教科书,但是......从0 算起比从-1 算起要充分得多。否则你可能已经从-30 开始了...

正如paladin80 在上面指出的,从0 开始,数组的值会比从-N 开始更充分。

 
hoz:

不,但不知为何,写起来却歪打正着。我不想批评教科书,但是......从0 算起比从-1 算起要充分得多。否则你可能已经从-30 开始了...

正如paladin80 在上面指出的,从0 开始,数组的值将是最充分的,如果从-N 开始。


现在从逻辑上想一想!

这些变体是相同的,因为如果i=0,我们需要从1到OrderTotal(),即从0+1到OrderTotal()-1+1(+1,因为i++ 是在for语句的最后),在教程中也一样,只写了从1到OrderTotal(),为了不从2到OrderTotal()+1,在OrderSelect函数 中,教科书作者在i 上加了-1。

顺便说一下,有多少个程序员,就有多少个变种。每个人都有自己的愿景,有自己的笔迹!

 
hoz:

不,但不知为何,写起来却歪打正着。我不想批评教科书,但是......从0 算起比从-1 算起要充分得多。否则你可能已经从-30 开始...

正如paladin80 在上面指出的,对于数组来说,0-N 更合适。

如果你对订单的搜索感兴趣,我可以建议以下方案。

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // ордер выбирается среди открытых
                                                    // и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue;     // если не наш символ, то уходим
         if (OrderMagicNumber()!=555) continue;     // если не наш магик номер, то уходим
                                                    // можно поставить любые другие фильтры
         // ... ваши вычисления
      }
   }
}
 
hoz:

不,但不知为何,写起来却歪打正着。我不想批评教科书,但是......从0 算起比从-1 算起要充分得多。否则你可能已经从-30 开始了...

正如paladin80 在上面指出的,相对于-N0 将是读取数组的最合适方式。

我也有同样的观点,教程是由一个特定的人写的,这是他对事物的看法(秩序循环的组织),而且总是有许多正确的解决方案。有正确的观点,也有正确和优雅的同时...:)
 
borilunad:


现在思考,包括逻辑!

这些变体是相同的,因为如果i=0,我们试图从1到OrderTotal(),即从0+1到OrderTotal()-1+1(+1,因为i++ 在for语句的末尾)。 在教程中也一样,只写了从1到OrderTotal(),为了不计算从2到OrderTotal()+1,教材作者在OrderSelect函数中给i 加了-1。 明白吗?

当然,我理解。但我以前没有见过以这种方式分析的订单。

if (OrderSelect(i-1,SELECT_BY_POS)==true)

通常只是没有==true...我甚至喜欢这一点。虽然,这很有趣,但我在其他EA中从未遇到过这样的方法。我明白其中的逻辑,但仍然如此。

 
请教一下,如何使用几个月前的muving值进行计算,即从历史上看?如果它只是一个移动平均线
AlligatorJawsBuffer[i]=iMA(NULL,0,13,8,MODE_SMMA,PRICE_MEDIAN,i);
如果是-5条以前呢?
 
hoz:

我当然明白。只不过,我以前从未见过以这种方式分析秩序的存在。

通常只是没有==true...我喜欢这个观点。虽然,这很有趣,但我没有在其他EA中看到这种方法。我明白其中的逻辑,但仍然如此。


尝试和实验不同的变体,会更容易理解所有的东西!好运!