- REST-протокол
- Ограничение количества запросов
- Ограничение количества запросов от Московской Биржи (MOEX)
- Генерация
- Протокол
- Ограничения
- candle:subscribe
- candle:unsubscribe
- orderbook:subscribe
- orderbook:unsubscribe
- instrument_info:subscribe
- instrument_info:unsubscribe
- Сообщения об ошибке
- 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 Тиньков.Инвестиции. Первые шаги
Практически с первых дней я стал клиентом Тиньков.Инвестиции.
И с этого же момента меня терзают смутные сомнения — отражает ли личный кабинет объективную реальность?
Дело в том, что я покупаю ценные бумаги, номинированные в долларах, но в ЛК цены всех активов отображаются в долларах, а итоговая стоимость портфеля в рублях.
И мне непонятно, это доллар вырос или я такой результативный инвестор?
А как же комиссии, налоги и прочие дивиденды?
Вот бы взять все мои сделки и расписать по ФИФО, как в складском учете… А сверху положить полученные дивиденды, а потом вычесть налоги.
Вот тогда я и увижу понятный мне результат.
Оказалось, у Тинькова есть 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 — курс с поставкой валюты «завтра», но меня устраивает.
Источник