当地时间和新勾股时间相差一分半钟。该怎么做。 - 页 5

 
pivomoe:
我知道,你的观点是什么?

为了什么?

pivomoe:

在市场概览中,仍然有 "成交量""最后交易 "等栏目,有人怀疑这个函数只是简单地返回了最后一次交易的时间

SymbolInfoInteger(_Symbol,SYMBOL_TIME) 函数只返回最后一个刻度的时间。因为报价的变化会导致新的信息勾的出现。

你想测量的是最后一次报价的到来和最后一次打钩的时间之间的时间。以秒为单位,似乎总是0。 因此,终端及时返回一切。

 
Alexey Kozitsyn:

敬请关注。

SymbolInfoInteger(_Symbol,SYMBOL_TIME) 函数只返回最后一个刻度的时间。因为一句话的改变会导致一个新的信息勾。

你想测量的是最后一次报价的到来和最后一次打钩的时间之间的时间。以秒为单位,似乎总是0。 因此,终端会及时返回一切。

我再次看到了问题所在。

鉴于。

本地时间和服务器时间或多或少是同步的,即新刻度的.time_msc和本地时间之间的差异是几秒钟。

当地时间18:00:00,你试图用SymbolInfoTick获取SBER符号的新tick,你得到的tick时间是17:57:00。

在18:00:01,我们试图用SymbolInfoTick获得一个新的tick,我们得到一个时间为17:58:30 的tick。

我不认为这可以称为行动。

现在,我不再使用本地计算机时间,而是使用市场概览中所有符号中最后一个刻度的最大时间。

 
pivomoe:

再次说明我所看到的问题。

鉴于。

本地时间和服务器时间或多或少是同步的,也就是说,新刻度的.time_msc和本地时间之间的差异是几秒钟。

当地时间18:00:00,你试图用SymbolInfoTick获取SBER符号的新tick,你得到的tick时间是17:57:00。

在18:00:01,我们试图用SymbolInfoTick获得一个新的tick,我们得到一个时间为17:58:30 的tick。

我不认为这可以称为行动。

现在,我已经不再使用本地计算机时间,而是使用市场概览中所有符号中最后一个刻度的最大时间。

你是否明白你可以设置任何电脑时间?你不能使用它。你已经被告知。这是第一件事。

第二,不能使用市场概览中所有符号中最后一个刻度的最大时间。您想找出SBER符号的最后一个刻度(SymbolInfoTick)与SBER符号的最后一个报价(SymbolInfoInteger)之间的时间差。也就是说,你必须大致按照我写的那样做(大致是因为你需要使用滚揉机以获得更多的准确性,正如你被建议的那样)。

第三,这个。

В 18:00:00 по времени компа  пытаемся получить новый тик по символу SBER с помощью SymbolInfoTick, нам отдают тик со временем 17:57:00

В 18:00:01 по времени компа опять пытаемся получить новый тик по символу SBER с помощью SymbolInfoTick, нам отдают тик со временем 17:58:30

是在没有证据的情况下声称的。如果你认为你的代码是证明,见 "第二"。

 
Alexey Kozitsyn:

你是否意识到,你可以将电脑时间设置为任何东西?你不能被它所束缚。你已经被告知了。首先。


如果你说的是毫秒甚至是秒,你不能把它设置为任何时间。谈论几分钟的延迟是很有可能的。我现在不是用它来测量差异,而是用市场概览中所有符号的最后一格的最大时间.time_msc来测量。

阿列克谢-科齐岑

您想找出SBER符号的最后一个刻度(SymbolInfoTick)与SBER符号的最后一个报价(SymbolInfoInteger)之间的时间差。

我不知道。

阿列克谢-科齐岑

第二,你也不能使用市场概览中所有符号中最后一个刻度的最大时间。

为什么?我不是在比较最后一个tick的时间(通过计算机),我在比较time_msc。

阿列克谢-科齐岑

没有证据,我不能使用你的代码。如果你认为你的代码是证明--见 "第二"。

通常情况下,开发人员要求提供代码来重现问题。这里有一个最近抓到的2秒的延迟。

14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)  РЕКОРДная  Разница между временем последенго тика по ВСЕМ символам Минус только, что полученный новый тик по символу 2057 милесекундa.
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Получен НОВЫЙ тик по символу                     GAZR-3.19 time_msc= 2019.03.20 14:53:11.638
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   ХОТЯ до этого был получeн тик                        RTS-3.19 time_msc 2019.03.20 14:53:13.695
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Локальное время получения нового тика по символу.                                   2019.03.20 14:53:10.277
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Предпоследние Локальное время попытки получить новый тик по символу    2019.03.20 14:53:10.259
阿列克谢-科齐岑

(大致上是因为你需要使用滚揉机以获得更大的准确性,正如你被建议的那样)。

有人建议我使用OnBookEvent而不是OnTimer。我已经实现了这一点。你可以在设置中选择在哪里接收蜱虫,要么是OnTimer,要么是OnBookEvent。OnBookEvent的情况更糟糕,它只能捕捉到70%的新tick事件。
附加的文件:
 

pivomoe:

