Erros, bugs, perguntas - página 847

 

O compilador expressou algo em inglês para mim. Parêntesis algo não é um programa, o programa em geral está errado com este parêntesis e o parêntesis está desequilibrado. Mas há parênteses. Poderia dizer-me onde devo procurar um erro?

'}' - Erro no final do programa Redo.mq5 3562 1
{' - Parênteses desequilibrados Redo.mq5 3330 1

//////////////////////////////////////////////////////////////////////////////////////////////

int waitIfBusy() 
{   
   for (int Yx = 0;  MQL5InfoInteger(MQL5_TRADE_ALLOWED) && Yx < 50; Yx++) Sleep(125);   
   if (Yx >= 50) Print("Торговый поток занят больше ", DoubleToString(25 * Yx / 1000, 2), " секунд");
   else if (Yx > 0) Print("Торговый поток был занят ", DoubleToString(25 * Yx / 1000, 2), " секунд");   
   return (Yx);   
} 

//////////////////////////////////////////////////////////////////////////////////////////////
 
Acredito que o problema está mais acima... assim vejo as coisas, está tudo bem...
 
Yedelkin:

Bem, já o terminei acima. Deixe-me repetir: a "nova" citação para o Expert Advisor é uma citação que chega logo após a conclusão da próxima função OnTick(), mesmo que esta citação não seja a "primeira citação numa barra". A condição de uma nova barra a chegar só será verificada após o Expert Advisor terminar o processamento dessa barra "anterior".

só será verificado após o Expert Advisor terminar o processamento da cotação que veio na barra "anterior". ...Se a função OnTick() for executada durante 90 segundos e iniciada às 00.00.00, a "condição para um novo tick no M1 será executada pelo menos uma vez, nomeadamente após 00.01.30

Obrigado, é assim que deve ser.
 
Dimka-novitsek:

O compilador expressou algo em inglês para mim. Parêntesis algo não é o programa, o programa em geral está errado com este parêntesis e o parêntesis desequilibrado. Mas há parênteses. Por favor, diga-me, onde procurar por um erro?

'}' - fim inesperado do programa Redo.mq5 3562 1
{' - parênteses desequilibrados Remake.mq5 3330 1

Talvez faltem aparelhos para escrever o código (independentemente do que o compilador diz)?

int waitIfBusy() 
{   
   for (int Yx = 0;  MQL5InfoInteger(MQL5_TRADE_ALLOWED) && Yx < 50; Yx++) 
   {
    Sleep(125);   
   if (Yx >= 50) Print("Торговый поток занят больше ", DoubleToString(25 * Yx / 1000, 2), " секунд");
   else 
     if (Yx > 0) Print("Торговый поток был занят ", DoubleToString(25 * Yx / 1000, 2), " секунд");   
   return (Yx);   
   }
}
 
Obrigado!!!
 
Desculpe, a mesma pergunta. Diz '{' - algum operador esperava parênteses.mq5 612 62 Estou a tentar há cerca de 20-25 minutos numa EA separada e não consigo encontrar a razão.
/////////////////////////////////////////////////////////////////////// 

bool OrderClose(string Symb)
  {



    PositionSelect(Symb);  Print("Start@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

   long PositionID=0;
    PositionID=PositionGetInteger(POSITION_IDENTIFIER);//Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Переворот позиции не изменяет идентификатора позиции.

     Print("PositionID");
    Print(PositionID);
   HistorySelect(
                 TimeCurrent()-(60*60*24*7*4),// с даты
                 TimeCurrent() // по дату
                 );

     for(int i=0; HistoryDealsTotal()>i; i++) 
   
     {
      ulong TicetSdelki;
      TicetSdelki=
                  HistoryDealGetTicket(
                  i        // номер сделки
                 );

                   long  HistoryID=HistoryDealGetInteger(
                  TicetSdelki,// тикет
      DEAL_POSITION_ID          // идентификатор свойства
      );                          //Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая позиция имеет уникальный идентификатор, который присваивается всем сделкам, совершенным на инструменте в течение всей жизни позиции.

                                  // Print ( i ); Print ( "HistoryID" ); Print ( HistoryID ); 
      if(HistoryID!=0 && PositionID!=0 && PositionID==HistoryID)
        {
         ulong TicetTojSdelki; TicetTojSdelki=TicetSdelki;

         string TYP="";
         if(HistoryDealGetInteger(TicetTojSdelki,DEAL_TYPE)==DEAL_TYPE_BUY){ TYP="OP_SELL";}
         if(HistoryDealGetInteger(TicetTojSdelki,DEAL_TYPE)==DEAL_TYPE_SELL){ TYP="OP_BUY";}
         ulong resultat=OrderSendSELLi(Symbol(),TYP,HistoryDealGetDouble(TicetTojSdelki,DEAL_VOLUME),10,10,
                                       ASK(Symbol())+300 *SymbolInfoDouble(Symbol(),SYMBOL_POINT),BID(Symbol())-300 *SymbolInfoDouble(Symbol(),SYMBOL_POINT)," com ",600,600,0);
       
         if(resultat==10009)return true;else  return false;

           }

    }



  }
//+------------------------------------------------------------------+
Olhei através deles 6 vezes em pares, todos pareciam estar emparelhados. E não são assim tão escuras, não são tantas. Estou a olhar para tudo, pontos com pontos, outros parênteses... Dê uma vista de olhos, por favor, se puder!
 
Dimka-novitsek:
Desculpe, a mesma pergunta. Diz '{' - algum operador esperava parênteses.mq5 612 62 Tento durante cerca de 20-25 minutos ou talvez mais numa EA separada e não consigo encontrar a causa, todos os parênteses grandes que vi 6 vezes, bem, todos emparelhados. E não são assim tão escuras, não são tantas. Estou a olhar para tudo, pontos com pontos, outros parênteses... Dê uma vista de olhos, por favor, se puder!

A fim de tornar o código compreensível não só para si mas para todos os outros, existe uma característica muito útil no MetaEditor. Chama-se Styler (siga este link para mais detalhes). Clique Tools => Styler. Atalho Ctrl+, . Experimente-o e ele ajudá-lo-á a compreendê-lo. ))

 
Sim, de imediato, desculpe.
 
/////////////////////////////////////////////////////////////////////// 

bool OrderClose(string Symb)


{



    PositionSelect(Symb);  Print("Start@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");

   long PositionID=0;
    PositionID=PositionGetInteger(POSITION_IDENTIFIER);//Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Переворот позиции не изменяет идентификатора позиции.

     Print("PositionID");
    Print(PositionID);
   HistorySelect(
                 TimeCurrent()-(60*60*24*7*4),// с даты
                 TimeCurrent() // по дату
                 );

     for(int i=0; HistoryDealsTotal()>i; i++) 
   
     {
                     ulong TicetSdelki;
                     TicetSdelki=
                     HistoryDealGetTicket(
                     i        // номер сделки
                     );

                     long  HistoryID=HistoryDealGetInteger(
                     TicetSdelki,// тикет
                     DEAL_POSITION_ID          // идентификатор свойства
                     );                          //Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая позиция имеет уникальный идентификатор, который присваивается всем сделкам, совершенным на инструменте в течение всей жизни позиции.

                                  // Print ( i ); Print ( "HistoryID" ); Print ( HistoryID ); 
                if(HistoryID!=0 && PositionID!=0 && PositionID==HistoryID)
                {
                            ulong TicetTojSdelki; TicetTojSdelki=TicetSdelki;
                            string TYP="";
                            if(HistoryDealGetInteger(TicetTojSdelki,DEAL_TYPE)==DEAL_TYPE_BUY){ TYP="OP_SELL";}
                            if(HistoryDealGetInteger(TicetTojSdelki,DEAL_TYPE)==DEAL_TYPE_SELL){ TYP="OP_BUY";}
                            ulong resultat=OrderSendSELLi(Symbol(),TYP,HistoryDealGetDouble(TicetTojSdelki,DEAL_VOLUME),10,10,
                            ASK(Symbol())+300 *SymbolInfoDouble(Symbol(),SYMBOL_POINT),BID(Symbol())-300 *SymbolInfoDouble(Symbol(),SYMBOL_POINT)," com ",600,600,0);
       
                            if(resultat==10009)return true;else  return false;

                }

    }



}
//+------------------------------------------------------------------+
Existem apenas três pares de parênteses básicos
 
Dimka-novitsek:
Há apenas três pares de parênteses

O compilador aponta a linha sobre a qual tropeçou. Da próxima vez deve destacar tais linhas. É uma chatice procurar por "linha 612 e posição 62 do cursor".

Nesta linha.

if(resultat==10009)return true;else  return false;

Não gosto que o verdadeiro e o falso não estejam rodeados de parênteses. Não sei se a língua o permite, mas é assim que deve ser escrito em fen-shui:

if(resultat==10009) 
    return(true);
else  
    return(false);