Pull to refresh

Comments 112

Всё работает. Потестил на себе. У меня Profit практически сошелся с тиньковским «доход за все время» (Может потому, что сейчас сижу в глубоких минусах).

Я слишком в код не всматривался (только на предмет бэкдоров ;)) поэтому вопрос, вы корректно обсчитываете сценарии в которых в рассчетный период осуществлялся вывод средств? Я выводил и когда был в плюсах и когда в минусах. Последний раз когда выводил платил удержку в 50% с суммы вывода, мне аж икалось.

платил удержку в 50%

Имеется ввиду удержанный налог? В таком случае попробуйте выводить меньшую сумму. Если брокер при выводе не может удержать весь налог, он будет удерживать только 13% от суммы вывода.

Пример:

Ваш профит 100000, налог 13000.

Вы пытаетесь вывести 15000, брокер удержит 13000, вам на счёт поступит 2000

Если вывести 10000, то, т.к. брокер не может удержать 13000, он удержит только 1300 (13% от 10000), на счёт поступит 8700. Оставшиеся 5000 можно вывести следующей транзакцией, с которых удержится только 650.

Оставшийся налог 13000-1300-650=11050 вы заплатите в конце года, либо уже при следующих выводах.

Да, всё верно пишете. Мне интересно считает ли это правильно программа (то что я в начале года уже успел уплатить при выводе большую часть налога)
11050 же мы вывели. Почему это оставшийся налог?
Подскажите, а с ИИС есть возможность получить информацию? А то просмотрев весьма скудную документацию по API от Тинькофф не нашел там ничего… хотя может не туда смотрел :)

В большинстве запросов к API можно выбрать счёт.

Id cчета можно получить запросом GET /user/accounts (https://tinkoffcreditsystems.github.io/invest-openapi/swagger-ui/)

UPD. У автора в настройках вроде такого варианта не увидел. По умолчанию Тинькофф берёт обычный счёт, не ИИС.

Код автора никак не изменить, чтобы инфу по ИИС такую же получить? Или это уже дело в библиотеке tinvest?

В API есть метод /user/accounts, который возвращает два счета (Tinkoff и TinkoffIis (если есть)). Для получения данных по ИИС при запросе портфеля или операций надо подставлять в поле brokerAccountId = TinkoffIis. В этом случае вы будете получать бумаги и сделки именно по ИИС счету.
Можно увидеть ИИС, но нужно проявить немного фантазии.
Сначала нужно получить Id-ы своих счетов

# Список счетов
client.user.user_accounts_get()

Ответ:
{'payload': {'accounts': [{'broker_account_id': '2000270000',
                           'broker_account_type': 'Tinkoff'},
                          {'broker_account_id': '2000490000',
                           'broker_account_type': 'TinkoffIis'}]},
 'status': 'Ok',
 'tracking_id': '04b94f70499c4630'}


Затем, запрашиваем операции по счету с типом TinkoffIis (указываем broker_account_id='2000490000') и получаем то что нужно
d2 = datetime.now(tz=timezone('Europe/Moscow'))
d1 = d2 - timedelta(days=5000)
ops = client.operations.operations_get(_from=d1.isoformat(), to=d2.isoformat(), broker_account_id='2000490000')
В API есть метод /user/accounts, который возвращает два счета (Tinkoff и TinkoffIis (если есть)). Для получения данных по ИИС при запросе портфеля или операций надо подставлять в поле brokerAccountId = TinkoffIis. В этом случае вы будете получать бумаги и сделки именно по ИИС счету.
UFO just landed and posted this here
С налогами вы, кажется, не учитываете инвест. вычет. Его размер зависит от срока владения ЦБ и порой может полностью перекрыть фин. рез.
Инвестиционный вычет применяется для ИИС (нельзя в течение 3 лет закрывать). Автор упомянул, что он использует не ИИС. Но Вы всегда можете доработать скрипт и сделать PR ;)
Есть и другие вычеты, в том числе на владение ценной бумагой… Т.е. если у тебя есть акции и ты держишь их более трех лет, то можно не платить НДФЛ на прибыль от их продажи, но там тоже свои нюансы…
Eсли я продам весь портфель и выведу деньги

А почему вы не считаете 2% комиссии вывода с карты Tinkoff Black? Вся эта история с Тинькофф работает до тех пор, пока вам не понадобится кэш, а когда понадобится — вам предстоит либо почти год выводить по лимиту карты 500к в месяц, либо платить еще 2% комиссии. А с 8 млн. это еще +160к комиссии. Такая себе история с этим Тинькофф.

Ну и второй вопрос. Вы же в курсе, что владельцем всех валютных активов является сам Тинькофф, и в случае банкротства/отзыва лицензии последнего, вы вряд ли что получите, весь в зарубежных депозитариях по всем акциям владелец — Тинькофф?
Вообще, есть вариант снять через другой банк, а туда перевести себе на счёт…
Но интереснее другое — зачем выводить с карты наличку, тем более 8млн?

Ну и второй вопрос. Вы же в курсе, что владельцем всех валютных активов является сам Тинькофф, и в случае банкротства/отзыва лицензии последнего, вы вряд ли что получите, весь в зарубежных депозитариях по всем акциям владелец — Тинькофф?

А откуда такая информация, скажите, пожалуйста?

@tinkoff_bank, думаю, может дать комментарий без проблем

Спасибо. Как раз этот вопрос я уточнял у поддержки Тинькова и у людей которые там работают.

Записи о том, что вы владеете ценными бумагами, хранятся на специальном депозитарном счете.

Депозитарный счет открывается в депозитарии. Депозитарий — это профессиональный участник рынка ценных бумаг, как биржа или брокер. Он занимается учетом прав инвесторов на ценные бумаги. Его можно сравнить с хранилищем ценных бумаг.

Выписку по ценным бумагам можно получить в электронном виде. Для этого заполните заявление и отправьте его через чат в личном кабинете на сайте Tinkoff.ru или в приложении Тинькофф Инвестиций. Выписка будет готова в течение 5 рабочих дней.

Вот ответ от службы поддержки. И отсюда же мой вопрос про источник информации у @Amoled. В принципе, не отказался бы и от комментария @tinkoff_bank.

В поддержке все правильно описали :)

Дополним только, что в целом ситуация банкротства брокера регламентируется ЦБ. Ценные бумаги переводятся в другой депозитарий, деньги выводятся.
А бумаги, на момент банкротства взятые брокером у клиента в РЕПО?
Как выше написали, ситуация регламентируется ЦБ. Все ваши бумаги перенесут к другому брокеру. Не смотря на то, что бумаги в РЕПО, вы все еще являетесь владельцем этих бумаг и они должны быть возвращены вам.

Добавлю пару ссылок:

1. Функции депозитария для счетов в Тинькофф.Инвестициях выполняет сам Тинькофф, соответствующую лицензию можно посмотреть на https://www.tinkoff.ru/about/documents/disclosure/

2.
http://www.consultant.ru/document/cons_doc_LAW_39331/fcbc20b808b1f64ec8800e97f858bb3b2e117381/
ФЗ "О несостоятельности (банкротстве)" ст.185.6 п.1

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

А что будет с фондами от Tinkoff в таком случае?
При премиальной подписке (а она бесплатная при суммарном балансе на инвестиционном и других счетах больше 3кк) с заменой Tinkoff Black на Tinkoff Black Metal можно выводить до 100 000 000 без комиссии (почему-то на сайте написано про отсутствие лимита, но в приложении я его четко вижу). www.tinkoff.ru/cards/debit-cards/tinkoff-black/black-edition/tariffs
А перевод на другой счет так и на обычном тарифе без комиссии.
Можно перевести в другой банк, при этом в отличие от многих других банков, Тинькоф не берет за это вообще никакой комиссии.
То есть выводим с Тинька в какой-нибудь условный Сбер или Альфу (смотря чья карта есть) и дальше уже в их отделениях забираем наличные.

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

