任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 128

 

你好!我正在比较3个柱子(3,2,1)的开盘价。我怎么能不计算价格相等的条数呢?

for( x=<3;x--)
{
 if( Open[x]==Open[x] )
  {
    x+1;
   }
  if( Open[x]<Open[x] )
   {
   ,,,
   }
 
skyjet:

你好!我正在比较3个柱子(3,2,1)的开盘价。我怎么能不计算价格相等的条数呢?

for (int x=1; x<3; x++)
{
 if(Open[x]==Open[x+1]) continue;
 if(Open[x]<Open[x+1])
   {
   //--- action
   }
}
 
你好,帮帮我吧。我在H1上玩,我有一个H4指标。它显示正确。但如果我在测试器中运行它,用可视化的方式,例如在年初,它显示的是现在市场上的信息。一般来说,它在策略测试器中不起作用。如何使其发挥作用。或者扔在解决的主题上。
 
artmedia70:
怎么会是空的呢?它到底有没有输出任何东西,还是在阵列单元中存在零?


根本就没有。

即使你进入了 物品 除了箭头和趋势线,根本没有任何东西...

artmedia70:

你为什么要在循环的主体中增加i?

和这个:i<=p,为什么 "或等于"?


我因疲倦而犯了一个错误。我是这样修复的。

for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }

这段代码是在函数本身中。

//+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0)
   {
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}
 
hoz:


完全没有。

即使你进入了 物品 除了箭头和趋势线,根本没有任何物体......。


是我因为疲劳而搞砸了。我是这样修复的。

这段代码是在函数本身中。

之前和之后

if (p > 0)

取消打印p值。

我必须为你写出找茬的顺序吗?

 
artmedia70:

之前和之后。

取消打印P值。

我必须为你写出错误序列吗?



事实上,是的。总之,情况是这样的。

void ClosePosBySortLots()
{
   double a[][2];
   int p = 0;
   
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() < 2)
      {
         p++;
         ArrayResize(a, p);
         a[p-1][0] = OrderLots();
         a[p-1][1] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   pr("___p = " + p);   // Значение кол-ва позиций до if..
   
   if (p > 0)
   {
      pr("p = " + p);   // Значение кол-ва позиций после if..
      
      ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND);
      
      for(i=0; i<p; i++)
      {
          pr("a[i][1] = " + a[i][1]);
      }
      
      for(i=0; i<p; i++)
      {
         if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0) ClosePosBySelect();
         }
      }
   }
}

我已经这样做了,但在图表的这个部分也没有什么东西出来。虽然在其他地方,它打印了0,当一个位置是开放的,它立即关闭的采取。也就是说,在这个领域,科萨科娃的工作就像...

这里有一张截图。

我现在应该打印所有这些数值吗?

p++;
ArrayResize(a, p);
a[p-1][0] = OrderLots();
a[p-1][1] = OrderTicket();

似乎还有很多事情要做。毕竟,一切都清楚地、通常地写在那里。

 
hoz:


事实上,它是。总之,情况是这样的。

我已经这样运行了,但在图表的这一部分也没有什么结果。虽然在其他地方,它打印的是0,当一个位置是开放的,它在采取时立即关闭。也就是说,在这个部门,科萨科娃的工作就像...

这里有一张截图。

我现在应该打印所有这些数值吗?

似乎还有很多事情要做。毕竟,这一切都清楚地、通常地写在那里。

你是否了解并看到在你的数组被 "填充 "了权证数据后,数组中立即包含了什么?不,你不知道,你只是假设。SPRINT所有数组单元格的内容,不是用你的pr(),而是用标准的Print(),并尝试查看测试者的日志,看看你在数组中的每一个单元格,在它被填满后的内容。当你确定数组的内容与你对其内容的想法一致时,就用你的pr()打印它。如果它没有给你同样的结果--这是你的pr(),如果数据匹配,那么在下一步寻找错误。
 
日志中存在与批次有关的错误(OrderSend 错误4051)。解决这个问题。也许会有帮助。然后我们再看看会发生什么。
 
hoz:
日志中存在与批次有关的错误(OrderSend错误4051)。解决这个问题。也许会有帮助。然后我们会看到。

看一下坦克,重新启动,也许会有帮助......:-)

P.S. 我在这里是善意的。

 
这是一个一维数组,其大小可以变化。
如何循环浏览数组元素 的所有可能的相互组合?
元素的顺序并不重要,即123==213==321...。

下面是一个有4个元素的数组的例子:
[4] <=> { 1 2 3 4 }

1, 12, 13, 14, 123, 124, 134, 1234, 
2, 23, 24, 234, 
3, 34,
4