Странное время
Atom Ответить
04.02.2013


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

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




9 Ответов
VassilSanych

Фотография
Дата: 04.02.2013
Ответить


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

esper

Фотография
Программист
Дата: 04.02.2013
Ответить


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


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

Иван З.

Фотография
Курсы Автор статей Благотворитель
Дата: 04.02.2013
Ответить


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


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



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

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

esper

Фотография
Программист
Дата: 04.02.2013
Ответить


Иван З. Перейти

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

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


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

VassilSanych

Фотография
Дата: 04.02.2013
Ответить


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


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

в конечном счёте вызов заканчивается на TraderHelper
Код
    /// <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);
    }


Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 04.02.2013
Ответить


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

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

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

VassilSanych

Фотография
Дата: 04.02.2013
Ответить


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

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

Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 04.02.2013
Ответить


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


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

Иван З.

Фотография
Курсы Автор статей Благотворитель
Дата: 05.02.2013
Ответить


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


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


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

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

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

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


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

Код
_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,
            };


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




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

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



Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy