mql5语言的特点、微妙之处以及技巧 - 页 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 :

曾经有人提出一种方法 来确定服务器时间的GMT偏移。它并不总是完全有效。

下面,似乎是确切的版本。


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

交易历史记录中可能充满了状态为REJECTED的市场订单。一般来说,这些是目标。

有些服务器对这种收到拒绝的市场订单有一个特殊的功能:状态不同--取消。

 
这是一个错误,还是在时间上的字符串转换 的错误?
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.
 
这块在编译时变成了一个常量吗?
StrDate = StringSubstr(StrDate, StringLen(StrDate) - StringLen("00:00:00 - 00:00:00"));
 
fxsaber:
这是一个错误,还是字符串 到时间转换 的一个芯片?

这就是一直以来的情况。但我的做法会有一点不同......。

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

而如果你这次只是打印出来,你所要做的就是

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

这种情况一直存在。

那么,一个有趣的后果是。

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

简洁而令人惊讶。因为编译器不会把看起来是常数的东西转换为常数。

 
fxsaber:

那么,一个有趣的后果是。

简洁而令人惊讶。因为编译器不会把看起来是常数的东西转换成常数。

空字符串是否为当前日期?

ps;令人惊讶的是......的确是当前的日期,但时间是1:00
 
fxsaber:

那么,一个有趣的后果是。

简洁而令人惊讶。因为编译器不会转换看起来是常数的东西。

它是用TimeCurrent 还是TimeLocal来代替?)

我记得在某些语言中,创建一个日期类型会自动用系统时间初始化它。

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

确实是当前日期,但时间是凌晨1点。

没有建议,不知道这一小时是从哪里来的(对我来说也一样)。可能取决于时区


这已经没有什么意思了。

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