Caractéristiques du langage mql5, subtilités et techniques - page 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 :

Une méthode a été proposée pour déterminer le décalage GMT de l'heure du serveur. Ça ne marche pas toujours exactement.

Il semble que la version ci-dessous soit la version exacte.


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

L'historique des transactions peut être rempli d'ordres de marché avec le statut REJECTED. En règle générale, ce sont les cibles.

Sur certains serveurs, une caractéristique particulière de ces ordres de marché qui ont reçu un REJECT : le statut est différent - CANCELED.

 
S'agit-il d'un bogue ou d'un bogue avec la conversion des chaînes de caractères dans le temps ?
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.
 
Cette pièce est-elle transformée en une constante au moment de la compilation ?
StrDate = StringSubstr(StrDate, StringLen(StrDate) - StringLen("00:00:00 - 00:00:00"));
 
fxsaber:
S'agit-il d'un bug ou d'une puce avec la conversion des chaînes de caractères en temps ?

C'est comme ça que ça a toujours été. Mais j'aurais fait les choses un peu différemment...

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

Et si vous imprimez juste cette fois, tout ce que vous avez à faire est de

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

Cela a toujours été le cas.

Une conséquence intéressante donc.

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

Concis et surprenant. Parce que le compilateur ne convertit pas ce qui semble être une constante en une constante.

 
fxsaber:

Une conséquence intéressante donc.

Concis et surprenant. Parce que le compilateur ne convertit pas ce qui semble être une constante en une constante.

La chaîne vide est-elle la date actuelle ?

ps ; Étonnamment... En effet la date actuelle, mais l'heure est 1:00
 
fxsaber:

Une conséquence intéressante donc.

Concis et surprenant. Parce que le compilateur ne convertit pas ce qui semble être une constante.

Remplace-t-il TimeCurrent ou TimeLocal ?)

Je me souviens que dans certaines langues, la création d'un type de date l'initialise automatiquement avec l'heure du système.

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

Date actuelle en effet, mais l'heure est 1:00 du matin.

Aucune suggestion quant à l'origine de l'heure (la même chose pour moi). Cela dépend probablement du fuseau horaire.


Ce n'est plus intéressant.

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