Características da linguagem mql5, subtilezas e 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 :

Uma vez foi proposta uma forma de determinar a compensação GMT da hora do servidor. Nem sempre funciona exactamente.

Abaixo, ao que parece, encontra-se a versão exacta.


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

O histórico de negociação pode estar cheio de ordens de mercado com estatuto REJEITADO. Como regra, estes são os alvos.

Em alguns servidores, uma característica especial de tais ordens de mercado que receberam um REJEITO: o estatuto é diferente - CANCELADO.

 
Isto é um bug ou um bug com conversão de cordas no tempo?
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.
 
Esta peça é transformada numa constante em tempo de compilação?
StrDate = StringSubstr(StrDate, StringLen(StrDate) - StringLen("00:00:00 - 00:00:00"));
 
fxsaber:
Isto é um bug ou um chip com conversão de string para tempo?

É assim que sempre foi. Mas tê-lo-ia feito um pouco diferente...

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

E se apenas imprimir desta vez, tudo o que tem de fazer é

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

Este tem sido sempre o caso.

Uma consequência interessante, então.

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

Conciso e surpreendente. Porque o compilador não converte o que parece ser uma constante para uma constante.

 
fxsaber:

Uma consequência interessante, então.

Conciso e surpreendente. Porque o compilador não converte o que parece ser uma constante para uma constante.

O fio vazio é a data actual?

ps; Surpreendentemente... De facto a data actual, mas a hora é 1:00
 
fxsaber:

Uma consequência interessante, então.

Conciso e surpreendente. Porque o compilador não converte o que parece ser uma constante.

Substitui o TimeCurrent ou o TimeLocal?)

Lembro-me em algumas línguas de criar um tipo de data que o inicializa automaticamente com a hora do sistema.

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

Data actual, de facto, mas a hora é 1:00 da manhã.

Nenhuma sugestão sobre de onde vem a hora (o mesmo para mim). Provavelmente, depende do fuso horário.


Isto já não é interessante.

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