Я пытаюсь написать программу, использующую Mt.Gox API, чтобы поддерживать постоянное актуальное представление о глубине их рынка. Мой текущий подход заключается в следующем:
Поиграв с этим некоторое время, я заметил, что полная загрузка данных глубины не всегда соответствует данным, сгенерированным из обновлений. Вот почему я добавил 1-минутную задержку, думая, что, возможно, сервер Mt.Gox только периодически обновляет полные данные глубины, а не генерирует их на лету.
Но даже с этим протоколом, если я запущу программу дважды параллельно, в итоге я увижу разные данные в обоих случаях.
Любая идея, что я могу делать неправильно?
По моему опыту, запрос полной глубины рынка у MtGox часто приводит к совершенно неверной информации. Чтобы справиться с этим, я прибегнул к созданию собственного, аналогично тому, как вы описали выше.
Что я делаю, так это, используя websocket api , я просматриваю все входящие depth
события. Затем я сохраняю два упорядоченных массива бидов и асков. В событиях глубины, если объем положительный, я добавляю порядок в соответствующий массив на основе type_str
свойства. Если объем отрицательный, я удаляю объект из массива.
Обязательно комбинируйте объекты одинаковой цены, но разного объема. Аналогично при удалении объектов, если отрицательный объем меньше объема того же ценового объекта, то только вычитается из объема, а не удаляется. Вот как это делается на сервере MtGox, и это приведет к ошибкам, если сделать по-другому.
После того, как это поработает некоторое время, хотя и не глубоко, книга заказов будет довольно точной и репрезентативной для того, какой должна быть книга заказов MtGox.
Маркус А.
Лоурр
price_int
иamount_int
перед удалением объекта. Яtotal volume
вообще не использую, и обнаружил, что это работает довольно хорошо.Маркус А.
Лоурр