Странное время

Странное время
Atom
2/4/2013
VassilSanych


Время, выводимое в текстовый лог не соответствует ни LiggingHelper.Now, ни DateTime.Now.
Более того:
LiggingHelper.Now наследует от DateTime.Now его неточность и поэтому обычно выдаёт кучу одинаковых значений в некотором промежутке времени.
Когда я ввожу в расчёт времени Stopwatch, точность получается практически такая же, как в текстовом логе, но значения несколько отличаются.
Видимо из-за того, что мы берём разную начальную точку. Потому что после коррекции отступа времени это значение несколько ближе к LiggingHelper.Now, чем к DateTime.Now.
Поэтому, вопрос:

Откуда берётся значение времени в текстовом логе?


VassilSanych

Avatar
Date: 2/4/2013
Reply


Похоже, разобрался.
В текстовом логе CurrentTime и это всё-таки LiggingHelper.Now.
Это у меня WPF лаги давал.
В связи с этим перегрузил у себя CurrentTime с использованием Stopwatch.
Thanks:

esper

Avatar
Date: 2/4/2013
Reply


VassilSanych
Откуда берётся значение времени в текстовом логе?


В логах используется LoggingHelper.Now, если есть какие-то заморочки, то давайте примеры с кодом и результатом, будем смотреть что и как.
Thanks:

Иван З.

Avatar
Date: 2/4/2013
Reply


esper
VassilSanych
Откуда берётся значение времени в текстовом логе?


В логах используется LoggingHelper.Now, если есть какие-то заморочки, то давайте примеры с кодом и результатом, будем смотреть что и как.



Здесь я писал про время в логе.
http://www.stocksharp.co...m/3324/Raznoie-vriemia/

При тестировании стратегий время в логе начинается с 5:05. Так происходит только при тестировании стратегий, при любых других действиях с записью в лог, в логе пишется текущее время компьютера. Проблема в разнице с Москвой в 5 часов, а как решить так и не разобрался. Помогите если в силах.
Thanks:

esper

Avatar
Date: 2/4/2013
Reply


Иван З.

Здесь я писал про время в логе.
http://www.stocksharp.co...m/3324/Raznoie-vriemia/

При тестировании стратегий время в логе начинается с 5:05. Так происходит только при тестировании стратегий, при любых других действиях с записью в лог, в логе пишется текущее время компьютера. Проблема в разнице с Москвой в 5 часов, а как решить так и не разобрался. Помогите если в силах.


Пробовали указывать LoggingHelper.TimeZoneOffset?
Thanks:

VassilSanych

Avatar
Date: 2/4/2013
Reply


Иван З.
Так происходит только при тестировании стратегий, при любых других действиях с записью в лог, в логе пишется текущее время компьютера. Проблема в разнице с Москвой в 5 часов, а как решить так и не разобрался. Помогите если в силах.


В стратегии CurrentTime ->
return StrategyHelper.GetMarketTime(this);

в конечном счёте вызов заканчивается на TraderHelper
Code
    /// <summary>
    /// Перевести локальное время в биржевое.
    /// 
    /// </summary>
    /// <param name="exchange">Информация о бирже.</param><param name="time">Локальное время.</param><param name="sourceZone">Времемнная зона, в которой записано значение <paramref name="time"/>.</param>
    /// <returns>
    /// Время с биржевым сдвигом.
    /// </returns>
    public static DateTime ToExchangeTime(this Exchange exchange, DateTime time, TimeZoneInfo sourceZone)
    {
      if ((Equatable<Exchange>) exchange == (Exchange) null)
        throw new ArgumentNullException("exchange");
      else
        return TimeZoneInfo.ConvertTime(time, sourceZone, exchange.TimeZoneInfo);
    }


Thanks:

esper

Avatar
Date: 2/4/2013
Reply


Посмотрел еще раз, LoggingHelper.TimeZoneOffset все же здесь не поможет.

Quote:
в конечном счёте вызов заканчивается на TraderHelper

Для эмулятора это не совсем верно, в EmulatorTrader этот метод возврашает время, которое определяется по историческим данным. Но время, определенное по историческим данным, так же сдвигается на часовой пояс биржи. Так что можно поменять часовой пояс для биржи или использовать тестовую биржу.
Thanks:

VassilSanych

Avatar
Date: 2/4/2013
Reply


esper
Но время, определенное по историческим данным, так же сдвигается на часовой пояс биржи.

Я так понял, что основная претензия в том, что время лога определяется не единообразно:
для стратегии - по бирже, а для обычного лога - локально.

Thanks:

esper

Avatar
Date: 2/4/2013
Reply


VassilSanych
Я так понял, что основная претензия в том, что время лога определяется не единообразно:
для стратегии - по бирже, а для обычного лога - локально.


Локально оно определяется для всех источников логов, кроме эмулятора, т.к. когда используется эмулятор, то за одну локальную секунду может пройти исторический месяц, а время в логе должно соответствовать действию именно в истории.
Thanks:

Иван З.

Avatar
Date: 2/5/2013
Reply


esper
VassilSanych
Я так понял, что основная претензия в том, что время лога определяется не единообразно:
для стратегии - по бирже, а для обычного лога - локально.


Локально оно определяется для всех источников логов, кроме эмулятора, т.к. когда используется эмулятор, то за одну локальную секунду может пройти исторический месяц, а время в логе должно соответствовать действию именно в истории.


Основная претензия в том что, при эмуляторе время в логе должно соответствовать действию именно в истории, а идет со смещением в 5 часов.

esper
Посмотрел еще раз, LoggingHelper.TimeZoneOffset все же здесь не поможет.

Quote:
в конечном счёте вызов заканчивается на TraderHelper

Для эмулятора это не совсем верно, в EmulatorTrader этот метод возврашает время, которое определяется по историческим данным. Но время, определенное по историческим данным, так же сдвигается на часовой пояс биржи. Так что можно поменять часовой пояс для биржи или использовать тестовую биржу.


LoggingHelper.TimeZoneOffset не помогает.
Поменять часовой пояс для биржи или использовать тестовую биржу. Это вот так?

Code
_trader = new EmulationTrader(new[] { security },new[] { portfolio })
            {
                MarketEmulator = new MarketEmulator(new QuikTrader())
                {
                    EmulatorTimeZone = TimeZoneInfo.CreateCustomTimeZone("Moscow", TimeSpan.FromHours(4), "Moscow", "Moscow"),
                },
                MarketTimeChangedInterval = timeFrame,
                StorageRegistry = storageRegistry,
 
                // необходимо включать только если есть история стаканов и нужно получить более точное тестирование
                UseMarketDepth = false,
            };


Code
                MarketEmulator = new MarketEmulator(new QuikTrader())
                {
                    EmulatorTimeZone = TimeZoneInfo.CreateCustomTimeZone("Moscow", TimeSpan.FromHours(4), "Moscow", "Moscow"),
                },




То я так и сделал, это помогло, чтоб сделки соответствовали истории и шли без смещения. А время в логе так и идет со смещением.
А если не так, то подскажите как? Где-то что то недопонимаю.

И еще вопрос к разработчикам. Может время бирж изначально делать через UTC, как в приведенном выше примере, ни кто бы с переводом времени не маялся, наверное, даже и не замечал, что возможна такая проблема. И Регионам хорошо и Москва не в обиде. Хотя опять же могу где-то, что то недопонимать.



Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy