You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
It is insignificant (milliseconds) and floats, I don't think it will make "weather".
Yes, you probably have a high ping (I have 4-6ms)
What's the best way to get a ping?
Added by
Everyone knows their average ping, maybe just enter it as a constant
What is the best way to get a ping?
TERMINAL_PING_LAST
loc_time.wMilliseconds=ushort(curr_tick[0].time_msc % 1000); // Стало
Thanks to fxsaber for the valuable comments, this is what came out
//| Time_sync_forts.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
//---
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 On book event function |
//+------------------------------------------------------------------+
bool ConvertToTime(const long n_value,_SYSTEMTIME &a_time)
{
a_time.wMilliseconds=ushort(n_value%1000);
ulong new_time=(ulong(n_value)-ulong(a_time.wMilliseconds))/1000;
MqlDateTime cur_time;
cur_time.year=0;
TimeToStruct(datetime(new_time),cur_time);
if(cur_time.year>0)
{
a_time.wDay=ushort(cur_time.day);
a_time.wDayOfWeek=ushort(cur_time.day_of_week);
a_time.wHour=ushort(cur_time.hour);
a_time.wMinute= ushort(cur_time.min);
a_time.wMonth = ushort(cur_time.mon);
a_time.wSecond= ushort(cur_time.sec);
a_time.wYear=ushort(cur_time.year);
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Expert On book event 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)
{
long last_ping=long(NormalizeDouble(double(TerminalInfoInteger(TERMINAL_PING_LAST))/1000,0));
if((loc_time.wDayOfWeek==ushort(sv_time.day_of_week)) &&
(loc_time.wHour==ushort(sv_time.hour)))
{
long mcs_time=long(curr_tick[0].time_msc%1000);
if((mcs_time+last_ping)>999)
{
mcs_time=long(curr_tick[0].time_msc)+last_ping;
if(!ConvertToTime(mcs_time, loc_time)) return;
}
else
{
loc_time.wMinute = ushort(sv_time.min);
loc_time.wSecond = ushort(sv_time.sec);
loc_time.wMilliseconds=ushort(mcs_time);
}
if(SetLocalTime(loc_time))
{
is_sync=true;
Print("Local time sync is done.");
}
}
}
}
}
else is_sync=false;
}
}
//+------------------------------------------------------------------+
ulong new_time=ulong(n_value / 1000);
MqlDateTime cur_time = {0};
// cur_time.year=0;
//.......
// long last_ping=long(NormalizeDouble(double(TerminalInfoInteger(TERMINAL_PING_LAST))/1000,0));
long last_ping=long(TerminalInfoInteger(TERMINAL_PING_LAST))/2000.0 + 0.5);
It's a bit too complicated for my taste. I didn't read into it, it's just this that catches my eye
ulong new_time=ulong(n_value / 1000);
MqlDateTime cur_time = {0};
// cur_time.year=0;
//.......
// long last_ping=long(NormalizeDouble(double(TerminalInfoInteger(TERMINAL_PING_LAST))/1000,0));
long last_ping=long(TerminalInfoInteger(TERMINAL_PING_LAST))/2000.0 + 0.5);
:)
//| Time_sync_forts.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
//---
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 On book event function |
//+------------------------------------------------------------------+
bool ConvertToTime(const long n_value,_SYSTEMTIME &a_time)
{
a_time.wMilliseconds=ushort(n_value%1000);
ulong new_time=ulong(double(n_value)/1000);
MqlDateTime cur_time = {0};
TimeToStruct(datetime(new_time),cur_time);
if(cur_time.year>0)
{
a_time.wDay=ushort(cur_time.day);
a_time.wDayOfWeek=ushort(cur_time.day_of_week);
a_time.wHour=ushort(cur_time.hour);
a_time.wMinute= ushort(cur_time.min);
a_time.wMonth = ushort(cur_time.mon);
a_time.wSecond= ushort(cur_time.sec);
a_time.wYear=ushort(cur_time.year);
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| Expert On book event 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)
{
long last_ping=long(NormalizeDouble(double(TerminalInfoInteger(TERMINAL_PING_LAST))/1000,0));
if((loc_time.wDayOfWeek==ushort(sv_time.day_of_week)) &&
(loc_time.wHour==ushort(sv_time.hour)))
{
long mcs_time=long(curr_tick[0].time_msc%1000);
if((mcs_time+last_ping)>999)
{
mcs_time=long(curr_tick[0].time_msc)+last_ping;
if(!ConvertToTime(mcs_time, loc_time)) return;
}
else
{
loc_time.wMinute = ushort(sv_time.min);
loc_time.wSecond = ushort(sv_time.sec);
loc_time.wMilliseconds=ushort(mcs_time);
}
if(SetLocalTime(loc_time))
{
is_sync=true;
Print("Local time sync is done.");
}
}
}
}
}
else is_sync=false;
}
}
//+------------------------------------------------------------------+