Про время и про стаканы.
Я с декабря где-то пишу логи сам. До декабря тоже писал, разница в том, что в декабре добавил одно поле -- реальное время получения сделки. Именно получения, а не записи в файл, это важно.
Время скачет +-4 секунды от указанного в сделке. С отставанием времени сделки понятно -- лаги самой биржи, лаги Quik, лаги сети. Откуда берётся убегание вперёд, даже не представляю =) Писать начал в качестве эксперимента, просто любопытно было. Использовать планирую для разделения сделок по блокам, чтобы они в эмулятор приходили такими же пачками, как и в реальности, потому что с тиками работать грустно.
Когда размышлял на тему срабатывания заявок, пришёл к выводу, что не надо никаких рандомов. И никаких стаканов. Просто когда есть любая сделка, хоть на покупку, хоть на продажу, удовлетворяющая мою заявку, я считаю, что моя заявка удовлетворена. Потому что не имеет значения, столкнулась моя заявка с заявкой биржи или наоборот, попала в стакан и чья-то чужая заявка столкнулась с моей, заявка была удовлетворена. Просто цену моей сделки беру либо из сделки лога, либо из заявки.
Без рандомов результат будет стабилен, а разнообразие входных данных и так приемлемое за счёт возможности тестировать на разных днях. То есть, прогоняя два раза один и тот же алгоритм на одних и тех же данных результат будет один и тот же. С рандомом, когда вы будете крутить какой-то параметр у себя в стратегии, не будет уверенности, кто виноват в результатах, изменённый параметр или рандом.
Сохранённые стаканы искажают картину мира очень сильно. Потому что это снимки с интервалами, а не то, что происходит на бирже. Я на стаканы не смотрю даже когда руками торгую (возможно, просто не знаю, как их использовать, я просто программист, а не трейдер). Но про это вы вроде уже и сами договорились =)
Пишу не для спора или пожелания всё переделать. Может быть будет любопытно ещё одно мнение.