14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)  РЕКОРДная  Разница между временем последенго тика по ВСЕМ символам Минус только, что полученный новый тик по символу 2057 милесекундa.
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Получен НОВЫЙ тик по символу                     GAZR-3.19 time_msc= 2019.03.20 14:53:11.638
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   ХОТЯ до этого был получeн тик                        RTS-3.19 time_msc 2019.03.20 14:53:13.695
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Локальное время получения нового тика по символу.                                   2019.03.20 14:53:10.277
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Предпоследние Локальное время попытки получить новый тик по символу    2019.03.20 14:53:10.259

仅从这几句话来看,你想要什么似乎很清楚。你对符号间同步这样的东西感兴趣。也就是说,你想要的仪器上的数据的一般相关性。

我现在不能帮助你,我没有参与这个问题。询问开发者。

 
Alexey Kozitsyn:

仅从这几句话来看,你想要什么似乎很清楚。你对符号间同步这样的东西感兴趣。也就是说,你想要的仪器上的数据的一般相关性。

我现在不能帮助你,我没有参与这个问题。给开发商的地址。

阿列克谢(本来不想参加,但是......)。

这不是本主题第二页的 "相关性"(NEW_TICK)代码吗?

//+------------------------------------------------------------------+
//|                                                         Time.mq5 |
//|                                                   Copyright 2019 |
//|                                                                  |
//+------------------------------------------------------------------+
enum FRESH_TICK
{
  UNKNOWN_TICK,
  NEW_TICK,
  CUR_TICK
};
//
int is_book;
ulong last_tick_time; //Время последнего тика
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  last_tick_time = 0;
  is_book = MarketBookAdd(Symbol());
  if(is_book == false) return(INIT_FAILED);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol()); 
}
//+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent(const string &symbol)
{
  if(symbol == Symbol())
  {
    MqlTick a_ticks[];
    int result = CopyTicks(symbol, a_ticks, COPY_TICKS_ALL, 0, 1);
    if(result > 0)
    {
      FRESH_TICK tick_state = CheckTickTime(a_ticks[0]);
      switch(tick_state)
      {
       case UNKNOWN_TICK:; //Тик не определен
       break;
       case NEW_TICK:;     //Торговое время, можно отсылать ордера;
       break;
       case CUR_TICK:;     //По усмотрению разработчика;
       break;
      }
    }  
  }
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
FRESH_TICK CheckTickTime(MqlTick &a_tick)
{
  MqlDateTime cur_time, tick_time;
  cur_time.year = 0;
  TimeTradeServer(cur_time); //Возвращает расчетное текущее время торгового сервера.
  if(cur_time.year > 0)
  {
    if(TimeToStruct(a_tick.time, tick_time) == true)
    {
      if(tick_time.day_of_year == cur_time.day_of_year)      //Проверка, что это сегодняшний тик
      {
        double t_msc = double(a_tick.time_msc - ulong(a_tick.time) * 1000)/1000;
        double tr_time = double(tick_time.hour * 3600 + tick_time.min * 60 + tick_time.sec) + t_msc;
        if(((tr_time >= 36000) && (tr_time < 50370)) ||   //10:00:00 - 13:59:30
           ((tr_time >= 50700) && (tr_time < 67470)) ||   //14:05:00 - 19:44:30 
           ((tr_time >= 68700) && (tr_time < 85770)))     //19:05:00 - 23:49:30
        {
          if(ulong(a_tick.time_msc) > last_tick_time)
          {
            last_tick_time = ulong(a_tick.time_msc);
            return(NEW_TICK);
          } else return(CUR_TICK);  
        }
      }
    }
  }   
  return(UNKNOWN_TICK);
} 

添加

使用CUR_TICK,你仍然可以检查它是否与原来的刻度相同或

新的打勾包包含一个打勾,而这个打勾并不在前一个打勾中。

 
prostotrader:

阿列克谢(本来不想参与,但是......)。

这不是本主题第二页的 "相关性"(NEW_TICK)代码吗?

显然不是。自。

时间贸易服务器

返回交易服务器的估计当前时间。与TimeCurrent() 不同,时间值是在客户端计算的,取决于用户计算机上的时间设置

也就是说,它取决于计算机的时间(为了测量的准确性不应该如此)。

当然,这里的好处是检查pivomoe 代码的正确性,如果真的有一个bug--联系开发者

 
prostotrader:

这种检查似乎需要通过TimeGMTOffset 来完成。我稍后将勾勒一个例子。

 
Alexey Kozitsyn:

显然不是。因为。


仔细 看一下代码!

TimeTradeServer() 只被用来确定日期,仅此而已(这个检查是为了 "以防万一")!

TimeTradeServer() 可能根本就没有做!

由以下人员添加

我重复

"使用CUR_TICK,你仍然可以检查它是否与原来的刻度相同,或

新的 tick数据包 包含一个 在前一个数据包中没有传递的tick,并且数据包包含1个tick("旧")"。

if(ulong(a_tick.time_msc) > last_tick_time)
{
  last_tick_time = ulong(a_tick.time_msc);
  return(NEW_TICK);
}
 else
{
   //Дополнительные проверки 
}
 
Alexey Kozitsyn:

当然,这里的好处是检查pivomoe 代码的正确性,如果确实有bug,可以联系开发者

如果市场评论中有几十个字符,或者评论中有几个字符打开,但在opera浏览器中有几十个标签,就会出现这个错误。我通过私信 给开发者写信。

正如我之前写的,这个问题可以通过调用之间足够大的睡眠来解决,对于40个字符来说,sleep(10)已经足够了。随着人物数量的增加,需要越来越多的睡眠。