В другом банке может быть комиссия за снятие, если снимать раньше какого-то периода после перевода

Может быть полезным уточнением, но межбанк у них бесплатный, сталкивался при оформлении ипотеки в другом банке. И на пользование СБП лимитов не было, только при переводе свыше 1 млн в день (час?) идентификатор сбрасывался на 20 минут

Здравствуйте!

Доходность на сервисе считаем по разным показателям. Постараемся ответить по пунктам.

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

Доходность «за все время» — показывает доходность портфеля по всем открытым позициям. Считается она путем суммирования доходностей по всем позициям в портфеле. Если вам нужно посмотреть доходность за какой-то определенный период, нужно перейти в раздел «Портфельная аналитика». Там по периодам все подробно расписано.

Если в портфеле есть актив в валюте, приводим его к рублю по биржевому курсу валюты (Last Price). Пополнение и выводы в валюте влияют на доходность валюты в портфеле. В свою очередь валюта также влияет на показатели доходности всего портфеля.

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

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

Стоимость портфеля в Пульсе обновляется один раз в день к началу торгов. На странице профиля доходность отображается за 365 дней от текущей даты, не за календарный год. Подробнее о том, как считаем доходность в пульсе описали в нашей базе знаний — help.tinkoff.ru/pulse/profile/yield.
Приятно, что отвечаете!
А когда всегда введете объемы на графиках? Обещали уже давно?
Пока объемы есть в терминале. В будущем добавим в приложении, уже работаем над этим :)
Автор написал
Сложность в том, что бумага могла приобретаться частями, в разные дни, а могла частично продаваться. Здесь действует такое правило, что первой продаётся та бумага, которая первой покупалась.

По сути он реализовал паттерн учёта LIFO (последний пришёл — первый ушёл), а в Тинькофф рассчитывается по FIFO (Первым пришёл — первым ушёл). Из за чего при усреднении, а после частичной фиксации позиции показатели доходности в портфеле тинька показывают не верные данные с точки зрения пользователя (и меня :D)
Вот допустим купили 1 акцию X за 100$, после цена упала до 90$. В портфеле над позицией будет гореть красным шрифтом -10$ (-10%). Хорошо, пока что всё верно. Решаем докупиться по этой цене и у нас теперь 2 акции X, средняя цена покупки (100+90)/2=95$, теперь в портфеле горит красным -5$ (-5.3%).
После падения акция начинает расти и допустим цена вырастает до 93$. Мы помним что купили 1 акцию по 90$ (и история сделок помнит) и решаем сейчас зафиксировать профит в 3$ и продаём 1 акцию.
Ба бах! После этого пользователь смотрит в портфель в приложении и не понимает, потому что теперь там горит зелёным +3$ (+3.2%). А всё потому что тинькофф считает что мы сейчас продали не акцию за 90, а акцию за 100, то есть продали себе в минус. И в портфеле осталась 1 акция X, со средней стоимостью покупки 90$
После этого начал считать всё сам, а после постоянных сбоев в тинькофф инвестиции ушёл на ВТБ (не реклама, там тоже считается не по LIFO, просто там реже сбои)
Вроде, все брокеры традиционно считают по принципу fifo.
А с какого перепуга в поле действия НК РФ должно считаться не по FIFO?)
автор как раз FIFO и реализовал. Ну а для собственных нужд кстати учет можно вести любым методом, он не обязан с налоговым совпадать.
Возможно я упустил этот момент: а учитывается срок владения активом при учет налога? Насколько я помню, при владении больше 3/5 лет не уплачивается налог на прибыль. Поправьте пожалуйста, если ошибаюсь.

Более 5 лет. Также есть другие варианты применения нулевой ставки (гарант):


  • Акции были приобретены до 2011 года, при этом не более половины объектов собственности эмитента акций зарегистрированы в иностранных государствах.
  • Акции выпущены организацией, представляющей высокотехнологичный производящий сектор экономики. При этом срок владения такой акцией составляет не менее 1 года и 1 дня.

Ну и много других вариантов описаны в статьях 284.* НК РФ

Это понятно. Я просто не совсем понял — вот в этих расчетах выше этот момент как-то учитывается? Вот что меня интересовало изначально.
Финансовый результат по бумагам, которыми вы владели 3 года и более налогом не облагается. Соответственно, при продаже такого актива автоматически этот момент учитываем.
О, а пока есть такая возможность — подскажите как будет рассчитан налог с учетом валюты?
Ситуация — я покупаю акцию по цене 50 долларов. Доллар стоит 50 рублей. Проходит 3 года — стоимость акции вырастает до 60 долларов, доллар вырастает до 60 рублей. Все цены условны.
Изначально в рублях эта акция стоила 2500р. Сейчас она стоит 3600р. Из них 500р то сам прирост акции, а 600р это рост стоимости доллара. Или наоборот, тут уже сложная математика для меня пока что.
Вопрос: должен ли я что-то заплатить в качестве налога? Или весь прирост независимо от источника не будет облагаться налогом?

Три года же прошло. Так что налог платить не нужно

Было бы здорово иметь способ разделять акции в долгосрок с 3 года и более, от активов для среднерочных спекуляций, т.е. те которые покупались с намерением продать когда вырастет, а не для накоплений.
Фактически — иметь два брокерских счета.
tinkoff_bank кстати, почему так нельзя?

А, да. Еще при переходе в инвестиции он почему-то предлагает мне «собрать портфель», хотя у меня уже там давно активов на много денег.
Ну или два счета. С возможностью просто перебрасывать активы.
Возможность перебрасывать будет давать тот же эффект, что и продажа в плане учета.
Посаны! Есть такие у кого на главном экране «минус»?
О с тиньком много вопросов, я вот прям никак не могу понять как, при доходе в 1М с меня удержали налогов в 250К? Получил расширенный отчет, вроде по каждой позиции все верно, но результат все равно очень подозрителен. Думал тоже написать скрипт проверить их расчеты, кажется в них собачатина порылась знатно. Но руки дошли только написать скрипт который считает налоговую базу по операциям с валютой. Так как тиньку сделать отчет по валюте видимо религия не позволяет!
Может его тоже выложить в паблик, может кому то пригодиться.
как, при доходе в 1М с меня удержали налогов в 250К?
Налог удерживается с прибыли, но не возвращается при убытках. То есть например вы продали акций газпрома с прибылью 2 млн, и заплатили с них налог 260 т.р., и затем продали акций лукойла с убытком 1 млн, и заплатили 0 рублей налога, итого ваша общая прибыль 1 млн, а налога уплачено 260 т.р.

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

Если сделки из вашего примера закрыты в один год, то не будет 260 налога, будет 130.

В момент закрытия сделки никаких налогов не удерживается, так что "продали и заплатили налог" не совсем корректное описание вообще.

Да, похоже вы правы, налог же снимается в конце года, а не после операции.

Налог так же снимается при выводе в кэш

Увы сумма налога уже зафиксированна, все деньги выведены, налоги удержаны.
Там вся радость в расчетах, за акции в долларах, я же говорю что если мотреть по сделкам то все выглядит корректно, а если взять общий профит и сумму налогов то получается больше. Думаю я все же доберусь до анализа всех сделок и пойму где собака порылась.
В налогах сальдируются (учитываются расходы по одинаковым категориям) операции с бумагами и пфи раздельно
Возможно, в вашем случае, например IPO-шки принесли 2 ляма, а торговля на акциях условного яндекса убыток в лям
Тк это разные категории — убыток снизит налог только по успешным торговлям с акциями
Итого с айпио вы платите 260, общий доход всего лям, и в следующем году 130тысяч убытка сможете зачесть в успешную торговлю акциями яндекса

