Помогите компелировать блок!

 

if (OrdersTotal()>1)                                        
  if (Bar<iBars(NULL,PERIOD_H1))                    
  cmd=OrderType();
  else return(0);
  if (cmd==OP_SELL||cmd==OP_BUY)
  {
  while(true)
  {
  if(cmd==OP_BUY) 
  price=Bid;
  else  
  price=Ask;
  if(OrderSelect(№,SELECT_BY_POS)==true)
  result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
  if(result!=TRUE)
  { 
  error=GetLastError(); Print("LastError = ",error); 
  }
  else error=0;
  if(error==135) 
  RefreshRates();
  else break;
  }
  }

Подскажите пожалуйста как мне узнать номет или тикет ордера который нужно закрыть? вот в этой строчке  if(OrderSelect(№,SELECT_BY_POS)==true) Как подставить номер?

Всем спасибо!

 
Вам лучше зайти на страничку
https://forum.mql4.com/ru/11287/page20
(срт 19-20 и др.)
и задействовать выложенные там функции, напр.

Функция GetTicketLastPos().
Эта функция возвращает тикет последней открытой позиции или -1.
Функция GetTypeLastOpenPos(). Стп.20
Эта функция возвращает тип последней открытой позиции или -1.
И не надо ломать голову с OrderSelect
 

To Korey

А как ты определяешь

cmd=OrderType(); ?

 

в блоке неправильный цикл, так что лучше не мучаться

to Roger

? - в чем вопрос

OrderType вовзвращает перечислимый тип: OP_BUY=0, OP_SELL=1 и т.д.

 

Ну, хитрый, уже убрал код. :-)

Пока не будет OrderSelect ни о каком OrderType не может быть и речи.

 
не хитрый а попался - думаю тай вставлю папраметр цикла и все хоккей,
а там цикла то и нету(((
 
Не судите строго-недавно занялся изучать программирование!
 

to mozg

совет: - для ускорения изучения рисуй блок-схемы того что пишешь

 
mozg писал(а) >>
Не судите строго-недавно занялся изучать программирование!

Ну, ты хоть пробуешь, это приветствуется. Другие просто канючат, дайте код.

if (OrdersTotal()>1)                                        
  if (Bar<iBars(NULL,PERIOD_H1))                     
  for(int i=0;i<OrdersTotal();i++)

{

OrderSelect(i,SELECT_BY_POS);

cmd=OrderType();
    if (cmd<2)
  {
  while(true)
  {
  if(cmd==OP_BUY) 
  price=Bid;
  else  
  price=Ask;
  if(!OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE))
  { 
  error=GetLastError(); Print("LastError = ",error); 

  if(error==135) RefreshRates();
  }
   else break;
  }  

}
  }
 
В этом коде ошибочка только не могу найти где. Он закрывает ордер сразу после открытия.
Причина обращения: