Написал примитивный визуализатор тиков-стаканов что приходят через ITrader.
вот картинка полученная через Smart (на демосчете)
Красные столбцы - аски, зеленые - биды.
Сверху над асками - голубое время получения (LastChangeTime) в формате сек.миллисек
Трейды - просто цифры. Для трейдов таймстемп с биржи.
Что видно.
1) самое важное. Когда приходили трейды помеченные по времени как 23.00 (повышающаяся лесекнка), стаканы с бидами=цене трейдов
не приходили. Поэтому если мы имитируем заявку помеченную на рисунке как <1> по тем стаканам что на рисунке,
то она НЕ ВЫПОЛИТСЯ. Нет бидов по которым сгенерировались сделки на рисунке. Точнее, в природе на бирже они были,
но нам их не передали. Передали сделки и пустой "стакан после"
Это аргумент в пользу Juri
Цитата:
Файл всех сделок является вполне достоверным. И там отражены ВСЕ сделки, а не только те что мы видели.
Стакан же всего лишь снимок состояния, и что было между этими снимками мы не знаем. Чтобы построить достоверный стакан нужно иметь файл всех заявок, а такого я не встречал (наверо на бирже то есть).
2) стакан помеченный как "стакан после" передался смарттрейдом ДО того как передались сделки которые привели к такому стакану.
Визуализатор рисует все в порядке получения событий NewQuotes, NewTrades из ITrader.
Далее. Давайте рассмотрим вопрос как имитировать исполнение наших фиктивные лимитки в случае неполной (редкой) информации по стакану.
Т.е. входные данные:
1) Срезы реального стакана. Поставляются нам с периодом 1 секунда и не отражают промежуточных состояний стакана
2) Реальные сделки. Поставляются нам все, но в смарте могут запаздывать относительно срезов стакана.
3) Наши фиктивные лимитки.
По этим данным надо понять, исполнятся фиктивные лимитки или нет.
Тут несколько случаев:
Случай А. Фиктивная лимитка при выставлении матчится с последним срезом реального стакана. Проблем нет, сразу ее исполняем.
Случай Б. Новый срез реального стакана матчится с выставленной ранее фиктивной лимиткой. Тоже проблем нет, исполняем
Эти два случая уже я так понял реализованы в S#
Есть третий случай. В срезах стакана не отражены те заявки, которыми были реальные сделки. А по этим заявкам наши
фиктивные лимитки тоже с удовольствием поматчились бы. Значит, их надо добавить. Т.е. когда приходит сделка, добавляем ее в стакан
и как бид и как аск. В итоге фиктивные лимитки матчатся об эти заявки.
По хорошему надо добавлять только как бид если в предыдущем срезе стакана на этой цене стоит аск, но поскольку смарттрейд выдает
срез стакана после сделки до самой сделки, проще добавить и как то и как другое.
Если кому надо сорсы примера с визулизатором закачал
http://www.box.net/shared/g8k7452gdr