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

 
重做了一下,现在做while而不是主for循环,但在第二个嵌套循环中仍然没有出现第一个条件!
int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}
 
MakarFX #:

真的吗?)

你试过吗?

我有一个颜色变化的工作方式,已经有很长一段时间了,但不是在生产线上,尽管它应该没有什么区别。

                     if(SymOpen < SymClose) {
                       CColor=Mirroring?BearBarColor:BullBarColor;
                        SetIndexStyle(32+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(32+(num*8), SubSymbol);
                        SetIndexStyle(33+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(33+(num*8), SubSymbol);
                        SetIndexStyle(34+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?WidthOC:1,CColor); SetIndexLabel(34+(num*8), SubSymbol);
                        SetIndexStyle(35+(num*8),DRAW_HISTOGRAM,STYLE_SOLID,Mirroring?1:WidthOC,CColor); SetIndexLabel(35+(num*8), SubSymbol);

PS。看了我的其他代码,它改变了那里的线的颜色

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);
 
Vitaly Muzichenko #:

我已经让颜色变化以这种方式工作了很长时间,但不是在生产线上,尽管它应该没有什么区别。

PS。看了看我的其他代码,它改变了行的颜色

SetIndexStyle(num,DRAW_LINE,STYLE_SOLID,1,BullColor);

改变整行,而不是所需的部分

 
MakarFX #:

改变整条线,而不是右边的部分

好吧,他写道,你必须改变整个线条

 
因此,我改编了测试的代码,试着运行它,你会在第二阶上得到一个无限循环:(
附加的文件:
 
Nerd Trader #:
因此,我改编了测试的代码,试着运行它,你会在第二阶上得到一个无限循环:(

我想知道!为什么?

为什么是这样,它有什么神圣的意义?

int GetMagic(Order &order)
{
  int magic = 0;
  int unique = 0;
  
  if(order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP){
    if(OrdersTotal()){
      do{
        magic++;
        for(int i = OrdersTotal(); i > 0 ; i --){
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            Print( "!!!!!!!!!!!!!!!!!!!");//<----------НЕ ПРИНТУЕТСЯ
            if(magic != OrderMagicNumber())
              unique ++;
          }
        }
      }while(unique < OrdersTotal());
    }else return (magic + 1);
  }
  return magic;
}

---

你是按数字搜索的,所以按数字搜索。

如果你有两张逮捕令,他会去看,但他找不到第三张,或第23张。

---

你似乎对任务不太清楚,所以这就是解决办法。

 
Nerd Trader #:

循环的设置不正确。

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

它应该是这样的。

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

循环的设置不正确。

它应该是这样的。

是的!它是有效的。但为什么早些时候仍然进入了第二个for循环,而且如果我插入下一行Print() - 它将被执行(无限地),但不会进一步发展?无论如何,谢谢你,现在我至少可以去睡觉了。
 
Vitaly Muzichenko #:

我想知道!为什么?

为什么是这样,它有什么神圣的意义?

---

你是按数字搜索的,所以按数字搜索。

如果你有两张逮捕令,他会去看,但他找不到第三张,或第23张。

---

你似乎对任务不太清楚,所以这就是解决办法。

只是这个马吉克必须是独一无二的,也就是说,它必须与其他的马吉克没有匹配。
 
Aleksei Stepanenko #:

循环的设置不正确。

它应该是这样的。

有什么区别?而且订单编号不是从零开始而不是从一开始吗?

原因: