Ошибка "Не все пути управления возвращают значение"

 

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

Заранее спасибо

bool CalculateCurrentSellOrders(string symbol)
  {
   int sells=0;
   for (int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_SELL) sells++;
        }
      }
   if(sells>0) return(true);
  }
 
Siladeh:

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

Заранее спасибо


Проблема решена


Удалить #Property strict

 
Siladeh:

Проблема решена


Удалить #Property strict


Это обходной путь, добавьте 1 дополнительную строку

   if(sells>0) return(true);
   else     return(false);  // Add this line
 
GumRai:


Это обходной путь, добавьте 1 дополнительную строку


Спасибо, дружище
 
Или проще:
return( sells>0 );
// if(sells>0) return(true);                
// else     return(false);  // Add this line
 

WHRoeder - благодаря вашим советам я продолжаю вычеркивать все больше строк из своего кода. Я бы поступил точно так же, как GumRai. Спасибо!

 
GumRai:


Это обходной путь, добавьте 1 дополнительную строку


Привет, GumRai, просто ради разговора, тебе ведь не нужен else, верно? )

   if(sells>0) return(true);
   return(false); 
 
Siladeh:

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

Заранее спасибо

Вы можете получить предупреждение для OrderSelect, если не проверите результат.

bool CalculateCurrentSellOrders(string symbol)
  {
   int sells=0;
   for (int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
        Print("OrderSelect() failed with error : "+GetLastError());
      if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MAGICMA)continue;
      if(OrderType()==OP_SELL) sells++;
     }
   if(sells>0) return(true);
   return(false);
  }


Надеюсь, это поможет

 
thrdel:


Привет, GumRai, просто ради разговора, тебе ведь не нужно, чтобы там было еще что-то, верно? )


Нет, вы правы.

Пост WHRoeders выше вашего еще проще для достижения того же самого.

 
GumRai:


Нет, вы правы.

Пост WHRoeders выше вашего еще проще для достижения того же самого.


Верно, но только для конкретных ситуаций, подобных этой. Другой способ более общий, независимо от того, сколько и каких условий, если ни одно из них не возвращает true, то будет возвращено false.

Должен признать, что это элегантное решение для данного конкретного примера.

 
thrdel:

...

и если вы не используете :

Надеюсь, это поможет

Вам не нужно добавлять -1, так как условием является
i<OrdersTotal()
Если вы добавите -1, то пропустите 1 элемент массива.