Изменение типа отложенного ордера при срабатывании

 

Здравствуйте господа. Столкнулся вот с такой проблемой... Открываю отложенник BuyStop. Он срабатывает, однако тип его (ф-ция OrderType()) не меняется. Всего открыт 1 ордер, поэтому ошибки что смотрю другой ордер быть не может. На всякий случай даже взял ордер по тикету. Вот код:

int ticket = 23787218;
if(!OrderSelect(ticket, SELECT_BY_TICKET)) {
    int error = GetLastError();
    Print( "OrderSelect(", ticket, ", SELECT_BY_TICKET ) - Error #", ErrorDescription(error));
    return;
}
int type = OrderType();
string szType;
switch(type) {
    case OP_BUY: Alert("Ticket = ", OrderTicket(), " Type = BUY"); break;
    case OP_BUYLIMIT: Alert("Ticket = ", OrderTicket(), " Type = BuyLimit"); break;
    case OP_BUYSTOP: Alert("Ticket = ", OrderTicket(), " Type = BuyStop"); break;
        
    default: Alert("Ticket = ", OrderTicket(), " Type = ", OrderType()); break;
}

 Результат:

 

 Честно говоря, то что тип ордера не меняется меня обескураживает... Как же тогда узнать сработал отложенник или нет?!

 
Терминал перезагрузить не пробовали?
 
khorosh:
Терминал перезагрузить не пробовали?
Над проблемой бьюсь со вчерашнего дня (видно по времени открытия ордера на скриншоте). За это время не только терминал перегружался, но и компьютер. Прочитал в инете кучу инф-ции. Нашел, кстати тему человека у которого такая же проблема: https://www.mql5.com/ru/forum/108844 Только я так и не понял решил он эту проблему или нет...
 
Xenon:
Над проблемой бьюсь со вчерашнего дня (видно по времени открытия ордера на скриншоте). За это время не только терминал перегружался, но и компьютер. Прочитал в инете кучу инф-ции. Нашел, кстати тему человека у которого такая же проблема: https://www.mql5.com/ru/forum/108844 Только я так и не понял решил он эту проблему или нет...
Не знаю, у меня на Build 745 нормально тип определяется вашим скриптом.
 
khorosh:
Не знаю, у меня на Build 745 нормально тип определяется вашим скриптом.
Спасибо. Проблему выявил. Дело в том, что у меня стоял include  на мой файл в котором определялось перечисление
enum OrderType
{
    Buy = OP_BUY,
    BuyLimit = OP_BUYLIMIT,
    BuyStop = OP_BUYSTOP,
    Sell = OP_SELL,
    SellLimit = OP_SELLLIMIT,
    SellStop = OP_SELLSTOP
};
Как только удалил это перечисление, все заработало. Но вот почему - понять не могу. Встроенного перечисления OrderType насколько мне известно нету. Может как-то конфликтует с ф-цией OrderType()? Но звучит как-то неправдоподобно..
 
int type = OrderType();
switch(type) {
    case 0: Alert("Ticket = ", OrderTicket(), " Type = buy"); break;
    case 1: Alert("Ticket = ", OrderTicket(), " Type = sell "); break;
    case 2: 
    case 3:
    case 4:
    case 5:   
        
    default: Alert("Ticket = ", OrderTicket(), " Type = ", OrderType()); break;
 

pako, Вы напрасно меня исправили. Во-первых, case 2, 3, 4, 5 не нужны. Они все по-умолчанию попадают в случай default. Во-вторых, рекомендую НИКОГДА не использовать числа в подобных случаях. Всегда надо использовать символьные константы. Это избавит Вас в будущем от множества глупых ошибок + на порядок выше наглядность чтения кода + в случае рефакторинга и изменения константы например OP_BUY с значения 0 в значение -10 программа у Вас все также будет корректно работать.

 
Xenon:

pako, Вы напрасно меня исправили. Во-первых, case 2, 3, 4, 5 не нужны. Они все по-умолчанию попадают в случай default. Во-вторых, рекомендую НИКОГДА не использовать числа в подобных случаях. Всегда надо использовать символьные константы. Это избавит Вас в будущем от множества глупых ошибок + на порядок выше наглядность чтения кода + в случае рефакторинга и изменения константы например OP_BUY с значения 0 в значение -10 программа у Вас все также будет корректно работать.

 

"Во-первых, case 2, 3, 4, 5 не нужны"  имелось ввиду и так далее, нужны или не нужны , кому как

"в случае рефакторинга и изменения константы например OP_BUY с значения 0 в значение -10"   для этого есть  default

int  OrderType() Возвращаемое значение число от 0 до 5

OP_BUY  Для облегчения написания программ, а также для удобства восприятия исходных текстов программ, в языке MQL4 предусмотрены предопределенные стандартные константы и перечисления. Кроме того, для хранения информации используются служебные структуры.

Стандартные константы являются аналогом макроподстановок и имеют тип int. 

"Во-вторых, рекомендую НИКОГДА не использовать числа в подобных случаях. Всегда надо использовать символьные константы. Это избавит Вас в будущем от множества глупых ошибок"

если вы так решили -  это еще не значит , что это правильно.

НИКОГДА не говори НИКОГДА

 "на порядок выше наглядность чтения кода"  на вкус и цвет.... точки в данном случае означают и так далее