Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 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 :

Una volta è stato proposto un modo per determinare l'offset GMT dell'ora del server. Non sempre funziona esattamente.

Qui sotto, sembra, c'è la versione esatta.


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

La storia del trading può essere piena di ordini di mercato con lo stato RIFIUTATO. Di regola, questi sono gli obiettivi.

Su alcuni server, una caratteristica speciale di tali ordini di mercato che hanno ricevuto un RIFIUTO: lo stato è diverso - ANNULLATO.

 
È un bug o un bug con la conversione delle stringhe nel 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.
 
Questo pezzo viene trasformato in una costante a tempo di compilazione?
StrDate = StringSubstr(StrDate, StringLen(StrDate) - StringLen("00:00:00 - 00:00:00"));
 
fxsaber:
Si tratta di un bug o di un chip con la conversione da stringa a tempo?

È sempre stato così. Ma io l'avrei fatto un po' diversamente...

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

E se stampate solo questa volta, tutto quello che dovete fare è

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

Questo è sempre stato il caso.

Una conseguenza interessante quindi.

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

Conciso e sorprendente. Perché il compilatore non converte ciò che sembra essere una costante in una costante.

 
fxsaber:

Una conseguenza interessante quindi.

Conciso e sorprendente. Perché il compilatore non converte ciò che sembra essere una costante in una costante.

La stringa vuota è la data corrente?

ps; Sorprendentemente... Infatti la data attuale, ma il tempo è 1:00
 
fxsaber:

Una conseguenza interessante quindi.

Conciso e sorprendente. Perché il compilatore non converte ciò che sembra essere una costante.

Sostituisce TimeCurrent o TimeLocal?)

Ricordo che in alcune lingue la creazione di un tipo di data lo inizializza automaticamente con l'ora del sistema.

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

La data attuale sì, ma l'ora è l'1:00 del mattino.

Nessun suggerimento sulla provenienza dell'ora (lo stesso per me). Probabilmente dipende dal fuso orario.


Questo non è più interessante.

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