Ошибки, баги, вопросы - страница 1808

[Удален]  
fxsaber:
Сделайте эмуляцию TimeTradeServer через GetMicrosecondCount. Либо в 99% BookEvent добавляйте разность между TimeTradeServer и TimeCurrent.
Это все равно получение нескольких параметров.
 
Alexey Kozitsyn:
Это все равно получение нескольких параметров.
Вопрос не в количестве параметров, а в их суммарной дешевизне.
[Удален]  
fxsaber:
Вопрос не в количестве параметров, а в их суммарной дешевизне.
Т.е. Вы считаете, что TimeTradeServer() будeт работать быстрее, чем  SymbolInfoInteger( _Symbol, SYMBOL_TIME )?
 
Alexey Kozitsyn:
Т.е. Вы считаете, что TimeTradeServer() будeт работать быстрее, чем  SymbolInfoInteger( _Symbol, SYMBOL_TIME )?

TimeTradeServer работает через GetMicrosecondCount, прибавляя соответствующую разность к TimeCurrent.

Что Вам нужно получить - не знаю. Но экономия на единицах микросекунд мне видится нецелесообразной. 

[Удален]  
fxsaber:

TimeTradeServer работает через GetMicrosecondCount, прибавляя соответствующую разность к TimeCurrent.

Что Вам нужно получить - не знаю. Но экономия на единицах микросекунд мне видится нецелесообразной. 

Мне нужно получить корректное значение текущего времени. Я делаю запрос из OnBookEvent() текущего времени, чтобы записать значение параметра, привязанного ко времени. И мне нужно время именно текущее, а не прошедшее и, желательно, без костылей в виде получения нескольких значений времени с выбором наибольшего значения. TimeCurrent(), по идее (и по описанию в документации), должна справляться с этой задачей. Но оказалось, что сейчас она этого не делает!
 
Alexey Kozitsyn:
Мне нужно получить корректное значение текущего времени. Я делаю запрос из OnBookEvent() текущего времени, чтобы записать значение параметра, привязанного ко времени. И мне нужно время именно текущее, а не прошедшее и, желательно, без костылей в виде получения нескольких значений времени с выбором наибольшего значения. TimeCurrent(), по идее (и по описанию в документации), должна справляться с этой задачей. Но оказалось, что сейчас она этого не делает!
Не проверял
datetime NewTimeCurrent( void )
{
  static ulong PrevStartTime = GetMicrosecondCount();
  static datetime PrevTimeCurrent = TimeCurrent(); // TimeTradeServer()
  
  const datetime NewTimeCurrent = TimeCurrent(); // TimeTradeServer()
  const ulong NowTime = GetMicrosecondCount();
  
  if (PrevTimeCurrent < NewTimeCurrent)  
  {
    PrevTimeCurrent = NewTimeCurrent;
    
    PrevStartTime = NowTime;
  }
  
  return(PrevTimeCurrent + (datetime)((NowTime - PrevStartTime) / 1000000));
}
Можно было точнее. Например, пробежаться по всем символам, сделав запрос SymbolInfoTick (+ CopyTicks). Оттуда выцарапать время в миллисекундах. Только не понимаю, какое практическое применение этому может быть.
 
fxsaber:
пробежаться по всем символам, сделав запрос SymbolInfoTick (+ CopyTicks). Оттуда выцарапать время в миллисекундах.
Давно назрел штатный миллисекундный аналог TimeCurrent, с его отражением в GUI.
[Удален]  
fxsaber:
Не проверял
datetime NewTimeCurrent( void )
{
  static ulong PrevStartTime = GetMicrosecondCount();
  static datetime PrevTimeCurrent = TimeCurrent(); // TimeTradeServer()
  
  const datetime NewTimeCurrent = TimeCurrent(); // TimeTradeServer()
  const ulong NowTime = GetMicrosecondCount();
  
  if (PrevTimeCurrent < NewTimeCurrent)  
  {
    PrevTimeCurrent = NewTimeCurrent;
    
    PrevStartTime = NowTime;
  }
  
  return(PrevTimeCurrent + (datetime)((NowTime - PrevStartTime) / 1000000));
}
Спасибо, но я считаю, пока нет смысла в такой точности, тем более, что время так и так будет "не реальным", а приближенным и будет зависеть от многих факторов. Чтобы все было точно, нужно, чтобы была возможность получить время с сервера, т.е. если я запрашиваю параметр SymbolInfoDouble( _Symbol, SYMBOL_SESSION_INTEREST ), то и чтобы я сразу мог получить время, например так: SymbolInfoInteger( _Symbol, SYMBOL_SESSION_TIME_INTEREST ) (с точностью до миллисекунд). Вот тогда будет все хорошо!
[Удален]  
fxsaber:
Можно было точнее. Например, пробежаться по всем символам, сделав запрос SymbolInfoTick (+ CopyTicks). Оттуда выцарапать время в миллисекундах. Только не понимаю, какое практическое применение этому может быть.

Все просто - синхронизация! Все дело в ней! Сейчас доступно много данных: тики, сентимент, стакан. Миллисекундное время есть ТОЛЬКО у тиков! А как быть с временем прихода остальных данных? У стакана - его нет. У сентимента - его тоже нет! Соответственно, если собирать все данные вместе - не получится их синхронизовать! Не возможен комплексный анализ! Не понимаю, почему разработчики не уделяют этому должное внимание. Данные есть, а работать с ними точно - невозможно! Вот и приходится выкручиваться, но даже "костыли" работают, как выяснилось, не всегда правильно.

[Удален]  
Баг с TimeCurrent() исправили, сказали будет сегодня на MQ-Demo.