Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 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 :

Es wurde einmal eine Möglichkeit vorgeschlagen , den GMT-Offset der Serverzeit zu bestimmen. Es funktioniert nicht immer genau.

Im Folgenden finden Sie die genaue Fassung.


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

Die Handelshistorie kann eine Fülle von Marktaufträgen mit dem Status ABGELEHNT enthalten. In der Regel sind dies die Ziele.

Auf einigen Servern gibt es eine Besonderheit bei solchen Marktaufträgen, die ein REJECT erhalten haben: der Status ist ein anderer - CANCELED.

 
Ist dies ein Fehler oder ein Fehler bei der Stringkonvertierung in der Zeit?
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.
 
Wird dieser Teil bei der Kompilierung in eine Konstante umgewandelt?
StrDate = StringSubstr(StrDate, StringLen(StrDate) - StringLen("00:00:00 - 00:00:00"));
 
fxsaber:
Ist dies ein Fehler oder ein Chip bei der Umwandlung von Zeichenketten in Zeit?

So ist es immer gewesen. Aber ich hätte es ein wenig anders gemacht...

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

Und wenn Sie dieses Mal nur ausdrucken, müssen Sie nur Folgendes tun

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

Das war schon immer der Fall.

Das ist eine interessante Konsequenz.

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

Prägnant und überraschend. Denn was wie eine Konstante aussieht, wird vom Compiler nicht in eine Konstante umgewandelt.

 
fxsaber:

Das ist eine interessante Konsequenz.

Prägnant und überraschend. Weil der Compiler das, was wie eine Konstante aussieht, nicht in eine Konstante umwandelt.

Ist die leere Zeichenfolge das aktuelle Datum?

ps; Überraschenderweise... tatsächlich das aktuelle Datum, aber die Uhrzeit ist 1:00
 
fxsaber:

Das ist eine interessante Konsequenz.

Prägnant und überraschend. Denn der Compiler wandelt nicht um, was wie eine Konstante aussieht.

Ersetzt es TimeCurrent oder TimeLocal?)

Ich erinnere mich, dass in einigen Sprachen beim Erstellen eines Datumstyps dieser automatisch mit der Systemzeit initialisiert wird.

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

Das Datum ist zwar aktuell, aber die Uhrzeit ist 1:00 Uhr nachts.

Kein Hinweis darauf, woher die Stunde kommt (das gilt auch für mich). Wahrscheinlich hängt das von der Zeitzone ab.


Das ist nicht mehr interessant.

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