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

 
fxsaber:
_TimeCurrent = MathMax(SymbolInfoInteger(Symbol1, SYMBOL_TIME), SymbolInfoInteger(Symbol2, SYMBOL_TIME), ...);
Тут, действительно, пока только так обойти. Выбором наибольшего времени. Но это дополнительные затраты на получении на каждом OnBookEvent() двух значений времени...
 
Alexey Kozitsyn:
Тут, действительно, пока только так обойти. Выбором наибольшего времени. Но это дополнительные затраты на получении на каждом OnBookEvent() двух значений времени...
Сделайте эмуляцию TimeTradeServer через GetMicrosecondCount. Либо в 99% BookEvent добавляйте разность между TimeTradeServer и TimeCurrent.
 

Заявка в СД #1674783

Пожалуйста, решите как можно скорее! 

 
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.
Причина обращения: