MT5 서버와 Windows 현지 시간 동기화

 

안녕하세요!

MQL5 에서 컴퓨터의 현재 현지 시간 을 조정할 수 있습니까?

GetLocalTime() 및 SetLocalTime() 함수가 작동합니까?

 
prostotrader :

안녕하세요!

MQL5에서 컴퓨터의 현재 현지 시간을 조정할 수 있습니까?

GetLocalTime() 및 SetLocalTime() 함수가 작동합니까?

작동하는지 확인했습니다

//+------------------------------------------------------------------+
//|                                                     TimeTest.mq5 |
//|                                      Copyright 2016 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
struct _SYSTEMTIME {
   ushort wYear;
   ushort wMonth;
   ushort wDayOfWeek;
   ushort wDay;
   ushort wHour;
   ushort wMinute;
   ushort wSecond;
   ushort wMilliseconds;
};

_SYSTEMTIME loc_time;

#import "kernel32.dll"
void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
    GetLocalTime(loc_time);
     if (loc_time.wYear > 0 )
    {
      loc_time.wSecond = 55 ;
       if (SetLocalTime(loc_time))
      {
         if (loc_time.wYear > 0 )
        {
        }
      }
    }
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
  
  }
//+------------------------------------------------------------------+
 

이제 현지 시간 을 올바르게 동기화하는 방법을 이해해야 합니다.

TimeCurrent()가 청산 및 비 거래 시간(FORTS) 동안 업데이트되지 않는 경우 MT5 서버 시간이 있는 컴퓨터.

어떤 아이디어?

 
prostotrader :

이제 현지 시간을 올바르게 동기화하는 방법을 이해해야 합니다.

TimeCurrent()가 FORTS의 청산 및 비 거래 시간 동안 업데이트되지 않는다는 점을 감안할 때 MT5 서버 시간이 있는 컴퓨터.

어떤 아이디어?

MT4에서와 같이 틱을 생성합니까?
파일:
zSendTick.mq4  2 kb
 
prostotrader :

이제 현지 시간을 올바르게 동기화하는 방법을 이해해야 합니다.

TimeCurrent()가 FORTS의 청산 및 비 거래 시간 동안 업데이트되지 않는다는 점을 감안할 때 MT5 서버 시간이 있는 컴퓨터.

어떤 아이디어?

따라서 틱이 올 때만 업데이트가 필요합니다. 따라서 OnTick에서만 전화를 겁니다. 너무 똑똑합니다.
 
fxsaber :
따라서 틱이 올 때만 업데이트가 필요합니다. 따라서 OnTick에서만 전화를 겁니다. 너무 똑똑합니다.

아무것도 아끼지 않았습니다...

견적이 유리에 오는 사전 시장이 있으므로 9-50에서 10-00까지 시간을 서버 시간 과 동기화 할 수 있습니다.

추가됨

기호에 스턴을 추가하면 필터링 없이 모든 기호의 이벤트가 거기에 도달합니다.

Market Watch에서 선정되었습니다. 다음으로 CopyTicks()를 가져와 동기화 시간을 확인합니다....

이 같은.

추가됨

내가 뭔가 생각하지 않은 경우 나를 수정합니다.

//+------------------------------------------------------------------+
//|                                              Time_sync_forts.mq5 |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link        "https://www.mql5.com"
#property version    "1.00"
//---
struct _SYSTEMTIME
  {
   ushort             wYear;
   ushort             wMonth;
   ushort             wDayOfWeek;
   ushort             wDay;
   ushort             wHour;
   ushort             wMinute;
   ushort             wSecond;
   ushort             wMilliseconds;
  };

_SYSTEMTIME loc_time;

#import "kernel32.dll"
void GetLocalTime(_SYSTEMTIME &sys_time);
bool SetLocalTime(_SYSTEMTIME &sys_time);
#import
//---
bool is_sync;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   is_sync= false ;
   MarketBookAdd ( Symbol ());
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   MarketBookRelease ( Symbol ());
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnBookEvent ( const string &symbol)
  {
   loc_time.wYear= 0 ;
   GetLocalTime(loc_time);
   if (loc_time.wYear> 0 )
     {
       if ((loc_time.wHour== 9 ) && (loc_time.wMinute>= 50 ) && (loc_time.wMinute<= 59 ))
        {
         MqlTick curr_tick[ 1 ];
         if ( CopyTicks (symbol,curr_tick, COPY_TICKS_ALL , 0 , 1 )== 1 )
           {
             MqlDateTime sv_time;
             TimeToStruct (curr_tick[ 0 ].time,sv_time);
             if (!is_sync)
              {
               loc_time.wHour= ushort (sv_time.hour);
               loc_time.wMinute = ushort (sv_time.min);
               loc_time.wSecond = ushort (sv_time.sec);
               loc_time.wMilliseconds= ushort ( ulong (curr_tick[ 0 ].time_msc)- ulong (curr_tick[ 0 ].time)* 1000 );
               if (SetLocalTime(loc_time))
                {
                 is_sync= true ;
                 Print ( "Local time sync is done." );
                }
              }
           }
        }
       else is_sync= false ;
     }
  }
