안녕하세요!
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 서버 시간이 있는 컴퓨터.
어떤 아이디어?
이제 현지 시간을 올바르게 동기화하는 방법을 이해해야 합니다.
TimeCurrent()가 FORTS의 청산 및 비 거래 시간 동안 업데이트되지 않는다는 점을 감안할 때 MT5 서버 시간이 있는 컴퓨터.
어떤 아이디어?
따라서 틱이 올 때만 업데이트가 필요합니다. 따라서 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 ((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." );
}
}
}
이제 현지 시간을 올바르게 동기화하는 방법을 이해해야 합니다.
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
원본과 동기화하는 것이 더 쉬울 수 있습니까? 거래소에서 발생하는 모든 이벤트는 타임스탬프를 받습니다. 거래소의 시간 자체는 밀리초의 오류로 천문학적으로 동기화됩니다. 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에서
CopyTicks[0]에 핑을 추가합니다.
안녕하세요!
MQL5 에서 컴퓨터의 현재 현지 시간 을 조정할 수 있습니까?
GetLocalTime() 및 SetLocalTime() 함수가 작동합니까?