Я для фридома с налогами ковырялся, если много отчетов от тинькова будет, смогу и его считать. Вот мой бот для фридома: t.me/Nalogusbot
Ого. 8млн рублей держать у одного брокера… сильно.

Например, недавно Тиньков лежал и не было возможности совершать операции. Таким образом вы ничего не сможете сделать в случае чего.

Подтверждаю коммент выше. Технические неполадки брокера в самый неподходящий момент — вот риск.
Конкретно у меня были проблемы с продажей валюты в начале утренней сессии через одного желтого брокера с полгода назад (заявки тупо не проходили). Также были неприятности с тем, что однажды не смог выйти из компании Phizer, когда пошли негативные новости ну и получил убыток. Желтый брокек/банк в этот момент решил провести плановые работы. Теоретически можно не успет купить актив по самой привлекательной цене изза таких вот моментов.

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

тут нужно разделять, получаешь ты ЗП в рублях или в баксах)) выгоднее всего продавать доллары на бирже
Нажал тут случайно «пополнить счёт» в терминале, не увидел что выбрался евро счёт (не используемый ранее), а не рублевой как обычно, в итоге покупка прошла при +3% от биржевой цены. Вот тебе и биржа, я в шоке. Даже по рыночной заявке и то не было бы такой дикой накрутки.
Похоже в тот день тиньков решил постричь лосей на невнимательности, поменял порядок валют в выпадающем списке на пополнение, обычно там рубли всегда были первыми.
Увы, никто не застрахован от технических неполадок. Согласно декларации о рисках, которая указана в нашем Регламенте, инвестор соглашается с рисками, уведомлен о них, и ответственность за риски берет на себя. При этом, мы всегда стараемся решить проблему максимально быстро и идем навстречу клиенту, когда есть возможность.

Я думаю это зависит от того, какой общий объем сбережений. Если сто мультов, почему бы 8 не хранить у одного из брокеров?

А какая разница у скольки брокеров их держать? Все данные так или иначе хранятся в депозитарии. Так что диверсифицироваться еще и по брокерам вроде смысла нет :)
Для расчёта эффективности инвестирования нужно что-то вроде формулы XIRR в Excel, но я пока не сообразил, как вкрутить её в эту программу. Если у вас есть идеи на этот счёт — поделитесь, пожалуйста.


pip install xirr


Делал себе расчет доходности за прошлый год в начале этого года. Берем все операции ввода-вывод на счет:

notTradingOperations = list(filter(lambda item: 
(item.operation_type==tinvest.OperationTypeWithCommission.pay_out or 
item.operation_type==tinvest.OperationTypeWithCommission.pay_in) and 
item.status == tinvest.OperationStatus.done, operations.operations))


Делаем dictionary с парами Дата — Сумма. По хорошему надо еще учитывать курс для валютных операций, я для простоты взял средний 75:

valuesPerDate = { datetime.fromisoformat(item.date[:10]):
 item.payment if item.currency == tinvest.Currency.rub else 
item.payment * 75 for item in notTradingOperations }


Добавляем пары: дату начала и остаток на эту дату, дату конца и остаток на эту дату. Передаем функции xirr, которая показывает нам доходность

xirr(valuesPerDate)
softandiron Будьте аккуратны с различными реестрами, получаемыми через API. Я себе собирал через PowerQuery в Excel напрямую, так вот в списке всех операций отсутствовали некоторые удержания налогов, суммой тысяч на 10-15 рублей. Писал в поддержку, побаландали мой запрос и забили, ничего не решив. Не думал, на самом деле, что по API может что-то не отдавать, но вот так…