//+------------------------------------------------------------------+
 

만일을 대비하여 "신선함"에 대한 인용문을 확인하십시오.

               if (!is_sync)
              {
                 if ((loc_time.wDayOfWeek == ushort (sv_time.day_of_week)) &&
                   (loc_time.wHour == ushort (sv_time.hour)))
                {
                   loc_time.wMinute = ushort (sv_time.min);
                 loc_time.wSecond = ushort (sv_time.sec);
                 loc_time.wMilliseconds= ushort ( ulong (curr_tick[ 0 ].time_msc)- ulong (curr_tick[ 0 ].time)* 1000 );
                 if (SetLocalTime(loc_time))
                 {
                  is_sync= true ;
                   Print ( "Local time sync is done." );
                 }
                }
              }
 
prostotrader :

이제 현지 시간을 올바르게 동기화하는 방법을 이해해야 합니다.

TimeCurrent()가 청산 및 비 거래 시간(FORTS) 동안 업데이트되지 않는 경우 MT5 서버 시간이 있는 컴퓨터.

어떤 아이디어?

원본과 동기화하는 것이 더 쉬울 수 있습니까? 거래소에서 발생하는 모든 이벤트는 타임스탬프를 받습니다. 거래소의 시간 자체는 밀리초의 오류로 천문학적으로 동기화됩니다. MT5 서버(브로커에 있음)에 알림이 도착하는 시간은 이미 다르지만, 단말기에 패키지를 보내는 시간은 세 번째, 단말기에 도착하는 시간은 네 번째입니다. 시스템 시간을 로컬 컴퓨터의 천문 시간과 동기화하면 항상 작동하며 현지 시간 은 거래소의 시간과 일치합니다. 수백 개의 공개(무료) NTP 시간 서버가 있습니다. 예를 들어 다음과 같이 살아 있고 작동합니다.

195.234.155.123;ntp.dvconsulting.dk
85.17.207.62;ntp.edge.tillo.ch
195.34.89.227;ntp.favey.ch
195.234.155.124;ntp.gal.dk
193.226.65.36;ntp.idsi.md

 
CopyTicks[0]에 핑을 추가합니다.
 
Vladimir :

원본과 동기화하는 것이 더 쉬울 수 있습니까? 거래소에서 발생하는 모든 이벤트는 타임스탬프를 받습니다. 거래소의 시간 자체는 밀리초의 오류로 천문학적으로 동기화됩니다. MT5 서버(브로커에 있음)에 알림이 도착하는 시간은 이미 다르지만, 단말기에 패키지를 보내는 시간은 세 번째, 단말기에 도착하는 시간은 네 번째입니다. 시스템 시간을 로컬 컴퓨터의 천문 시간과 동기화하면 항상 작동하며 현지 시간은 거래소의 시간과 일치합니다. 수백 개의 공개(무료) NTP 시간 서버가 있습니다. 예를 들어 다음과 같이 살아 있고 작동합니다.

195.234.155.123;ntp.dvconsulting.dk
85.17.207.62;ntp.edge.tillo.ch
195.34.89.227;ntp.favey.ch
195.234.155.124;ntp.gal.dk
193.226.65.36;ntp.idsi.md

CopyTicks()에서 소요된 시간은 교환 시간이며 배송 지연이 있음이 분명합니다.

패킷을 내 컴퓨터에 전송하지만 4-6ms로 매우 작습니다.

정확한 시간은 거래소의 시간이 일치하지 않을 수 있기 때문에 아무 것도 주지 않으며, 우리는 거래소에 따라 정확하게 거래합니다.

시간과 MT5에서

 
fxsaber :
CopyTicks[0]에 핑을 추가합니다.
미미한(밀리세컨드) 떠서 "날씨"를 만들지 않을 것이라고 생각합니다.