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

 
MakarFX #:
错误不在于搜索倒数第二的代码,而在于文本中信息的输出。

我们从来没有说过任何关于代码中的错误。我再重复一次,这段代码在新的最大订单被打开时起作用,而当这种情况没有发生时,专家顾问认为倒数第二笔订单=最后一笔。这就是全部

 
MakarFX #:
错误不在倒数第二条搜索代码中,而很可能是在输出信息到文本的过程中

马卡,为什么突出显示的条件不起作用?

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket)
                     if(penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
 
EVGENII SHELIPOV #:

马卡,告诉我为什么突出显示的条件不起作用。

在这一行中,你可以找到最大的门票

if(OrderTicket() > penultimate_ticket)

而在这一行中,你是在比较最大和最大。

if(penultimate_ticket < GetTicketMaxOrder())
故而总是假的
 
EVGENII SHELIPOV #:

我们从来没有说过关于代码中的错误。我再重复一次,这段代码在新的最大订单被打开时起作用,而当这种情况没有发生 时,专家顾问认为倒数第二笔订单=最后一笔。这就是全部

这只发生在重启EA的时候

 
MakarFX #:

这只是在EA重新启动的情况下。

不,马卡,看这里,我把倒数第二笔订单的变量和最后一笔订单的函数放在显示器上。

ObjectCreate("signal400",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal400",OBJPROP_XDISTANCE,100);
   ObjectSet("signal400",OBJPROP_YDISTANCE,740);
   ObjectSetText("signal400",DoubleToString(FindPenultimateLots(),2),14,"Tahoma", clrRed);
   ObjectCreate("signal401",OBJ_LABEL,0,0,0,0,0);
   ObjectSet("signal401",OBJPROP_XDISTANCE,200);
   ObjectSet("signal401",OBJPROP_YDISTANCE,740);
   ObjectSetText("signal401",DoubleToString(prev_ticket,0),14,"Tahoma", clrRed);
 
MakarFX #:

在这条线上,你可以找到最高票价

而在这一行中,你将最大的与最大的进行比较。

故而总是假的

那么,你如何使这个函数所扫描的所有门票

(OrderTicket()

来移除等于以下的票据

GetTicketMaxOrder()
 
EVGENII SHELIPOV #:

马卡,告诉我为什么突出显示的条件不起作用

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket)
                     if(penultimate_ticket < GetTicketMaxOrder())
                        penultimate_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }

尤金,门票的变量在哪里变化?还是整个循环只用一个订单?

 
Alexey Viktorov #:

尤金,门票的变量在哪里变化?还是整个循环只用一个订单?

我已经给他写过信
 
EVGENII SHELIPOV #:

不,马卡,看这里,我把倒数第二笔订单的变量和最后一笔订单的函数放在显示器上。

EA重新启动时,prev_ticket被重置。
 
MakarFX #:

再一次......我给了你一个有效的代码!

在测试器中运行并按下按钮。

要看到它,你必须使订单关闭,而这个EA并没有这样做。而整个问题发生在最大订单关闭之后。

原因: