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ステータスの成行注文がたくさん残っていることがあります。原則として、これらを対象としています。

一部のサーバーでは、REJECTを受けた成行注文の特別な機能として、ステータスがCANCELEDに変更されます。

 
これはバグなのか、それとも時間軸での文字列変換の バグなのか?
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時です。
 
fxsaber:

それなら、面白い結果ですね。

簡潔で驚きがある。コンパイラは定数と思われるものを変換しないため。

TimeCurrentと TimeLocalのどちらを代用するのでしょうか?)

ある言語では、日付型を作成すると、自動的にシステム時刻で初期化されることを覚えています。

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

現在の日付は確かにそうですが、時刻は午前1時です。

時間がどこから来ているのか、示唆がない(私も同じ)。おそらく、時間帯にも よるのでしょう。


これはもう、おもしろくないですね。

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