Ошибки, баги, вопросы - страница 847

 

Мне компилятор что-то выразил по английски. Скобка что-то не программа, программа в общем не того с этой скобкой и несбалансированная скобка. А скобки-то есть. Скажите пожалуста, куда смотреть в поиске ошибки?

 

  '}' - unexpected end of program Переделать.mq5 3562 1
'{' - unbalanced parentheses Переделать.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);   
} 

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


 

 
Я полагаю, проблема выше- тут я как ни посмотрю, все верно..
 
Yedelkin:

Ну, я уже выше дописал. Повторю: "Новой" котировкой для советника станет котировка, пришедшая сразу после завершения очередного  выполнения  функции OnTick(), даже если эта котировка не является "первым тиком на баре". У Вас условие наступления нового бара

 проверится только после того, как завершится обработка экспертом той котировки, которая пришла на "предыдущем" баре. ..Если функция OnTick() выполняется 90 секунд и начата в 00.00.00, то "условие на новый тик на М1 хоть когда-то выполнится", а именно: после 00.01.30

Спасибо, так и должно быть.
 
Dimka-novitsek:

Мне компилятор что-то выразил по английски. Скобка что-то не программа, программа в общем не того с этой скобкой и несбалансированная скобка. А скобки-то есть. Скажите пожалуста, куда смотреть в поиске ошибки?

  '}' - unexpected end of program Переделать.mq5 3562 1
'{' - unbalanced parentheses Переделать.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);   
   }
}
 
Спасибо!!
 
Прошу прощения, тот же вопрос. Ругается так '{' - some operator expected Скобка.mq5 612 62   Перебираю его уже минут20-25 а может и больше в отдельном советнике, и причину найти не могу, все большие
/////////////////////////////////////////////////////////////////////// 

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;

           }

    }



  }
//+------------------------------------------------------------------+
скобки раз 6 высвитил п-парно, ну вроде все парные. И их не такая тьма, не так много. Смотрю все, точки с зптыми, прочие скобки.. Гляньте, пожалуста, если можно! 
 
Dimka-novitsek:
Прошу прощения, тот же вопрос. Ругается так '{' - some operator expected Скобка.mq5 612 62   Перебираю его уже минут20-25 а может и больше в отдельном советнике, и причину найти не могу, все большие скобки раз 6 высвитил п-парно, ну вроде все парные. И их не такая тьма, не так много. Смотрю все, точки с зптыми, прочие скобки.. Гляньте, пожалуста, если можно! 

Для того, чтобы код был понятным не только Вам, но и всем остальным, есть очень полезная возможность в редакторе MetaEditor. Называется Стилизатор (пройдите по ссылке для подробного ознакомления). Находится в Сервис => Стилизатор. Горячие клавиши Ctrl+, . Попробуйте и Вам самому станет легче разбираться. )) 

 
Да, щас, извините.
 
/////////////////////////////////////////////////////////////////////// 

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;

                }

    }



}
//+------------------------------------------------------------------+
Здесь всего-то три пары основных скобок
 
Dimka-novitsek:
Здесь всего-то три пары основных скобок

Компилятор указывает строчку, на которой споткнулся. В следующий раз надо бы такие строчки выделять. А то вломы искать "612-ую строчку и 62-ую позицию курсора".

Вот в этой строчке

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

мне  не нравится, что true и false не обрамлены скобками. Не знаю, может язык и допускает такую запись, но по фень-шую надо так:

if(resultat==10009) 
    return(true);
else  
    return(false); 
Причина обращения: