В мире алгоритмической торговли и высокочастотных операций скорость получения данных играет критическую роль. Хотя выбор брокера зависит от множества факторов, включая тарифы, удобство использования платформы и набор инструментов, для определенной категории трейдеров и разработчиков торговых систем скорость обновления стакана котировок может быть решающим фактором.
Исследование скорости API
Я провел сравнительное исследование скорости работы API двух популярных брокеров: Alor и Tinkoff. Целью было определить, какой из них обеспечивает более быстрое обновление данных стакана котировок.
Методология
Исследование проводилось с использованием открытых протоколов API обоих брокеров. Это важно отметить, так как открытые протоколы представляют собой передовые технологии в области биржевой торговли, обеспечивая максимальную скорость и эффективность передачи данных.
Для каждого API был разработан клиент, который подключался к серверам брокера, подписывался на обновления стакана и регистрировал время получения каждого обновления. Мониторинг проводился в течение 30 секунд, что позволило получить репрезентативную выборку данных.
Результаты
Вот ключевые показатели, полученные в ходе исследования:
Показатель |
Alor |
Tinkoff |
Всего обновлений |
176 |
72 |
Средняя скорость (обновлений/сек) |
5.78 |
2.37 |
Текущая скорость (обновлений/сек) |
6 |
4 |
Относительная скорость |
100% |
40.91% |
Ключевой вывод: API Alor оказалось в 2.44 раза быстрее, чем API Tinkoff.
Интерпретация результатов
Объем данных: За 30 секунд наблюдения Alor предоставил 176 обновлений стакана, в то время как Tinkoff - только 72. Это говорит о более высокой частоте обновления данных у Alor.
Стабильность скорости: У обоих брокеров наблюдается небольшое расхождение между средней и текущей скоростью, что свидетельствует о стабильности их систем.
Относительная производительность: API Alor показало стабильно высокую производительность на протяжении всего теста, в то время как Tinkoff достиг лишь 40.91% от скорости Alor.
Значимость для трейдеров
Для трейдеров, использующих высокочастотные стратегии или алгоритмы, требующие быстрой реакции на изменения в стакане, разница в скорости может быть критической. Более быстрое получение данных позволяет:
Быстрее реагировать на рыночные движения
Точнее определять моменты входа и выхода из позиций
Эффективнее исполнять крупные заявки, разбивая их на части
Сравнение с традиционными терминалами
Важно отметить, что роботы, работающие через традиционные терминалы, такие как QUIK или MetaTrader, существенно уступают по скорости системам, использующим прямое API-подключение. Это связано с дополнительными слоями обработки данных и менее эффективными протоколами передачи информации в этих терминалах.
Благодарность и открытость исследования
Отдельно хочу выразить благодарность брокерам Alor и Tinkoff. Эти компании являются передовыми в области предоставления Open API и вносят значительный вклад в развитие открытого программного обеспечения (open source) для финансового сектора. Их подход не только способствует инновациям в алгоритмической торговле, но и повышает прозрачность и доступность финансовых инструментов для широкого круга разработчиков и трейдеров.
Важно отметить, что исходный код всех проведенных исследований, включая клиенты для подключения к API и инструменты анализа производительности, доступны в открытом репозитории. Вы можете найти их по адресу: https://github.com/osaengine/snippets
Открытость кода позволяет:
Проверить методологию и результаты исследования
Использовать код как основу для собственных проектов и исследований
Вносить предложения по улучшению методологии тестирования
Расширить исследование на другие API и брокеров
Приглашаю всех заинтересованных разработчиков и исследователей ознакомиться с кодом, использовать его в своих проектах и, возможно, внести свой вклад в дальнейшее развитие этих инструментов.
Заключение
Выбор брокера всегда должен основываться на комплексной оценке всех факторов, важных для конкретного трейдера или инвестора. Однако, если скорость получения данных стакана является приоритетом, то по результатам данного исследования API Alor демонстрирует значительное преимущество.
Тем не менее, стоит учитывать, что это исследование проводилось в конкретный момент времени и на ограниченной выборке данных. Для получения более полной картины рекомендуется провести дополнительные тесты в различных рыночных условиях и на разных инструментах.
Также важно помнить, что высокая скорость API - это лишь инструмент, который сам по себе не гарантирует успешности торговли. Ключевым фактором остается качество торговой стратегии и умение трейдера ее реализовать.
В заключение хочу ещё раз подчеркнуть важность открытых API и открытого исходного кода в развитии финансовых технологий. Такой подход не только способствует инновациям, но и позволяет трейдерам и разработчикам создавать более эффективные и прозрачные торговые системы.
Комментарии (9)
Matilda_T
30.08.2024 09:07Для каждого API был разработан клиент, который подключался к серверам брокера, подписывался на обновления стакана и регистрировал время получения каждого обновления. Мониторинг проводился в течение 30 секунд, что позволило получить репрезентативную выборку данных.
Методология вызывает ряд вопросов:
Тестирование происходило одновременно или в разное время?
Почему всего 30 секунд?
Из результатов нельзя понять, кто из брокеров позволяет получить данные раньше. Средняя частота обновлений - весьма косвенный показатель.
Скорость обновления может сильно зависеть от локации тестирующего. Пинг до хоста может сильно зависеть от того, в каком ДЦ Москвы Вы расположены
junsanich Автор
30.08.2024 09:07Одновременно. Вы можете посмотреть код. Все подключение идет с одного места, с одного компьютера, по одному и тому же фьючерсу.
А сколько нужно для проверки самого ликвидного источника данных?
У стаканов нет меток времени. Поэтому "раньше" вещь недостоверная. Но можно понять, кто транслирует изменения цен "чаще". Что будет влиять и на "раньше".
Локация - обычный домашний компьютер, равноудаленно расположенный от двух брокеров. Более того, специально выложен код для проверки тем, у кого ситуация другая. Потому что кто-то может быть ближе к Тинькофф, и у него картина будет другая. А вычисления средней температуры по больнице уже не так интересны.
Matilda_T
30.08.2024 09:07И кроме того, есть еще вопрос, с какой скоростью API позволяет выставить заявку - это, бывает, очень не быстро происходит. Может так оказаться, что из доступных API (если не рассматривать TWIME/PLAZAII/FIX/FAST и тп. из колокации MOEX) данные получать лучше через одного, о заявку выставлять - через другого брокера.
junsanich Автор
30.08.2024 09:07Сомневаюсь что такая комбинация будет быстрее, чем использование одного брокера. Но протестировать конечно имеет смысл.
С другой стороны, стаканы могут наполняться разными ценами. Можно выставлять заявку через параллельное подключение, но и цена в нем будет "параллельная". Брокер не обязан транслировать стакан как он есть на бирже. Он может добавлять свои уровни ликвидности, исполняя заявку по цене лучше, чем может дать биржа, к примеру. Тиньков так и делает. Он называет это диллерским стаканом.
Matilda_T
30.08.2024 09:07А сколько нужно для проверки самого ликвидного источника данных?
Ну хотя бы пару часов. А еще лучше повторить в разные дни. А 30 секунд - нерепрезентативная выборка.
У стаканов нет меток времени. Поэтому "раньше" вещь недостоверная. Но можно понять, кто транслирует изменения цен "чаще". Что будет влиять и на "раньше".
Офферы приходят и уходят. Каждый оффер - это цена и количество. Можно же оценить, где одни и те же офферы раньше приходят и раньше уходят из стакана. Более высокая частота обновления ≠ более актуальные данные. Можно, условно, 6 раз в секунду получать данные о том, что было 0,5 секунд назад, или 3 раза в секунду о том, что было 0,1 секунд назад. Что лучше?
RuVad
30.08.2024 09:07по api Алора:
1. для "скорости" лучше использовать формат Slim
2. при создание подписки в WebSocket есть ткой параметр как frequency ( Максимальная частота отдачи данных сервером в миллисекундах ). если его не указывать = стоит 175 миллисекунд . Но можно его уменьшить .
"Минимальное значение параметра зависит от выбранного формата возвращаемого JSON-объекта:
Simple
— 25 миллисекундSlim
— 10 миллисекундHeavy
— 500 миллисекунд
junsanich Автор
30.08.2024 09:07https://github.com/osaengine/snippets/blob/main/Metrics/MarketDataSpeed/AlorOrderBookClient.cs#L30 вот так
invbox
У Финам появился open api. Сделайте с ним сравнение https://finamweb.github.io/trade-api-docs/