Советую делать периодический чек с налоговым отчетом, выгружаемым из ЛК — на всякий)
Боже, дружище, огромное спасибо за твои старания! Задавался ровно теми же вопросами и не понимал, какого чёрта в трёх местах разные цифры, а поддержка толком разъяснить не могла.image
«Увожение» — шикарная безграмотность.
Первая мысль что-то «унавожено» :)))

Это мем. По смыслу, кстати, противоположный тому, что хотел сказать @EgoPingvina

Не знал. Мемов тысячи насочиняли.
Почитал про этот, занятно. Получается мем надо употреблять когда вроде и уважаешь, но с сильным сарказмом. Дурдом! Немудрено что автор перепутал.
Блин, лучше словами…
Всегда воспринимал его в прямом смысле, только с оттенком иронии.
Противоположно его, по-моему, мало кто воспринимает.
А напишите нам на connect@tinkoff.ru ваши ФИО и дату рождения, приложив скрин. Проверим, в чем дело.
В процессе чтения бумаг, на одной их бумаг выдает ошибку, с чем может быть связано?
А какая именно бумага и как она у вас появилась?
У меня была ошибка в день появления бумаги на бирже после IPO.
Ещё может быть ошибка, если бумага торгуется в валюте, отличной от USD и EUR.
Кстати, у меня в портфеле не оказалось бумаг, номинированных в EUR, поэтому с ними программа не тестировалась. По коду всё писал так же, как для USD, но мог где-то проглядеть.

UPD: Пользователи на GitHub заметили ошибку «деление на 0», которая появляется, если бумага досталась вам по нулевой цене.
Обязательно исправлю в будущей версии.
Да спасибо, ошибка именно в делении на 0, хотя не знаю как так вышло вроде все бумаги я покупал
Спасибо большое за такое отличное исследование! У меня тоже всегда вызывали вопросы цифры от Тинькоффа, почему везде статистика разная. Надо будет попробовать все просчитать вашим скриптом.

Некоторые думают, что из-за этого не придётся подавать декларацию на дивиденды, а на самом деле при первой же камералке вам придётся выплатить налог по полной программе и в России и в США

можно поподробнее? не придется подавать декларацию с W8BEN или без нее? что за камералка? что значит по полной программе, заплатить налог дважды?

Многие думают, что не подписывая форму W8BEN не придётся подавать декларацию в России, что брокер просто спишет полный нало в пользу Америки.


Но по факту форма W8BEN — это соглашение об избежании двойного налогооблажения, а это означает, что не подписывая форму вы обязаны заплатить полный налог и в России и в Америке.


PS. камеральная проверка

Мне попадалась информация, что апи Тинькова не отдает данные по премиумным бумагам. Сейчас это актуально или уже поправили?

Еще вариант. Загрузить excel-отчеты брокера на intelinvest.ru и сравнить расчеты баланса.
Если есть идеи по исправлению

При вычислениях (в том числе сложении и умножении) с валютой всегда оперируйте целочисленными значениями «копеек», а не дробными значениями «рублей». При необходимости вывода в дробном виде — делите на сто непосредственно перед выводом.

Почему: docs.python.org/3/tutorial/floatingpoint.html

Нет. Есть инструменты с шагом значительно меньше копейки, тот же VTBR. К счастью, есть Decimal. tinvest, кстати, их и возвращает.

Признаю ошибочность формулировки — хотел поправить, но было поздно.
Ваше «используйте инструменты подходящие необходимой вам точности» будет уместнее.
Мой совет скорее относительно работы с деньгами для «общего случая».

К счастью, есть Decimal. tinvest, кстати, их и возвращает.

