Замерял задержку между совершением сделки на ФОРТС и приходом сделки в программу. (Время компьютера синхронизировал перед тестом.) Код ниже не работает так, как ожидается.
Code
protected override void OnStarting()
{
base.Security.Exchange.IsSupportAtomicReRegister = false;
this.SuspendRules(() =>
{
base.Security.WhenNewTrades().Do(NewTrade).Apply(this);
});
base.OnStarting();
}
protected void NewTrade()
{
String od = base.Security.LastTrade.OrderDirection.HasValue
? base.Security.LastTrade.OrderDirection.Value.ToString()
: "?";
TimeSpan lt = DateTime.Now - base.Security.LastTrade.Time;
this.AddInfoLog("{0} сделка {1} объемом {2} направление {3}. Запаздывание {4} мс.",
base.Security.LastTrade.Time.ToString() + "." + base.Security.LastTrade.Time.Millisecond.ToString(),
base.Security.LastTrade.Price,
base.Security.LastTrade.Volume,
od,
lt.TotalMilliseconds);
// дальше не интересно. :)
}
Периодически в лог валятся записи, у которых отрицательное время задержки. То есть DateTime.Now - base.Security.LastTrade.Time меньше 0.
Я нашел Грааль, да?! То есть, посмотрел в Квик, там в окне "все сделки" время без миллисекунд, в логе время сделок тоже без миллисекунд.
Есть ли правильный способ посчитать задержку от сделки до ее прихода в мою программу?