Особенности языка mql5, тонкости и приёмы работы - страница 195

 
// Возвращает скорректированный ORDER_REASON.
ENUM_ORDER_REASON GetOrderReason( const ulong Ticket )
{
  ENUM_ORDER_REASON Reason = ORDER_REASON_CLIENT;
    
  if (HistorySelectOrder(Ticket)) // https://www.mql5.com/ru/forum/170952/page186#comment_18099882
  {
    Reason = HistoryOrderGetInteger(Ticket, ORDER_REASON);
    
    if ((HistoryOrderGetInteger(Ticket, ORDER_TYPE) <= ORDER_TYPE_SELL) &&
        (Reason != ORDER_REASON_SL) && (Reason != ORDER_REASON_TP))
    {
      string PartComment = HistoryOrderGetString(Ticket, ORDER_COMMENT);

      if (StringLen(PartComment) > 3)
      {      
        PartComment = ::StringSubstr(PartComment, 0, 3);
        
        if (PartComment == "[tp")
          Reason = ORDER_REASON_TP;
        else if (PartComment == "[sl")
          Reason = ORDER_REASON_SL;      
      }
    }
  }
  
  return(Reason);
}
 
fxsaber :

A way was once proposed to determine the GMT offset of the server time. It doesn't always work exactly.

Below, it seems, is the exact version.


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TimeServerGMTOffset()
  {
   return (int)(TimeGMT()-TimeTradeServer());
  }
//+------------------------------------------------------------------+
 

В истории торгов может быть полно маркет-ордеров со статусом REJECTED. Как правило, это тейки.

На некоторых серверах особенность у таких маркет-ордеров, что получили реджект: статус другой - CANCELED.

 
Это баг или фича с преобразованием строки во время?
Print((datetime)"12:34"); //    Результат: 2021.01.15 12:34:00. Ожидалось: 1970.01.01 12:34:00.

// Выкручивание.
Print(((datetime)"12:34") % (24 * 3600)); //    Результат: 1970.01.01 12:34:00.
 
На этапе компиляции этот кусок превращается в константу?
StrDate = StringSubstr(StrDate, StringLen(StrDate) - StringLen("00:00:00 - 00:00:00"));
 
fxsaber:
Это баг или фича с преобразованием строки во время?

Так было всегда. Но я сделал-бы чуток не так…

Print(((datetime)"12:34") % PeriodSeconds(PERIOD_D1); //    Результат: 1970.01.01 12:34:00.

А если просто распечатать это время, то достаточно сделать так

  Print(TimeToString(TimeCurrent(), TIME_SECONDS));
//Результат 
//2021.01.15 18:46:12.938       00 (EURRUB_TOD,H1)      18:31:18
 
Alexey Viktorov:

Так было всегда.

Тогда интересное следствие.

Print((datetime)""); // Текущая дата.

Лаконично и удивительно. Потому что компилятор не преобразует в константу то, что видится константой.

 
fxsaber:

Тогда интересное следствие.

Лаконично и удивительно. Потому что компилятор не преобразует в константу то, что видится константой.

Пустая строка разве текущая дата?

ps; Удивительно… Действительно текущая дата, но время 1:00
 
fxsaber:

Тогда интересное следствие.

Лаконично и удивительно. Потому что компилятор не преобразует в константу то, что видится константой.

он туда получается TimeCurrent или TimeLocal подставляет? ап: вижу что нет)

Помню в каких то языках создание типа даты автоматически инициализирует её системным временем.

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
TimeCurrent - Дата и время - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

Действительно текущая дата, но время 1:00

Нет предположений, откуда час берется (у меня так же). Возможно, зависит от часового пояса.


Так уже не интересно.

Print((datetime)"00:00"); // Текущая дата.
Причина обращения: