Функция для выставления "отложек"

 
Привет! Хочу написать функцию для выставления отложеных ордеров, вот такое получилось:
bool PendingOrder(int cmd, double lt, double st)
{
   double Lot=lt;
   double Price=0.0;
   if(cmd==OP_BUYSTOP)
   {
      Price=Ask+st;
   }
   if(cmd==OP_SELLSTOP)
   {
      Price=Bid-st;
   }
   double priceStep=Price;
   for(int count=0; count<NumberOrder; count++)
   {
      if(!OrderSend(Symbol(),cmd,Lot,priceStep,0,0,0,"",magic,0))
      {
         Print("Error = ",GetLastError(),"  ",cmd,"  ",Lot,"  ",Price);
      }
      Lot=Lot*mnog;
      if(cmd==OP_BUYSTOP)
      {
         priceStep=Price+st;  
      }
      if(cmd==OP_SELLSTOP)
      {
         priceStep=Price-st;  
      }      
      return(true);
   }
   return(false);
}
но ОНО не работает... только первый ордер выставляет и все... что здесь не так?  Хотя бы намекните...
 

Опять же нет функции обработки ошибок.

И что таое st?

https://www.mql5.com/ru/forum/207583
Почему мог не выставиться отложенный ордер?
Почему мог не выставиться отложенный ордер?
  • 2017.07.05
  • www.mql5.com
Все работало как часы и вдруг вчера не выставился отложенный ордер OrderSend. Вернулся код -1. Удаление цен от рынка было более чем достаточным...
 
Renat Akhtyamov:

Опять же нет функции обработки ошибок.

И что таое st?

https://www.mql5.com/ru/forum/207583

Почему же нет? Вот

      if(!OrderSend(Symbol(),cmd,Lot,priceStep,0,0,0,"",magic,0))
      {
         Print("Error = ",GetLastError(),"  ",cmd,"  ",Lot,"  ",Price);
      }
или это не то? А за st я забыл написать: это шаг (step) между ордерами...
 
Maksim Neimerik:   Почему же нет? Вот

Print - малополезная обработка ошибок. Робот должен принять решение и спасти ситуацию. Вот тут пример обработки ошибок

 
Все, нашел ошибку: я же в цикл for зачем-то return() впихнул... Как говорится - впихнул невпихуемое))) Всем спасибо за помощь!
 
Maksim Neimerik:
Все, нашел ошибку: я же в цикл for зачем-то return() впихнул... Как говорится - впихнул невпихуемое))) Всем спасибо за помощь!
return - это оператор. Скобки здесь излишни в отличие от функции. И если выбросить return true из цикла, то в функции останется только return false  - функция всегда будет возвращать false и смысл в bool пропадет. Зачем спрашивать у функции true или false, если заранее известно что она обязательно вернет false
 

STARIJ:
return - это оператор. Скобки здесь излишни в отличие от функции. И если выбросить return true из цикла, то в функции останется только return false  - функция всегда будет возвращать false и смысл в bool пропадет. Зачем спрашивать у функции true или false, если заранее известно что она обязательно вернет false


Совершенно верно, поэтому я bool поменял на void и выкинул ретурны...

 
Maksim Neimerik:  Совершенно верно, поэтому я bool поменял на void и выкинул ретурны...

Отлично, Вы растете на глазах!

 
STARIJ:

Отлично, Вы растете на глазах!

)) спасибо