Уж больно разница в 0,0077% смахивает на обозначенную мной проблему хранения float'ов.
Если tinvest возвращает decimal, какая тогда ошибка может дать разницу в десятитысячные доли процента в данной ситуации?
Если я правильно понимаю — кроме сложения и умножения там и нет ничего.
даже не для первого раза очень даже неплохо!
задумался о брокерском счете)
Пытаюсь дополнить проект автора, чтобы получать информацию по ИИС.
В файле data_parser.py в функции get_api_data прописываем строку print(client.get_accounts()) после строки print("- authorisation success")
image
Затем запускаем main.py и потом можно нажать ctrl+c, чтобы остановить выполнение после получения нужных данных, а именно:
image
Нам нужен broker_account_id от TinkoffIis, записываем его просто в код, а добавленную строчку удаляем:
image
Можно записать также и id от брокерского, чтобы потом было проще менять в параметрах, пометив в комментарии, где иис, а где брокерский, после оставляя раскомменченным тот, который нужно запустить:
image
Теперь добавляем новый параметр в строку operations = client.get_operations(from_=account_data['start_date'], to=account_data['now_date']):
image
И все, запускаем вновь main.py

Вроде работает, получает другое количество операций:
image
image
но почему-то валится на том, что item_list из метода calculate_ave_buy_price_rub в файле main.py — пустой, соответственно деление на ноль и вылет (выводил этот список перед этим, пустой):
image
а с брокерским счетом все нормально (т.е. если в параметрах указать id брокерского):
image
Вот пока не пойму, с чем это связано и как можно исправить, если можно

Почему-то не могу изменить ответ. Автор исправил уже вчера ошибку с нулем, все работает, только 1 момент - добавлять новый параметр надо в 3 строки, а не только в одну:

Главная проблема Python API тинькоф инвестиций в том, что его нет.
Как нет, если вот человек пользуется?
А вот так: нет официального Python API — т.е. как только вы написали программу на стороннем API и ввели туда ваш код для доступа к счёту — сохранность ваших средств никто не гарантирует.
Бесит это.
А у тех API, которые сейчас существуют — очень плохо с документацией — нету даже тупо описания всех функций с примерами кода. И это при том, что о разработке API заявили 3 года назад — до сих пор всё осталось на уровне ВУЗовской самодеятельности, а не нормального API.
В репозитории сделай ссылку на статью эту, так ее будут находить и разбираться че почем.
Отличная статья. Только десктопное приложение я бы не рекомендовал делать. Лучше выгружать в гугл докс и рисовать дашборды на datastudio.google.com

Статья не совсем соответствует заголовку. Что же в итоге "скрывает" API и почему не сошлись цифры?

а с intelinvest не сравнивали? когда понял, что брокер лицо заинтересованное, перестал смотреть их отчёты.
На первый раз неплохо. Что странно:
1) Подсчет налогов например акций TCS — ave.buy in RUB стоит 0 руб, и tax base почему то посчитался не на exp.yield, а на всю сумму market value

2) Немного поправил формат даты файла и настроил отправку ежедневного отчета себе же в Телеграм в определенное время.
Выплаченный налог считает как-то неправильно.
Taxes payed — 141,00 ₽

Сам тинькофф в своём Excel говорит:
Налогооблагаемая база 3 088,28
Налоговая ставка, % 13
Налог к удержанию 401
Удержанный налог 252
Задолженность по налогу 149
Здорово, я как-то тоже исследовал api Тинькофф, чтобы разобраться с доходностью.
Выяснял, какие бумаги мне принесли доход/убыток когда-либо, сколько съели шорты Telsa (а казалось, что я в плюс наторговал :)) и т.д.

Отчет брокера меня пугал настолько, что было проще самому все распарсить, затолкать в базу, и получить табличку вида:

*скрин старый под рукой

tinkoff_bank не планируется добавить какую-нибудь настраиваемую группировку/сортировку/фильтрацию по своему портфелю? А то очень не удобно ориентировать в своем же портфеле
Пока не планировали. Но подумаем в этом направлении в будущем, чтобы сделать приложение еще удобнее. Спасибо за фидбэк!
Чтобы API ЦБ РФ не решил, что мы его ддосим, я поставил небольшую задержку

