下午好!
是否可以从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()
{
//---
}
//+------------------------------------------------------------------+
现在我们只需要弄清楚如何正确地同步本地时间
考虑到FORTS的TimeCurrent()在清算和非交易时间不更新,将计算机的时间与MT5服务器的时间相比较。
有什么想法吗?
现在我们只需要弄清楚如何正确地同步本地时间
考虑到FORTS的TimeCurrent()在清算和非交易时间不更新,将计算机的时间与MT5服务器的时间相比较。
有什么想法吗?
因此,只有在蜱虫来临时才需要更新。因此,只在OnTick中调用。它们太复杂了。
没有什么是过度的...
有一个前市场,报价进入堆栈,所以从9-50到10-00你可以将时间与服务器时间 同步。
添加
如果你添加了一个任何符号的stanan,那么在没有过滤的情况下,所有乐器的事件都会进入那里。
在市场观察中选择的。然后采取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.");
}
}
}
现在我们只需要弄清楚如何正确地同步本地时间
计算机与MT5服务器时间,考虑到TimeCurrent()在清算和非交易时间(FORTS)不更新。
有什么想法吗?
也许与源头同步比较容易?在交易所发生的任何事件都会得到其时间戳。交易所本身的时间是与天文时间同步的,误差为几毫秒。而通知到达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()能否工作?