- REST-протокол
- Ограничение количества запросов
- Ограничение количества запросов от Московской Биржи (MOEX)
- Генерация
- Протокол
- Ограничения
- candle:subscribe
- candle:unsubscribe
- orderbook:subscribe
- orderbook:unsubscribe
- instrument_info:subscribe
- instrument_info:unsubscribe
- Сообщения об ошибке
- Хотелось бы знать об ограничениях API до того как тебя забанят. Поддержка не в курсе #313
- Comments
- nleo commented Aug 5, 2020
- nleo commented Aug 5, 2020
- NikitaMelnikov commented Aug 5, 2020
- mlshvdv commented Aug 5, 2020
- yurvonScreamo commented Aug 5, 2020
- Fatal1ty commented Aug 5, 2020
- ProgrammingLife commented Aug 5, 2020
- NikitaMelnikov commented Aug 6, 2020
- NikitaMelnikov commented Aug 6, 2020
- betslus1 commented Aug 7, 2020 •
- felixrap commented Aug 7, 2020
- nonamegithub commented Aug 9, 2020
- IvanAgafonov commented Aug 11, 2020 •
- betslus1 commented Aug 11, 2020
- NikitaMelnikov commented Aug 12, 2020
- nonamegithub commented Aug 12, 2020
- luckman commented Aug 27, 2020 •
- nleo commented Aug 31, 2020
- nonamegithub commented Aug 31, 2020
- nleo commented Aug 31, 2020
- nonamegithub commented Aug 31, 2020
- felixrap commented Aug 31, 2020
- NikitaMelnikov commented Sep 3, 2020
- nonamegithub commented Sep 3, 2020
- Fatal1ty commented Sep 3, 2020 •
- nonamegithub commented Sep 3, 2020
- nleo commented Sep 3, 2020 •
- nonamegithub commented Sep 3, 2020
- API Тиньков.Инвестиции. Первые шаги
- Получение токена и установка библиотеки
- Авторизация
- Что у нас в портфеле
- Получаем название бумаги по FIGI и тикету
- Качаем справочник ценных бумаг
- Получаем список операций
- Все не так просто (план и факт)
- Читают сейчас
- Редакторский дайджест
- Похожие публикации
- Что недоговаривают Тинькофф Инвестиции. Вытаскиваем все данные по портфелю через API в большую таблицу Excel
- Пользователи массово жалуются на сбой в приложениях «Тинькофф» и «Тинькофф Инвестиции»
- Отслеживаем состояние своего портфеля у брокера «Тинькофф Инвестиции» через Google Таблицы
- Курсы
- Минуточку внимания
- Комментарии 63
REST-протокол
Ограничение количества запросов
Ресурс | Количество запросов для пользователя | Количество запросов на IP | Интервал ограничения |
---|---|---|---|
/sandbox | 120 | 1000 | 1 минута |
/portfolio | 120 | 1000 | 1 минута |
/market | 240 | 500 | 1 минута |
/orders | 100 | 1000 | 1 минута |
/orders/limit-order | 100 | 1000 | 1 минута |
/orders/market-order | 100 | 1000 | 1 минута |
/orders/cancel | 50 | 1000 | 1 минута |
/operations | 120 | 1000 | 1 минута |
При превышении лимита запросов возвращается ошибка 429 Error: Too Many Requests
Ограничение количества запросов от Московской Биржи (MOEX)
- Среднее допустимое количество действий в секунду 150 запросов в течение 5 минут
- Среднее допустимое количество сообщений об ошибке в секунду 10 в течение 5 минут
Под запросами в биржу подразумевается выставление и отмена заявок
Генерация
REST API использует OpenAPI 3.0.0, для генерации клиентов необходимо использовать новую версию swagger-gen.
Источник
Протокол
Streaming market-data в качестве протокола транспорта использует WebSocket.
Ограничения
- Доступно 6 TCP-соединений на одного пользователя.
candle:subscribe
Подписка на свечи
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
event | string | + | Название события |
time | string | + | Время в формате RFC3339Nano |
payload | object | + | Структура свечи |
payload.o | double | + | Цена открытия |
payload.c | double | + | Цена закрытия |
payload.h | double | + | Наибольшая цена |
payload.l | double | + | Наименьшая цена |
payload.v | double | + | Объем торгов |
payload.time | string | + | Время в формате RFC3339 |
payload.interval | string | + | Interval |
payload.figi | string | + | FIGI |
candle:unsubscribe
Отписка от свечей
orderbook:subscribe
Подписка на стакан
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
event | string | + | Название события |
time | string | + | Время в формате RFC3339Nano |
payload | object | + | Структура со стаканом |
payload.depth | int | + | Глубина стакана |
payload.bids | array[double,double] | + | Массив [Цена, количество] предложений цены |
payload.asks | array[double,double] | + | Массив [Цена, количество] запросов цены |
payload.figi | string | + | FIGI |
orderbook:unsubscribe
Отписка от стакана
instrument_info:subscribe
Подписка на информацию об инструменте
Параметр | Тип | Обязательность | Описание |
---|---|---|---|
event | string | + | Название события |
time | string | + | Время в формате RFC3339Nano |
payload | object | + | Структура с информацией по инструменту |
payload.trade_status | string | + | Статус торгов |
payload.min_price_increment | double | + | Шаг цены |
payload.lot | double | + | Лот |
payload.accrued_interest | double | — | НКД. Возвращается только для бондов |
payload.limit_up | double | — | Верхняя граница заявки. Возвращается только для RTS инструментов |
payload.limit_down | double | — | Нижняя граница заявки. Возвращается только для RTS инструментов |
payload.figi | string | + | FIGI |
instrument_info:unsubscribe
Отписка от информации об инструменте
Сообщения об ошибке
К любому запросу можно добавить необязательное поле request_id, которое будет использовано в сообщении об ошибке
Источник
Хотелось бы знать об ограничениях API до того как тебя забанят. Поддержка не в курсе #313
Comments
nleo commented Aug 5, 2020
The text was updated successfully, but these errors were encountered:
nleo commented Aug 5, 2020
Т.е. проблема в том, что о всём том, что написанно в скринах люди могут узнать только после того как нарушат правила. Поддержка всегда заявляет что ограничений никаких нет и можно выставлять сколько угодно и каких угодно заявок.
NikitaMelnikov commented Aug 5, 2020
Спасибо за фидбек, добавим у себя описание ограничений на бирже.
Подскажите, а по TEUR, TUSD вы через OpenApi выставляли заявки?
mlshvdv commented Aug 5, 2020
@nleo а расскажите, пожалуйста, подробнее о ситуации? Чтобы сообществу иметь в виду с какими ограничениями и в следствии чего вы столкнулись )
yurvonScreamo commented Aug 5, 2020
@nleo а расскажите, пожалуйста, подробнее о ситуации? Чтобы сообществу иметь в виду с какими ограничениями и в следствии чего вы столкнулись )
неприличное большое количество заявок, вот из-за чего это произошло (10-14к в день по одной и той же бумаге)
Fatal1ty commented Aug 5, 2020
Спасибо за фидбек, добавим у себя описание ограничений на бирже.
Можете назвать сроки добавления описания ограничений?
ProgrammingLife commented Aug 5, 2020
Ещё формулировка странная какая-то
Среднее допустимое количество действий в секунду . равное 150 на протяжении 5 минут
Это сколько же действий в секунду? Т.е. можно 150 действий отшпарить в последнюю секунду из 5 минут или столько действий не поместится в «Среднее допустимое количество действий в секунду»?
NikitaMelnikov commented Aug 6, 2020
NikitaMelnikov commented Aug 6, 2020
@ProgrammingLife в последнюю секунду/минуту не получится из-за ограничений OpenApi
betslus1 commented Aug 7, 2020 •
@nleo а расскажите, пожалуйста, подробнее о ситуации? Чтобы сообществу иметь в виду с какими ограничениями и в следствии чего вы столкнулись )
неприличное большое количество заявок, вот из-за чего это произошло (10-14к в день по одной и той же бумаге)
А если по разным бумагам? т.е. добавляем к ограничению 120 RPM в минуту от тинькова, 150 request / 5 min in MOEX?
По СПБ бирже как дела?
Что значит количество бумаг менее 100. Т.е. если заявок более 100 по MOEX то лимиты другие?
felixrap commented Aug 7, 2020
@nleo а расскажите, пожалуйста, подробнее о ситуации? Чтобы сообществу иметь в виду с какими ограничениями и в следствии чего вы столкнулись )
неприличное большое количество заявок, вот из-за чего это произошло (10-14к в день по одной и той же бумаге)
Выходит, что на минутах торговать тут не получится? Даже не учитывая комиссию Тинькова. А если 120 запросов на 120 разных бумаг, получается что за сессию можно сделать 50к+ запросов.
nonamegithub commented Aug 9, 2020
Дык вроде все ясно из фрагментов представленной переписки. Комиссия со сделки выходила меньше 0,01 и не могла быть удержана с него брокером, соответственно. Он и поверил в себя — решил, что теперь он самый умный человек на планете. За это и забанили.
IvanAgafonov commented Aug 11, 2020 •
@nonamegithub Как такое получилось? Он ведь торговал TUSD и TEUR, а там не может быть такой маленькой комиссии даже при минимальном лоте, или нет? Я в курсе, что сейчас много домашних инвесторов, которые гоняют фонды от тинькофф по несколько миллионов штук за день, потому что там нету комиссии и слабое движение, но комиссии то нет по правилам брокера, в чем тогда проблема.
betslus1 commented Aug 11, 2020
Мне всегда казалось комиссия округляется вверх?
т.е. 0.000001 по факту будет 0.01? (кроме фондов Т)
NikitaMelnikov commented Aug 12, 2020
TRUB, TUSD и TEUR отключены в openapi, соответственно вопрос а как торговали то собственно 🙂
nonamegithub commented Aug 12, 2020
Currency rounding attack, классика жанра. Боюсь, не поделится товарищ с нами секретом.
luckman commented Aug 27, 2020 •
Подозреваю, что там в округлениях дело.
Сейчас в TGLD кто-то подобным занимается.
(На картинке вверху средняя цена исполнения, хотя лимитная заявка сделана по цене 0,0812)
5 лотов стоят 0,406 — округляется в 0,41
nleo commented Aug 31, 2020
@NikitaMelnikov он торговал скриптами в браузере 🙂
nonamegithub commented Aug 31, 2020
О, чистосердечное признание ?!
Зачет, дружище! Я рассматривал версию с патченным .apk
Но это тоже красиво.
nleo commented Aug 31, 2020
@nonamegithub все три ситуации происходили не со мной, я просто много в каких чатах сижу, многое вижу)
Сам я обычного бота без HFT планирую
nonamegithub commented Aug 31, 2020
С существующими ограничениями Tinkoff OpenAPI по количеству запросов orders в 120/мин об HFT можно забыть раз и навсегда. Следовательно на ситуацию из скриншота № 1 попасть практически нереально. Парни писали, что ловили 429 Error: Too Many Requests.
felixrap commented Aug 31, 2020
С существующими ограничениями Tinkoff OpenAPI по количеству запросов orders в 120/мин об HFT можно забыть раз и навсегда. Следовательно на ситуацию из скриншота № 1 попасть практически нереально. Парни писали, что ловили 429 Error: Too Many Requests.
Вы ещё не учитываете комиссию. Если взять тот же сбер, то, чтобы по сделке выйти в ноль и отбить комиссию (0.0025%), нужно выиграть разницу в цене копеек 12-14. И только потом, всё что выше этого — будет вашим профитом.
NikitaMelnikov commented Sep 3, 2020
@nonamegithub не только ограничениями openapi, но еще и биржи
nonamegithub commented Sep 3, 2020
А вот с этого момента поподробнее, пожалуйста. Бирже MOEX не нравятся запросы со средней скоростью 150 шт./сек на протяжении 5-ти минут (см. 1 скриншот). Первым и единственным заслоном в таком случае будет только Tinkoff Api со своим ограничением в 120 заявок в минуту. Нет, разве?
Fatal1ty commented Sep 3, 2020 •
Бирже MOEX не нравятся запросы со средней скоростью 150 шт./сек на протяжении 5-ти минут
Как я понял из документации, там ограничение 150 запросов в 5 минут, то есть, если делать rate limiter по минутам, то выходит 30 запросов в минуту. Так ведь?
nonamegithub commented Sep 3, 2020
Нет, не так) Цитирую дословно из скриншота № 1: «среднее допустимое количество действий в секунду. равное 150 на протяжении 5 минут». Это, в принципе, вполне похоже на правду, Не удивлюсь, если парни с Тинькова, что-то сами не так поняли, и зарезали нас по самое не хочу. Не скажу про заявки, но в асинхроне спокойно могу запросить котировки десятка инструментов за секунду и менее, даже через Tinkoff Api. Главное за лимит в 120/мин не выйти.
nleo commented Sep 3, 2020 •
Я тоже по MOEX читаю, что можно сделать 5х60х150=45000 действий за пять минут, хоть все 45000 в первую минуту, или может даже в первую секунду?)
Коряво конечно они написали
nonamegithub commented Sep 3, 2020
Да и документация от Tinkoff подтверждает то же самое: Среднее допустимое количество действий в секунду 150 запросов в течение 5 минут.
Давайте требовать увеличения лимитов на порядок)
Источник
API Тиньков.Инвестиции. Первые шаги
Практически с первых дней я стал клиентом Тиньков.Инвестиции.
И с этого же момента меня терзают смутные сомнения — отражает ли личный кабинет объективную реальность?
Дело в том, что я покупаю ценные бумаги, номинированные в долларах, но в ЛК цены всех активов отображаются в долларах, а итоговая стоимость портфеля в рублях.
И мне непонятно, это доллар вырос или я такой результативный инвестор?
А как же комиссии, налоги и прочие дивиденды?
Вот бы взять все мои сделки и расписать по ФИФО, как в складском учете… А сверху положить полученные дивиденды, а потом вычесть налоги.
Вот тогда я и увижу понятный мне результат.
Оказалось, у Тинькова есть API, которое позволяет писать торговых роботов (мне это совсем не интересно), а также загружать данные по своему портфелю и операциям.
У этого API есть официальное описание, но мне не все было понятно, пришлось разбираться.
Результаты этих разборок представляю вашему вниманию.
Получение токена и установка библиотеки
Перед началом работы нужно установить библиотеку и получить токен.
Цитирую официальную инструкцию по получению токена:
- Зайдите в свой аккаунт на tinkoff.ru
- Перейдите в раздел инвестиций
- Перейдите в настройки
- Функция «Подтверждение сделок кодом» должна быть отключена
- Выпустите токен OpenApi для биржи и Sandbox. Возможно система попросит вас авторизоваться еще раз, не беспокойтесь, это необходимо для подключения робота к торговой платформе.
- Скопируйте токен и сохраните, токен отображается только один раз, просмотреть его позже не получится, тем не менее вы можете выпускать неограниченное количество токенов.
На момент написания статью токен выдавался на странице www.tinkoff.ru/invest/settings, кнопка в нижней части страницы.
С токеном для песочницы у меня возникали ошибки, поэтому я начал экспериментировать с боевой версией. Чего и вам желаю (Осторожно: не купите-продайте случайно что-то лишнее).
Авторизация
Эти две строки делают все, что нам нужно.
Дальше работаем с переменной client.
Что у нас в портфеле
Получим содержимое нашего вашего портфеля:
Посмотрим основные данные первого элемента:
В моем случае это:
value — Цена бумаги
balance — Кличество бумаг в портфеле, value и currency — их денежное выражение.
figi — Financial Instrument Global Identifier (Финансовый Глобальный Идентификатор инструмента)
ticker — Тикер актива.
По этим данным мы можем узнать человекочитаемое название актива.
Для данного запроса нам это не нужно (см. поле name), но в других случаях пригодится.
Получаем название бумаги по FIGI и тикету
Эта API-функция у меня работает как надо. Видим, что ‘BBG000BWPXQ8’ -> ‘British American Tobacco’.
А вот поиск названия актива по тикеру у меня не работает :(((
Разработчики предложили обновить библиотеку, но даже после этого не взлетело.
Качаем справочник ценных бумаг
Впрочем, я решил этот вопрос кардинально. Скачал у Тинькова полный справочник торгуемых активов:
получил
Как видим, figi и name там есть. Для моих целей — более чем достаточно.
Получаем список операций
А вот самое интересное — получить список моих операций. В операции (в моем случае) попадают следующие действия:
- PayIn — Пополнение брокерского счета
- PayOut — Вывод денег
- BuyCard — Покупка с карты
- Sell — Продажа
- BrokerCommission — Комиссия брокера
- Dividend — Выплата дивидендов
- Tax — Налоги
- TaxDividend- Налоги c дивидендов
- ServiceCommission — Комиссия за обслуживание
Код для выгрузки портфеля:
Посмотрим, что получилось. В моем случае, представляет интерес этот элемент Вот что он собой являет
Нас интересуют поля:
- date — дата сделки
- figi — код актива
- operation_type — тип операции
- payment — сумма операции. У налогов или комиссий указана именно она. price при этом None
- price — цена одной бумаги
- quantity — плановое количество бумаг
- trades — реальные биржевые сделки
Сразу возник вопрос — зачем нам какие-то trades, если есть price и quantity?
Все не так просто (план и факт)
Как я понял, в quantity указано то количество бумаг, которые я хотел купить. А то, что фактически куплено, лежит в trades[i].quantity.
Т.е. если хотите обратится к фактическим сделкам, нужно перебрать то, что лежит в trades.
В ряде случаев, там None — например, для налогов или вводов/выводов средств.
Чтобы получить настоящие цифры, нужно смотреть и в сделки, и в биржевые операции:
Читают сейчас
Редакторский дайджест
Присылаем лучшие статьи раз в месяц
Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.
Похожие публикации
Что недоговаривают Тинькофф Инвестиции. Вытаскиваем все данные по портфелю через API в большую таблицу Excel
Пользователи массово жалуются на сбой в приложениях «Тинькофф» и «Тинькофф Инвестиции»
Отслеживаем состояние своего портфеля у брокера «Тинькофф Инвестиции» через Google Таблицы
Курсы
AdBlock похитил этот баннер, но баннеры не зубы — отрастут
Минуточку внимания
Комментарии 63
Оказалось, у Тинькова есть API, которое позволяет писать торговых роботов (мне это совсем не интересно)
А вот мне, наоборот, оказалось интересно. Начал возиться с этим чуть больше недели назад. Написал программу, которая сигнализирует о необычных состояниях на рынке, дальнейшие решения я уже принимал вручную. В принципе, понравилось.
Главная проблема — API очень простой, но одновременно и очень сырой. Часто тормозит и глючит. Поиграться — нормально, но если торговать профессионально, то есть варианты и получше.
Был бы рад ссылкам
Специализированные брокеры. Полноценно пока не интересовался этой темой, поэтому ссылок не дам.
Там в квике есть lua, на которой худо бедно можно накорябать робота, графики с индивидуальными индикаторами, или шлюз в другие миры.
Но квик что-то подтормаживает, знающие люди говорят, для htf надо брать плазу2 и колокейшн у брокера.
знающие люди говорят, для htf надо брать плазу2 и колокейшн у брокера
Рано или поздно пытливый программистский ум все равно захочет хоть немного HFT — бота с реакцией в несколько секунд. О миллисекундах, к сожалению, речи не идёт — это удел кровавого энтерпрайса и крупных игроков.
Я имею в виду тормоза самого Тинькоффа как сервиса. В обычном режиме там тоже всё исполняется в момент, но в периоды высокой активности на бирже, когда самое лучшее время делать деньги, он встаёт колом.
Но в целом я Т не особо за это ругаю: у него изначально была другая направленность — не на профессиональных трейдеров, а просто на желающих пощупать возможность заработка на инвестициях в долгосроке. API для торговли они предоставили совсем недавно.
Ну вот представьте: накупили вы этих плазов, поставили колокейшн в золотом корпусе, запустили скрипты и ждете. А на другом конце интернета сидят условные Мамут с Усмановым, смотрят на экраны своих HFT и ржут над вами.
Почему ржут? А потому что пока скрипит ваша плаза в колокейшне, у них уже миллиончик+миллиончик+миллиончик…
А в режиме read-only через API Тинькофф можно считать только свои позиции?
Имел ввиду получение собственных открытых позиций — цена покупки, дата, количество.
Без возможности торговли. Для синхронизации со своими сервисами по учету.
Кто-нибудь знает — Тинькофф единственный брокер, которые имеет своё открытое апи?
В первую очередь интересен только просмотр позиций без возможностей торговли.
В IB и так нет проблем с экспортом отчетов.
Проблема с рос. брокерами — нет единой формы, они периодически меняются, а сбербанк (бывший тройка диалог) — так в плане отчетов вообще ловить нечего — невозможно даже определить начальную цену позиции.
И оно открыто? А кто кроме Тинькова имеет открытое апи?
Тинькофф Инвестиции, ITI Capital (АО «ИК «Ай Ти Инвест»).
А знаете ещё кто имеет апи?
А после слияния с Фридом Финанс апи сохранилось?
Вот тут становится непонятно, что вы подразумеваете под «Открытым АПИ».
Ну для меня это значит, что имеется подробная документация по протоколу и возможность написания собственных клиентов, а не только плагинов и скриптов для квика.
Я хотел бы через API получать свои открытые позиции в режиме только чтения.
И мне непонятно, это доллар вырос или я такой результативный инвестор?
Я себе написал замену Excel для учёта сделок.
Всё считает. Можно посмотреть состояние портфеля на любую дату. Главное все сделки в систему завести… Можно отчёт брокера импортировать. Зацените кто хочет, https://izi-invest.ru
Относительно «а итоговая стоимость портфеля в рублях» — у Тинькофф есть переключатель (в мобильных приложениях на значок рубля нажать, если не путаю), можно и в долларах смотреть
Вах, не прошло и полгода, что называется…
Когда я, будучи их клиентом, спросил о кусочке API для всего-то ежедневного получения курса евродоллара, меня первую неделю не могли понять вообще, вторую отвечали безопасники (упс? я вообще-то технарей спрашивал) разных уровней и задавали острожные, хоть и дурацкие на взгляд программиста, вопросы, а на третью посоветовали… парсить их главную страницу, где выводится курс…
Передовой банк, что уж тут.
Приветствую, коллега. Так вышло, что почти одновременно с вами я начал вынашивать идею о написании своего клиента для OpenAPI на Ruby. Как раз сегодня я зарелизил свою поделку, консольный клиент для вывода портфолио брокерского счёта.
Моя задача — сделать консольную утилиту для просмотра полной итоговой суммы и процентов моего портфеля. Однако, столкнулся с несколькими недостатками данного API.
1. Отсутствие итоговой суммы и процентов доходности в API. Хотя бы в приближённом виде. А это то, ради чего я вообще начал писать код.
2. Список позиций на счёте вроде хорош, но в нём не хватает процентов доходности и оценочной стоимости каждой позиции. Пришлось писать кучу кода для вычисления процентов.
3. Каждая позиция в своей валюте, это вроде понятно и правильно. Но когда я собрался посчитать общую стоимость, это вылилось в нетривиальную задачу. Оказывается в API нет биржевого курса долларов/евро. Пришлось считать так: брать данные своих активов доллар и евро и через сумму и доходность высчитывать курс к рублю. Потом я прохожу по списку позиций и каждую позицию умножаю на курс к рублю, чтобы получить рублёвый итог.
По итогу несмотря на кучу неточных вычислений я получил довольно точные цифры, отличающиеся от приложения на доли процентов. И мне порой даже кажется, что мои данные чуть точнее, поскольку я сам вывел все формулы и сам по ним считаю свои денежки 🙂
Во избежание ошибок float-вычислений, использую BigDecimal — этакий float с гарантированной десятичной точностью. То есть складывая 1.1 + 1.2 получится 2.3, а не 2.2999999999999.
API в целом рабочее, но немного бесполезненькое. Иногда замирает, иногда некоторые поля приходят нулевые, пару раз ловил 500. Может через вебсокеты получится что-то интересное добыть.
Я курс доллара тоже у Тинькова беру
cd2 = datetime.now(tz=timezone(‘Europe/Moscow’))
cd1 = cd2 — timedelta(days=3)
cur = client.market.market_candles_get(‘BBG0013HGFT4’, cd1, cd2, ‘day’)
if len(cur.payload.candles) == 0:
print(»)
else:
print(cur.payload.candles[len(cur.payload.candles) — 1])
Это инструмент USD000UTSTOM — курс с поставкой валюты «завтра», но меня устраивает.
Источник