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 상태의 시장 주문으로 가득 차 있을 수 있습니다. 일반적으로 이것들은 테이키입니다.

일부 서버에서 이러한 시장 주문은 거부를 받았다는 특징이 있습니다. 상태가 다름 - 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 :

그런 다음 흥미로운 결과입니다.

간결하고 놀랍습니다. 컴파일러는 상수로 보이는 것을 상수로 변환하지 않기 때문입니다.

빈 문자열이 현재 날짜입니까?

추신; 굉장하군요... 사실은 현재 날짜지만 시간은 1시
 
fxsaber :

그런 다음 흥미로운 결과입니다.

간결하고 놀랍습니다. 컴파일러는 상수로 보이는 것을 상수로 변환하지 않기 때문입니다.

TimeCurrent 또는 TimeLocal 대체품이 있습니까? up: 그렇지 않다고 본다)

일부 언어에서는 날짜 유형을 생성하면 자동으로 시스템 시간으로 초기화된다는 것을 기억합니다.

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

유효한 현재 날짜이지만 시간 1:00

시간이 어디에서 오는지에 대한 가정은 없습니다(저도 동일합니다). 시간대 에 따라 다를 수 있습니다.


그래서 더 이상 흥미롭지 않습니다.

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