Características del lenguaje mql5, sutilezas y técnicas - página 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 :

En su día se propuso una forma de determinar el desfase GMT de la hora del servidor. No siempre funciona exactamente.

A continuación, parece ser la versión exacta.


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

El historial de operaciones puede estar lleno de órdenes de mercado con estado RECHAZADO. Por regla general, estos son los objetivos.

En algunos servidores, una característica especial de tales órdenes de mercado que han recibido un RECHAZO: el estado es diferente - CANCELADO.

 
¿Se trata de un error o de un error de conversión de cadenas en el tiempo?
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.
 
¿Se convierte esta pieza en una constante en tiempo de compilación?
StrDate = StringSubstr(StrDate, StringLen(StrDate) - StringLen("00:00:00 - 00:00:00"));
 
fxsaber:
¿Se trata de un error o de un chip con la conversión de la cadena a la hora?

Así ha sido siempre. Pero yo lo habría hecho un poco diferente...

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

Y si sólo imprimes esta vez, todo lo que tienes que hacer es

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

Esto siempre ha sido así.

Una consecuencia interesante entonces.

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

Conciso y sorprendente. Porque el compilador no convierte lo que parece ser una constante en una constante.

 
fxsaber:

Una consecuencia interesante entonces.

Conciso y sorprendente. Porque el compilador no convierte lo que parece ser una constante en una constante.

¿Es la cadena vacía la fecha actual?

ps; Sorprendentemente... Efectivamente la fecha actual, pero la hora es la 1:00
 
fxsaber:

Una consecuencia interesante entonces.

Conciso y sorprendente. Porque el compilador no convierte lo que parece ser una constante.

¿Sustituye a TimeCurrent o a TimeLocal?)

Recuerdo que en algunos idiomas al crear un tipo de fecha se inicializa automáticamente con la hora del sistema.

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

La fecha actual sí, pero la hora es la 1:00 a.m.

Ninguna sugerencia sobre la procedencia de la hora (lo mismo para mí). Probablemente depende de la zona horaria.


Esto ya no es interesante.

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