Нюансы OrderSelect()

 
Здравствуйте. Скажите, пожалуйста, как я могу при помощи OrderSelect() производить поиск ТОЛЬКО в отложенных ордерах, но не в открытых?
 

Чтобы узнать тип ордера его надо сначала выбрать из всего списка ордеров. А работать только с отложками можно так

for(i = 0; i < OrdersTotal(); i++)
 {
  if(OrderSelect(i, SELECT_BY_POS) && OrderType() > OP_SELL)// также отобрать по символу и магику && OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
   {
    //Делаем с ордером что надо...
   }
 }
 
AlexeyVik:

Чтобы узнать тип ордера его надо сначала выбрать из всего списка ордеров. А работать только с отложками можно так


Надо ещё исключить операции со счётом, их только для статистики считают обычно:

if(OrderSelect(i, SELECT_BY_POS) && (OrderType() > 1  && OrderType() < 6)  && OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)

 
AlexeyVik:

Чтобы узнать тип ордера его надо сначала выбрать из всего списка ордеров. А работать только с отложками можно так


Спасибо!
 
evillive:

Надо ещё исключить операции со счётом, их только для статистики считают обычно:

if(OrderSelect(i, SELECT_BY_POS) && (OrderType() > 1  && OrderType() < 6)  && OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)

Спасибо!
 
evillive:

Надо ещё исключить операции со счётом, их только для статистики считают обычно:

if(OrderSelect(i, SELECT_BY_POS) && (OrderType() > 1  && OrderType() < 6)  && OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)

А разве типы > 5 не только в истории встречаются?
 
AlexeyVik:
А разве типы > 5 не только в истории встречаются?
Может в момент операции они тоже на какие-то секунды в реале, а может и нет, но написать пару символов ничего не стоит )))
 
evillive:
Может в момент операции они тоже на какие-то секунды в реале, а может и нет, но написать пару символов ничего не стоит )))
Никак попасть они в МТ не могут. Эти операции проводятся на сервере и оттуда попадают сразу в историю. Так-что не стоит дуть на воду, тем-более на молоке не обжигаясь.
 
AlexeyVik:
Никак попасть они в МТ не могут. Эти операции проводятся на сервере и оттуда попадают сразу в историю. Так-что не стоит дуть на воду, тем-более на молоке не обжигаясь.

Значения именованных констант также могут быть изменены. Поэтому условия типа:

OrderType() > OP_SELL

 и 

OrderType() > 1 && OrderType() < 6

Относятся к плохому стилю кодирования, т. к. дискретитируют саму идею именованных констант. Вот потребуется разработчикам в очередном билде изменить значения OP_BUY и OP_SELL на другие, и к чему приведет такой программный подход? Он в итоге даст сбой на ровном месте. Именованными константами нужно пользоваться так, как это задумано в их сути:

OrderType() == OP_SELLSTOP || OrderType() == OP_BUYSTOP || OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT
 
Scriptong:

Значения именованных констант также могут быть изменены. Поэтому условия типа:

 и 

Относятся к плохому стилю кодирования, т. к. дискретитируют саму идею именованных констант. Вот потребуется разработчикам в очередном билде изменить значения OP_BUY и OP_SELL на другие, и к чему приведет такой программный подход? Он в итоге даст сбой на ровном месте. Именованными константами нужно пользоваться так, как это задумано в их сути:

And your code is excessive.

int type=OrderType(); 

(type==OP_SELLSTOP || type==OP_BUYSTOP || type==OP_BUYLIMIT || type==OP_SELLLIMIT) 
 
eevviill:

And your code is excessive.

В чем избыточность?
Причина обращения: