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

 
비탈리 무지첸코 :

나는 토요일에 어드바이저를 차트에 매달지만, 어드바이저는 예를 들어 Market Watch 23:58 및 내 지역 04:45에서 마지막 틱의 시간을 얻을 수 있습니다. 서버 시간은 모르겠습니다.

질문: 서버(터미널) 시간의 마지막 틱 이후로 얼마나 많은 시간이 흘렀는지

나는 조금 생각했다. 어드바이저를 차트에 붙였을 때 차이가 없는 것으로 밝혀졌습니다. 실제 틱이 없는 한 서버 의 실시간을 사용하는 프로그램 알고리즘의 해당 부분을 실행할 수 없습니다.

틱이 도착하기 전에 계산이 필요한 경우 사용자에게 ServerGMTOffset을 요청하십시오.

따라서 ServerTradeTime()이 없어도 문제가 해결됩니다.

 
이호르 헤라스코 :

나는 조금 생각했다. 어드바이저를 차트에 붙였을 때 차이가 없는 것으로 밝혀졌습니다. 실제 틱이 없는 한 서버의 실시간을 사용하는 프로그램 알고리즘의 해당 부분을 실행하는 것은 불가능합니다.

틱이 도착하기 전에 계산이 필요한 경우 사용자에게 ServerGMTOffset을 요청하십시오.

따라서 ServerTradeTime()이 없어도 문제가 해결됩니다.

사용자는 서버의 오프셋을 모르고 이것을 모릅니다.

두 개의 값만 알려져 있으며 이 데이터로는 계산하기에 충분하지 않습니다. " 서버(터미널) 시간의 마지막 틱 이후 경과한 시간 "

작업은 구체적이며 아직 당신과 같은 해결책이 보이지 않습니다.

 
비탈리 무지첸코 :

나는 토요일에 어드바이저를 차트에 매달지만, 어드바이저는 예를 들어 Market Watch 23:58 및 내 지역 04:45에서 마지막 틱의 시간을 얻을 수 있습니다. 서버 시간은 모르겠습니다.

질문: 서버(터미널) 시간의 마지막 틱 이후로 얼마나 많은 시간이 흘렀는지

둘 다 시간이 아니라 날짜 시간입니다. 그것은 날짜와 시간입니다. 따라서 이 데이터를 사용한 산술 연산은 초 단위의 시차를 제공하며, 이는 일, 시, 분, 초로 변환하는 것이 어렵지 않습니다.

또한 주말에 TimeTradeServer 가 표시할 내용도 확인해야 하지만 현재로서는 다음과 같이 표시됩니다.

 2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeCurrent () = 2018.03 . 29 14 : 59 : 54
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeLocal () = 2018.03 . 29 15 : 00 : 03
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeGMT () = 2018.03 . 29 12 : 00 : 03
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeGMTOffset () = - 10800
2018.03 . 29 15 : 00 : 03.640 00 (EURUSD,H1)   TimeTradeServer () = 2018.03 . 29 15 : 00 : 03
서버 시간과 현지 시간의 초 차이에 주의하고 현지 시간과 예상 서버 시간이 정확히 일치하는지 확인합니다.
 
Forex의 경우 4가지 코드에서 이 코드를 다시 실행할 수 있습니다.

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

mql4 언어의 기능, 미묘함 및 작업 방법

fxsaber , 2018.03.29 14:32

 #property strict

#define HOUR 3600
#define DAY ( 24 * HOUR)
#define WEEK 7

datetime GetBarTime( const datetime time, const bool NextBar = false , string Symb = NULL , const ENUM_TIMEFRAMES TimeFrame = PERIOD_M1 )
{
   if (Symb == NULL )
    Symb = _Symbol ;
    
   return ( iTime (Symb, TimeFrame, iBarShift (Symb, TimeFrame, time) - (NextBar ? 1 : 0 )));
}

datetime GetTimeDayOfWeek( const int Shift = 0 , const ENUM_DAY_OF_WEEK Day = SUNDAY )
{
   const datetime Res = TimeCurrent () / DAY * DAY;
  
   return (Res - (((WEEK + ( TimeDayOfWeek (Res) - Day )) % WEEK) + Shift * WEEK) * DAY);
}

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmtoffset
// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
int TimeServerGMTOffset( void )
{
   const datetime Sunday = GetTimeDayOfWeek();
  
   return ((( int ) MathRound (( double ) MathMin (Sunday - DAY - GetBarTime(Sunday), Sunday + DAY - GetBarTime(Sunday, true )) / HOUR) - 3 ) * HOUR);
}

// Аналог по серверному времени - https://www.mql5.com/ru/docs/dateandtime/timegmt
// Работает для FOREX-символов, когда M1-история доступна за ближайшую неделю
datetime TimeServerGMT( void )
{
   return ( TimeCurrent () + TimeServerGMTOffset());
}
 
fxsaber :
Forex의 경우 4가지 코드에서 이 코드를 다시 실행할 수 있습니다.

감사합니다. 살펴보겠습니다. 그러나 다시, 비 외환 기호가 있습니다.

주어진 시간에 현재 서버 시간을 간단하고 간략하게 가져올 수 없다는 것은 편리하지 않습니다.

알렉세이 빅토로프 :

둘 다 시간이 아니라 날짜 시간입니다. 그것은 날짜와 시간입니다. 따라서 이 데이터를 사용한 산술 연산은 초 단위의 시차를 제공하며, 이는 일, 시, 분, 초로 변환하는 것이 어렵지 않습니다.

또한 주말에 TimeTradeServer 가 표시할 내용도 확인해야 하지만 현재로서는 다음과 같이 표시됩니다.

서버 시간과 현지 시간의 초 차이에 주의하고 현지 시간과 예상 서버 시간이 정확히 일치하는지 확인합니다.

저도 직접 출력했는데 주말에 어떻게 사용하는지.. 일반적으로 제공된 정보를 확인해야 합니다.

작업은 최소입니다. " 서버(터미널) 시간의 마지막 틱 이후 경과한 시간"

 if ( TimeCurrent ()<TimeServer()- 60 ) Alert( "нет котировок более 1-й минуты" );
 
비탈리 무지첸코 :

감사합니다. 살펴보겠습니다. 그러나 다시, 비 외환 기호가 있습니다.

중개인에 하나 이상의 외환 기호가 있으면 다른 기호도 작동합니다.

브로커에 단일 외환 기호가 없으면 편의상의 문제가 발생합니다.

 
비탈리 무지첸코 :

감사합니다. 살펴보겠습니다. 그러나 다시, 비 외환 기호가 있습니다.

주어진 시간에 현재 서버 시간을 간단하고 간략하게 가져올 수 없다는 것은 편리하지 않습니다.

저도 직접 출력했는데 주말에 어떻게 사용하는지.. 일반적으로 제공된 정보를 확인해야 합니다.

작업은 최소입니다. " 서버(터미널) 시간의 마지막 틱 이후 경과한 시간"

물론 확인은 필요하지만 TimeCurrent와 TimeTradeServer의 차이로 판단하면 차이가 커질 것이라고 추측할 수 있다.

그리고 제 MQ 데모 서버 시간 은 모스크바와 동일하며 서버 시간이 로컬 시간과 일치하지 않는지 여부를 보여줍니다.

 
알렉세이 빅토로프 :

물론 확인은 필요하지만 TimeCurrent와 TimeTradeServer의 차이로 판단하면 차이가 커질 것이라고 추측할 수 있다.

그리고 제 MQ 데모 서버 시간은 모스크바와 동일하며 서버 시간이 로컬 시간과 일치하지 않는지 여부를 보여줍니다.

로보

내 지역은 17:17:13이었습니다.

 

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

오류, 버그, 질문

fxsaber , 2017.05.19 22:35

TimeTradeServer 는 모든 종류의 넌센스를 반환할 수 있습니다. 예를 들어 값이 TimeCurrent보다 작습니다. 이것은 실제 적용을 완전히 무효화합니다.

내가 아이디어를 올바르게 이해했다면 터미널이 실행 중인 TimeTradeServer가 TimeCurrent를 수신한 후 경과 시간을 계산하고 이 차이를 추가하여 일종의 미래 TimeCurrent 값을 에뮬레이트해야 합니다.

이제 고문을 시작합니다.

 #define TOSTRING(A) #A + " = " + ( string )(A) + "\n"

void OnInit ()
{
   EventSetTimer ( 1 );
}

void OnTimer ()
{
   Comment (TOSTRING( TimeTradeServer ()) + TOSTRING( TimeCurrent ()));
}

넌센스를 볼 수 있습니다

날짜에주의하십시오.

 
fxsaber :

그리고 이것, 터미널 또는 비뚤어진 설정의 DC에 대한 책임은 누구에게 있습니까?