mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 79

 
알랭 벌리앙 :

GMT에 따라 서버 시간을 얻고 싶습니다.

이것은 스크립트를 실행할 때 얻는 것입니다. TimeGMT 와 TimeServerGMT라는 두 가지 값이 특별히 표시되어 일치하는지 확인할 수 있습니다.

일치하면 오류가 없고 그렇지 않으면 오류가 있습니다.

 
fxsaber :

스크립트를 실행할 때 이것을 얻습니다. 두 개의 값이 특별히 거기에 출력됩니다: TimeGMT 및 TimeServerGMT, 그래서 그것들이 일치하는지 확인할 수 있습니다.

일치하면 오류가 없고 그렇지 않으면 오류가 있습니다.

이해했다.
 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

라이브러리: TypeToBytes

fxsaber , 2018.03.31 09:24

 // Кроссплатформенный пример передачи произвольных данных через пользовательское событие

#include <fxsaber\HistoryTicks\Data_String.mqh> // https://www.mql5.com/ru/code/20298

// Печать произвольных данных
template < typename T>
bool MyPrint( const T &Value )
{
  T Array[ 1 ];
  
  Array[ 0 ] = Value;
  
   ArrayPrint (Array, _Digits , NULL , 0 , WHOLE_ARRAY , ARRAYPRINT_HEADER | ARRAYPRINT_ALIGN );
  
   return ( true );
}

void OnChartEvent ( const int id, const long &lparam, const double &, const string &sparam )
{
   // Распечатали полученные данные
   if ((id == CHARTEVENT_CUSTOM ) &&
      (lparam ?  MyPrint(DATA_STRING::FromString< MqlDateTime >(sparam)) // Получили MqlDateTime
              : !MyPrint(DATA_STRING::FromString< MqlTick >(sparam))))   // Получили MqlTick
     ExpertRemove (); // Вышли из примера
}

void OnInit ()
{
   MqlTick Tick;  
   MqlDateTime DateTime;
  
   // Заполнили значения
   SymbolInfoTick ( _Symbol , Tick);  
   TimeCurrent (DateTime);

   // Передали
   EventChartCustom ( 0 , 0 , 0 , 0 , DATA_STRING::ToString(Tick));     // Передали MqlTick
   EventChartCustom ( 0 , 0 , 1 , 0 , DATA_STRING::ToString(DateTime)); // Передали MqlDateTime
}
 
fxsaber :

sparam에는 길이 제한이 있습니다. 고려하셨나요?

 
안드레이 바리노프 :

sparam에는 길이 제한이 있습니다.

예, 128바이트입니다.

 const bool Init = EventChartCustom ( 0 , 0 , 0 , 0 , NULL );

void OnChartEvent ( const int id, const long &, const double &, const string &sparam )
{
   static int PrevLength = - 1 ;
  
   if (id == CHARTEVENT_CUSTOM )
  {
     const int Length = StringLen (sparam);

     bool Res = (Length != PrevLength);
    
     if (Res)
    {
       string Str;
            
       StringInit (Str, Length + 1 , 1 );
      
      Res = EventChartCustom ( 0 , 0 , 0 , 0 , Str);
    }
    
     if (!Res)
    {
       Print (PrevLength);
      
       ExpertRemove ();
    }
      
    PrevLength = Length;      
  }
}

고려하셨나요?

아니요, 당신은 그를 볼 수 있습니다. 문자열 저장소를 사용하는 옵션 중 하나로 sparam의 예가 제공됩니다.

코드를 복잡하게 만들 수 있지만(조각으로 보내기) 가시성을 잃게 됩니다.

 
fxsaber :

구체적인 예가 없으면 건설적인 것이 작동하지 않을 것입니다.

다음 그림을 제공합니다.


   Print ( "TimeServer: ", TimeGMT ()-TimeServerGMTOffset() );
   Print ( "TimeServerGMT: ",TimeServerGMT() );
   Print ( " TimeCurrent : ", TimeCurrent () );
   Print ( " TimeLocal : ", TimeLocal () );
   Print ( " TimeGMT : ", TimeGMT () );
   Print ( " TimeGMTOffset : ",TimeServerGMTOffset() );
   Print ( "" );

그리고 여기 GMT +2 근무 교대가 있는 MT4 설치 프로그램이 있습니다.

TimeServer 를 볼 것으로 예상됨 = 2018.04.01 05:54:26

파일:
tw4setup.zip  522 kb
 
비탈리 무지첸코 :

다음 그림을 제공합니다.

만일을 대비 하여 무역 서버의 이름을 알려주세요.

PS TradersWay 데모.

제대로 작동

 2018.04 . 01 08 : 36 : 08.858 TimeServerGMT EURUSDi,M1: TimeServerGMT() = 2018.03 . 30 19 : 59 : 59

어쩌면 당신은 그것을 가지고 있지 않습니다

 // Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
 
fxsaber :

만일을 대비 하여 무역 서버의 이름을 알려주세요.

PS TradersWay-데모.

제대로 작동

어쩌면 당신은 그것을 가지고 있지 않습니다

아마 아닐거야. 나는 아마 어떤 터미널에도 가지고 있지 않을 것입니다, 나는 M15 아래로 시간을 절대 바꾸지 않습니다

알겠습니다. 더 살펴보겠습니다.
 
비탈리 무지첸코 :

아마 아닐거야. 나는 아마 어떤 터미널에도 가지고 있지 않을 것입니다, 나는 M15 아래로 시간을 절대 바꾸지 않습니다

이렇게 하세요

 datetime GetBarTime( const datetime time, const bool NextBar = false , string Symb = NULL , const ENUM_TIMEFRAMES TimeFrame = PERIOD_M15 )
 
fxsaber :

이렇게 하세요

했어, 넌센스를 보여주지 않았다. 이동이 가장 가능성이 -720이어야 함을 혼동합니다.



추신 글쎄, 나는 교대 시간이 +2 시간이라는 것을 알고 있습니다. 사이트에 작성되어 있지만 로봇은 이것을 모릅니다.

차트에서 어드바이저를 실행하면 수행된 대로 " TimeServer() 서버의 현재 시간 찾기"와 같은 필요한 결과를 얻지 못할 것입니다. 잘못하고 있습니다.

여기에서 아마도 개발자는 터미널에 기능을 도입하지 않고는 할 수 없습니까?