Ограничения в работе с Tinkoff OpenApi инвестиций

#programming #trading

На фондовом рынке в основном работают профессионалы, которые в течение рабочего дня анализируют происходящие события в мире, состояние рынков, и на основании этого принимают определенные решения по покупке или продаже активов. Работа далеко не простая, особенно, если учесть, что на рынке более 800 различных инструментов, по которым можно проводить торговые операции.

Использование торгового советника, то есть программы, которая на основании заданных сигналов принимала бы решение о покупке/продаже бумаги сильно упрощает жизнь. Но написание подобной программы не простая задача.

Для того, чтобы была возможность создания подобного советника, необходимо иметь API, то есть язык на котором можно подавать команды брокеру на получение информации о текущей ситуации на рынке, или на выставление определенных ордеров на покупку/продажу. У большинства брокеров есть открытые API, которые хорошо документированы и которые можно использовать на многих языках программирования.

Решил попробовать в работе Тинькофф Инвестиции OpenAPI . Использовал официальную SDK для Go . Все достаточно просто на первый взгляд. Но когда стал погружаться глубже, все оказалось не таким радужным.

Во-первых, набор инструментов очень ограничен базовым набором, не требующим статуса квалифицированного инвестора, из которого так же исключили фонды Тинькофф. По сути это не проблема для обычного инвестора, особой разницы он и не заметит, но если вы квалифицированный инвестор и пришли зарабатывать, это ограничение выглядит странным.

Во-вторых, есть ограничения на использование API. Оно описано на странице описания протокола Rest , по каждому ресурсу выставлено ограничение в 120 запросов в минуту. При этом, обратите внимание, для ММВБ есть дополнительные ограничения, тут ограничение на 150 запросов в секунду в течение 5 минут. При превышении числа запросов в Тинькофф, получаем код ошибки 429, а ММВБ просто блокирует ваш аккаунт.

Что такое 120 запросов в минуту? Выглядит довольно хорошим значением. Но, есть одно но, о котором не стоит забывать. При запросе исторических данных есть дополнительные ограничения, которые почему-то не документрированы и озвучены только в коде официального SDK, причем в примере:

	// Получение свечей(ордеров)
	// Внимание! Действуют ограничения на промежуток и доступный размер свечей за него
	// Интервал свечи и допустимый промежуток запроса:
	// - 1min [1 minute, 1 day]
	// - 2min [2 minutes, 1 day]
	// - 3min [3 minutes, 1 day]
	// - 5min [5 minutes, 1 day]
	// - 10min [10 minutes, 1 day]
	// - 15min [15 minutes, 1 day]
	// - 30min [30 minutes, 1 day]
	// - hour [1 hour, 7 days]
	// - day [1 day, 1 year]
	// - week [7 days, 2 years]
	// - month [1 month, 10 years]

То есть при использовании минуток за раз можно запросить данные только за сутки. При переходе на часовой таймфрейм, доступны данные уже за неделю за один запрос. То есть, если возникает необходимость собрать исторические данные по инструментам, придется делать массу запросов в банк. Собрать всю историю по всем таймфреймам не представляется возможным вообще. Только минутки за последний месяц это уже 30 запросов. Или к примеру, собрать данные за последние 10 лет по часовому таймфрейму это более 500 запросов.

Пока собираешь исторические данные, последние успевают устареть.

Но тут появляется еще одна проблема, снова неявная. Если открыть приложение Тинькофф Инвестиций, на любом инструменте на недельном фрейме, мы увидим одни исторические данные. Если же сузить фрейм до 5-минутного, то данные будут доступны за гораздо более ограниченный промежуток времени. Разница достигает в 10 раз. Снова получаем, что провести корректный анализ на исторических данных, просто невозможно.

Торговые роботы в основном ориентированы на высокочастотную торговлю, предполагающую выполнение операций по несколько раз в секунду по многим инструментам сразу. Исходя из озвученных выше ограничений становиться понятным, что использовать для торгового робота Tinkoff OpenAPI не удастся.

Данное OpenAPI очень хорошо использовать для получения текущей ситуации на рынке или информации о состоянии твоего портфеля. Использовать его в анализе или активной торговле, увы, не получиться.

Спасибо большое команде Tinkoff за предоставленную возможность торговать на фондовом рынке и использовать их OpenAPI. Остается только надеяться, что в будущем оно будет только обрастать функционалом и возможностями. И появиться возможность его использования в автоматизированной торговле.