Можно еще исторические данные сохранить в БД SQLite и читать оттуда, чтобы сократить время формирования, и не ддосить api
А отсутствующие данные получать и добавлять в БД на будущее
При покупке валюты, даже если её не трогать, пишет expected tax со все суммы покупки. Хотя вроде должно с положительной разницы между текущей ценой и ценой покупки.

И очень хорошо бы добавить возможность добавлять в отчёт бумаги, которые уже проданы, чтобы понимать какой налог и прибыль были по ним.
denisshabr Проверил, у меня то же самое. Сначала решил, что действительно, какая-то ошибка, но потом пришёл к выводу, что всё-таки нет. Дело в разнице между тем, как считает брокер и как считает ЦБ. Например, я покупал доллар в среднем по биржевому курсу 74.35р, а сейчас он стоит 72.13, соответсвенно Тинькофф пишет, что у меня -2.98%. Однако, с точки зрения ЦБ, у которого ежедневный курс иногда существенно расходится с рыночным (особенно, когда валюта быстро расёт или падает в течение дня), получается, что я покупал доллар в среднем аж по 67.92, а сейчас он у него стоит 71.67, т.е. налог с меня всё равно сдерут, если я продам сейчас.
Автор, спасибо за интересную статью. Я думал, только я один таким занимаюсь… :)

Ребята из tinkoff_bank — подскажите, пожалуйста, раз вы тоже тут. А не планируется в API добавить метод для получения какой-то информации по инструменту? Например, по акции получить ее мультипликаторы.

Сейчас, по факту, только технический анализ можно делать при помощи свечек. Даже сектор пришлось парсить через curl веб-интерфейса, но его вы хотя бы на неавторизованной странице отдаете. А вот за мультипликаторами надо авторизовываться и тут уже через curl сложнее :)

Я понимаю, что изначально API для торговых ботов писалось, но как видите, многие через него еще пытаются аналитику делать и без мультипликаторов никуда. А скринеров на UI не хватает, иногда по свечкам через API удобнее строить анализ.

Спасибо!
Здравствуйте :)

Спасибо за идею. Примем к сведению и рассмотрим возможность реализации.
Подскажите, пожалуйста, о каких именно скринерах идет речь?
softandiron Делал экспорт истории операций для себя таким же образом в csv файл и затем экспортировал в гугл таблицы для анализа.
При некоторых расчетах операций использовал Банковское округление чисел (для модуля виртуальной торговли)

Посмотрите проект, возможно что то окажется полезным: github.com/mikhashev/pttrader

Может это уже и реализовано, а у меня старая версия. Мне кажется, что не хватает проверки статуса операции в create_operations_objects. В противном случае в отчете показываются и отмененные заявки, например.

Я б добавил чего-то типа

 for this_op in operations.payload.operations:
        if this_op.status != 'Done':
            continue

И чтоб не спамить ЦБ РФ я бы хранил все курсы на время работы скрипта

exch_rates_cache = dict()

def get_exch_rate(op_date):
    op_date = str(op_date.date())
    if op_date in exch_rates_cache.keys():
        rate = exch_rates_cache[op_date] 
    else:
        rate = ExchangeRates(op_date)
        time.sleep(delay_time)  # to prevent TimeOut error
        exch_rates_cache[op_date] = rate
    return rate

def calculate_operations_sums_rub(current_op_type):
    op_list = []
    for op in my_operations:
        if op.op_type == current_op_type:
            if op.op_payment != 0:
                if op.op_currency == 'RUB':
                    op_list.append(op.op_payment)
                elif op.op_currency in ('USD', 'EUR'):
                    rate = get_exch_rate(op.op_date)
                    op_list.append(op.op_payment * rate[op.op_currency].value)
                else:
                    print('error: unknown currency!')

    return sum(op_list)
Sign up to leave a comment.

Articles