VassilSanych
|
Дата: 04.02.2013
Похоже, разобрался. В текстовом логе CurrentTime и это всё-таки LiggingHelper.Now. Это у меня WPF лаги давал. В связи с этим перегрузил у себя CurrentTime с использованием Stopwatch.
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 04.02.2013
VassilSanych Откуда берётся значение времени в текстовом логе? В логах используется LoggingHelper.Now, если есть какие-то заморочки, то давайте примеры с кодом и результатом, будем смотреть что и как.
|
|
Спасибо:
|
|
|
|
|
Иван З.
|
Дата: 04.02.2013
esper VassilSanych Откуда берётся значение времени в текстовом логе? В логах используется LoggingHelper.Now, если есть какие-то заморочки, то давайте примеры с кодом и результатом, будем смотреть что и как. Здесь я писал про время в логе. http://www.stocksharp.co...m/3324/Raznoie-vriemia/
При тестировании стратегий время в логе начинается с 5:05. Так происходит только при тестировании стратегий, при любых других действиях с записью в лог, в логе пишется текущее время компьютера. Проблема в разнице с Москвой в 5 часов, а как решить так и не разобрался. Помогите если в силах.
|
|
Спасибо:
|
|
|
|
|
esper
|
Дата: 04.02.2013
Иван З. Здесь я писал про время в логе. http://www.stocksharp.co...m/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, как в приведенном выше примере, ни кто бы с переводом времени не маялся, наверное, даже и не замечал, что возможна такая проблема. И Регионам хорошо и Москва не в обиде. Хотя опять же могу где-то, что то недопонимать.
|
|
Спасибо:
|
|
|
|