市场关闭 - 页 2 123456789...12 新评论 prostotrader 2017.01.13 22:17 #11 我认为我们应该像这样改变交易时间的检查。bool CheckExchTime(){ MqlTick cur_tick[1]; MqlDateTime cur_time; if(CopyTicks(Symbol(), cur_tick, COPY_TICKS_INFO, 0, 1)==1) { TimeToStruct(cur_tick[0].time, cur_time); ulong trade_time = cur_time.hour * 3600 + cur_time.min * 60 + cur_time.sec; if(((trade_time >= time_st_mon) && (trade_time < 50370)) || ((trade_time >= time_st_day) && (trade_time < 67470)) || ((trade_time >= time_st_evn) && (trade_time < 85770))) { return(true); } } return(false);} Market closed Synchronise Windows local time 将Windows本地时间与MT5服务器同步 Sergey Chalyshev 2017.01.14 01:24 #12 prostotrader:谢尔盖!阅读TimeCurrent帮助 - 它说这是SERVER时间Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.如果没有刻度,周末或非交易时间,TimeCurrent就不会改变。而TimeTradeServer不起作用,它显示的是你电脑上的本地时间。通过运行专家顾问,很容易检查这一点。//+------------------------------------------------------------------+int OnInit() {//--- create timer EventSetTimer(1); return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer EventKillTimer(); }//+------------------------------------------------------------------+void OnTimer() { Comment( "\n TimeCurrent: ",TimeCurrent(), "\n TimeTradeServer: ",TimeTradeServer(), "\n TimeLocal: ",TimeLocal(), ""); }//+------------------------------------------------------------------+当计算机时间改变时,TimeTradeServer 也会改变,并显示计算机时间TimeLocal。 Plese help me help please 专家顾问 - 杂项问题 prostotrader 2017.01.14 09:05 #13 Sergey Chalyshev: 如果不存在点差,周末或非交易时间,TimeCurrent不会改变。而TimeTradeServer不起作用,它显示的是本地电脑时间。通过运行EA很容易检查这一点。//+------------------------------------------------------------------+int OnInit() {//--- create timer EventSetTimer(1); return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer EventKillTimer(); }//+------------------------------------------------------------------+void OnTimer() { Comment( "\n TimeCurrent: ",TimeCurrent(), "\n TimeTradeServer: ",TimeTradeServer(), "\n TimeLocal: ",TimeLocal(), ""); }//+------------------------------------------------------------------+当计算机时间改变时,TimeTradeServer 也会改变,并显示计算机时间TimeLocal。你为什么不先通过TimeTradeServer检查计算机时间,然后(如果时间正确)使用我在上面写的函数,以更准确地检查它?由以下人员添加当然,这不是解决办法,因为这个符号可能没有引号 :( Sergey Gritsay 2017.01.16 06:27 #14 有点当头棒喝,写了这个选项,谁想过这个实现。//+------------------------------------------------------------------+//| test03.mq5 |//| Sergey Gritsay |//| https://www.mql5.com/ru/users/sergey1294 |//+------------------------------------------------------------------+#property copyright "Sergey Gritsay"#property link "https://www.mql5.com/ru/users/sergey1294"#property version "1.00"//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+void OnStart() {//--- if(CheckExchTime())Print("Торговля разрешена"); else Print("Торговля запрещена"); }//+------------------------------------------------------------------+bool CheckExchTime() { MqlTick last_tick; MqlDateTime last_time; MqlDateTime start_time; MqlDateTime end_time; datetime trade_time_start=0; datetime trade_time_end=0; datetime start=0; datetime end=0; ResetLastError(); if(SymbolInfoTick(_Symbol,last_tick)) { TimeToStruct(last_tick.time,last_time); Print(last_tick.time,": Bid = ",last_tick.bid," Ask = ",last_tick.ask," Last = ",last_tick.last," Volume = ",last_tick.volume); if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=__DATE__+(start_time.hour*60+start_time.min)*60; end=__DATE__+(end_time.hour*60+end_time.min)*60; Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end); Print(start," - ",end); if(start==end)return(true); if(last_tick.time>start && last_tick.time<end)return(true); } else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError()); if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=__DATE__+(start_time.hour*60+start_time.min)*60; end=__DATE__+(end_time.hour*60+end_time.min)*60; Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end); Print(start," - ",end); if(start==end)return(true); if(last_tick.time>start && last_tick.time<end)return(true); } else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError()); } else Print("SymbolInfoTick() failed, error = ",GetLastError()); return(false); }//+------------------------------------------------------------------+... Market closed mql5语言的特点、微妙之处以及技巧 错误、漏洞、问题 Denis Kirichenko 2017.01.16 07:38 #15 prostotrader:你们是开发者!你打算什么时候将终端时间与Exchange时间同步? Mikalas,这绝对不是一个给开发者的问题。这就是经纪人管理员的工作。你必须要瞄准他们 :-)) Sergey Gritsay 2017.01.16 08:20 #16 对代码进行了更多的修补,结果是这样的。//+------------------------------------------------------------------+//| test06.mq5 |//| Sergey Gritsay |//| https://www.mql5.com/ru/users/sergey1294 |//+------------------------------------------------------------------+#property copyright "Sergey Gritsay"#property link "https://www.mql5.com/ru/users/sergey1294"#property version "1.00"//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//--- create timer EventSetMillisecondTimer(1);//--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer EventKillTimer(); }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() {//--- }//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+void OnTimer() {//--- string text=NULL; int symbol_total=SymbolsTotal(true); for(int i=0; i<symbol_total; i++) { string symbol=SymbolName(i,true); if(CheckExchTime(symbol,TimeCurrent()))text+="\n"+symbol+": Торговля разрешена"; else text+="\n"+symbol+": Торговля запрещена"; } Comment(text); }//+------------------------------------------------------------------+bool CheckExchTime(string symbol,datetime times) { MqlDateTime last_time; MqlDateTime start_time; MqlDateTime end_time; datetime trade_time_start=0; datetime trade_time_end=0; datetime start=0; datetime end=0; ResetLastError(); datetime expiration=(datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME); if(expiration!=0 && times>=expiration)return(false); TimeToStruct(times,last_time); if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00"); end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00"); if(start==end)return(true); if(times>start && times<end)return(true); }//else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError()); if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end)) { TimeToStruct(trade_time_start,start_time); TimeToStruct(trade_time_end,end_time); start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00"); end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00"); if(start==end)return(true); if(times>start && times<end)return(true); }//else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError()); return(false); }//+------------------------------------------------------------------+结果 Market closed 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. prostotrader 2017.01.16 12:34 #17 Sergey Gritsay:对代码进行了更多的修补,结果是这样的。 你知道你在说什么吗? Sergey Gritsay 2017.01.16 12:53 #18 prostotrader: 你知道我们在谈论什么吗? 也许我不是很理解,我理解你需要一个解决方案来避免在交易所交易时间之外的市场关闭时被抓。 prostotrader 2017.01.16 12:58 #19 Sergey Gritsay: 也许我不太明白,我明白如何,我需要一个解决方案来避免交易所交易时间以外的市场关闭。解决方案不是来自于程序员,而是来自于开发商(或经纪人,如果他们这个经纪人负责的话)。你引用的代码没有检查交易所的当前时间。 prostotrader 2017.01.16 13:42 #20 到目前为止,确定了这个解决方案bool CheckTradingTime(MqlDateTime &tick_time){ datetime lk_time = TimeTradeServer(tick_time); if ( ( tick_time.day_of_week == int(FirstDay)) || ( tick_time.day_of_week == int(SecondDay)))//выходные { return(false); }#ifdef DEBUG if ((tick_time.hour >= 0) && (tick_time.hour < 6)) // DEBUG 6-00 { return(false); }#else if ((tick_time.hour >= 0) && (tick_time.hour < 10)) { return(false); }#endif// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30// 14 * 3600 = 50400 - 14:00:00// 14 * 3600 + 30 = 50430 - 14:00:30// 14 * 3600 + 60 = 50460 - 14:01:00// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30// 18 * 3600 + 45 * 60 = 67500 - 18:45:00// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30// 18 * 3600 + 46 * 60 = 67560 - 18:46:00// 19 * 3600 = 68400 - 19:00:00// 19 * 3600 + 60 = 68460 - 19:01:00 // 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30// 23 * 3600 + 50 * 60 = 85800 - 23:50:00// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30// 23 * 3600 + 51 * 60 = 85860 - 23:51:00//--- lk_time = TimeCurrent(tick_time); ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec; //--- //10:00:02 if(((trade_time >= time_st_mon) && (trade_time < 50370)) || ((trade_time >= time_st_day) && (trade_time < 67470)) || ((trade_time >= time_st_evn) && (trade_time < 85770))) { return(true); }return(false); } 首先,我采取TimeTradeServer- 我得到当前的 "脏 "时间我检查了一个周末和一个与所有会议 "重合 "的时间(交易)。然后使用TimeCurrent 当前的服务器时间,用于检查会话中的时间。由以下人员添加但这种检查有一个主要的缺点。如果本地计算机的时间比服务器的时间多,就可以了,但但如果当地时间较少,那么我们就有一个大问题。如果我们错过了交易服务器时间和当地时间之间的差异的竞价开始:(这就是为什么我们需要TimeCurrent 总是返回服务器时间,而不仅仅是最后一个已知报价的时间。由以下人员添加另一个弊端报价不进入清算,所以在清算中 使用TimeCurrent(例如撤回挂单) 是没有意义的:( 将Windows本地时间与MT5服务器同步 Synchronise Windows local time Market closed 123456789...12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我认为我们应该像这样改变交易时间的检查。
{
MqlTick cur_tick[1];
MqlDateTime cur_time;
if(CopyTicks(Symbol(), cur_tick, COPY_TICKS_INFO, 0, 1)==1)
{
TimeToStruct(cur_tick[0].time, cur_time);
ulong trade_time = cur_time.hour * 3600 + cur_time.min * 60 + cur_time.sec;
if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
((trade_time >= time_st_day) && (trade_time < 67470)) ||
((trade_time >= time_st_evn) && (trade_time < 85770)))
{
return(true);
}
}
return(false);
}
谢尔盖!
阅读TimeCurrent帮助 - 它说这是SERVER时间
如果没有刻度,周末或非交易时间,TimeCurrent就不会改变。
而TimeTradeServer不起作用,它显示的是你电脑上的本地时间。
通过运行专家顾问,很容易检查这一点。
int OnInit()
{
//--- create timer
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer()
{
Comment(
"\n TimeCurrent: ",TimeCurrent(),
"\n TimeTradeServer: ",TimeTradeServer(),
"\n TimeLocal: ",TimeLocal(),
"");
}
//+------------------------------------------------------------------+
当计算机时间改变时,TimeTradeServer 也会改变,并显示计算机时间TimeLocal。
如果不存在点差,周末或非交易时间,TimeCurrent不会改变。
而TimeTradeServer不起作用,它显示的是本地电脑时间。
通过运行EA很容易检查这一点。
int OnInit()
{
//--- create timer
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
void OnTimer()
{
Comment(
"\n TimeCurrent: ",TimeCurrent(),
"\n TimeTradeServer: ",TimeTradeServer(),
"\n TimeLocal: ",TimeLocal(),
"");
}
//+------------------------------------------------------------------+
当计算机时间改变时,TimeTradeServer 也会改变,并显示计算机时间TimeLocal。
你为什么不先通过TimeTradeServer检查计算机时间,然后(如果时间正确)使用
我在上面写的函数,以更准确地检查它?
由以下人员添加
当然,这不是解决办法,因为这个符号可能没有引号 :(
有点当头棒喝,写了这个选项,谁想过这个实现。
//| test03.mq5 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
if(CheckExchTime())Print("Торговля разрешена");
else Print("Торговля запрещена");
}
//+------------------------------------------------------------------+
bool CheckExchTime()
{
MqlTick last_tick;
MqlDateTime last_time;
MqlDateTime start_time;
MqlDateTime end_time;
datetime trade_time_start=0;
datetime trade_time_end=0;
datetime start=0;
datetime end=0;
ResetLastError();
if(SymbolInfoTick(_Symbol,last_tick))
{
TimeToStruct(last_tick.time,last_time);
Print(last_tick.time,": Bid = ",last_tick.bid," Ask = ",last_tick.ask," Last = ",last_tick.last," Volume = ",last_tick.volume);
if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=__DATE__+(start_time.hour*60+start_time.min)*60;
end=__DATE__+(end_time.hour*60+end_time.min)*60;
Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end);
Print(start," - ",end);
if(start==end)return(true);
if(last_tick.time>start && last_tick.time<end)return(true);
}
else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError());
if(SymbolInfoSessionTrade(_Symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=__DATE__+(start_time.hour*60+start_time.min)*60;
end=__DATE__+(end_time.hour*60+end_time.min)*60;
Print("trade_time_start = ",trade_time_start," trade_time_end = ",trade_time_end);
Print(start," - ",end);
if(start==end)return(true);
if(last_tick.time>start && last_tick.time<end)return(true);
}
else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError());
}
else Print("SymbolInfoTick() failed, error = ",GetLastError());
return(false);
}
//+------------------------------------------------------------------+
...
你们是开发者!
你打算什么时候将终端时间与Exchange时间同步?
对代码进行了更多的修补,结果是这样的。
//| test06.mq5 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(1);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
string text=NULL;
int symbol_total=SymbolsTotal(true);
for(int i=0; i<symbol_total; i++)
{
string symbol=SymbolName(i,true);
if(CheckExchTime(symbol,TimeCurrent()))text+="\n"+symbol+": Торговля разрешена";
else text+="\n"+symbol+": Торговля запрещена";
}
Comment(text);
}
//+------------------------------------------------------------------+
bool CheckExchTime(string symbol,datetime times)
{
MqlDateTime last_time;
MqlDateTime start_time;
MqlDateTime end_time;
datetime trade_time_start=0;
datetime trade_time_end=0;
datetime start=0;
datetime end=0;
ResetLastError();
datetime expiration=(datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME);
if(expiration!=0 && times>=expiration)return(false);
TimeToStruct(times,last_time);
if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,0,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
if(start==end)return(true);
if(times>start && times<end)return(true);
}
//else Print("SymbolInfoSessionTrade(0) failed, error = ",GetLastError());
if(SymbolInfoSessionTrade(symbol,(ENUM_DAY_OF_WEEK)last_time.day_of_week,1,trade_time_start,trade_time_end))
{
TimeToStruct(trade_time_start,start_time);
TimeToStruct(trade_time_end,end_time);
start=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)start_time.hour+":"+(string)start_time.min+":00");
end=StringToTime((string)last_time.year+"."+(string)last_time.mon+"."+(string)last_time.day+" "+(string)end_time.hour+":"+(string)end_time.min+":00");
if(start==end)return(true);
if(times>start && times<end)return(true);
}
//else Print("SymbolInfoSessionTrade(1) failed, error = ",GetLastError());
return(false);
}
//+------------------------------------------------------------------+
结果
对代码进行了更多的修补,结果是这样的。
你知道我们在谈论什么吗?
也许我不太明白,我明白如何,我需要一个解决方案来避免交易所交易时间以外的市场关闭。
解决方案不是来自于程序员,而是来自于开发商(或经纪人,如果他们这个经纪人负责的话)。
你引用的代码没有检查交易所的当前时间。
到目前为止,确定了这个解决方案
{
datetime lk_time = TimeTradeServer(tick_time);
if ( ( tick_time.day_of_week == int(FirstDay)) ||
( tick_time.day_of_week == int(SecondDay)))//выходные
{
return(false);
}
#ifdef DEBUG
if ((tick_time.hour >= 0) && (tick_time.hour < 6)) // DEBUG 6-00
{
return(false);
}
#else
if ((tick_time.hour >= 0) && (tick_time.hour < 10))
{
return(false);
}
#endif
// 13 * 3600 + 59 * 60 + 30 = 50370 - 13:59:30
// 14 * 3600 = 50400 - 14:00:00
// 14 * 3600 + 30 = 50430 - 14:00:30
// 14 * 3600 + 60 = 50460 - 14:01:00
// 18 * 3600 + 44 * 60 + 30 = 67470 - 18:44:30
// 18 * 3600 + 45 * 60 = 67500 - 18:45:00
// 18 * 3600 + 45 * 60 + 30 = 67530 - 18:45:30
// 18 * 3600 + 46 * 60 = 67560 - 18:46:00
// 19 * 3600 = 68400 - 19:00:00
// 19 * 3600 + 60 = 68460 - 19:01:00
// 23 * 3600 + 49 * 60 + 30 = 85770 - 23:49:30
// 23 * 3600 + 50 * 60 = 85800 - 23:50:00
// 23 * 3600 + 50 * 60 + 30 = 85830 - 23:50:30
// 23 * 3600 + 51 * 60 = 85860 - 23:51:00
//---
lk_time = TimeCurrent(tick_time);
ulong trade_time = tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec;
//--- //10:00:02
if(((trade_time >= time_st_mon) && (trade_time < 50370)) ||
((trade_time >= time_st_day) && (trade_time < 67470)) ||
((trade_time >= time_st_evn) && (trade_time < 85770)))
{
return(true);
}
return(false);
}
首先,我采取TimeTradeServer- 我得到当前的 "脏 "时间
我检查了一个周末和一个与所有会议 "重合 "的时间(交易)。
然后使用TimeCurrent
当前的服务器时间,用于检查会话中的时间。
由以下人员添加
但这种检查有一个主要的缺点。
如果本地计算机的时间比服务器的时间多,就可以了,但
但如果当地时间较少,那么我们就有一个大问题。
如果我们错过了交易服务器时间和当地时间之间的差异的竞价开始:(
这就是为什么我们需要TimeCurrent
总是返回服务器时间,而不仅仅是最后一个已知报价的时间。
由以下人员添加
另一个弊端
报价不进入清算,所以在清算中 使用TimeCurrent(例如撤回挂单) 是没有意义的:(