Comments 112
Я слишком в код не всматривался (только на предмет бэкдоров ;)) поэтому вопрос, вы корректно обсчитываете сценарии в которых в рассчетный период осуществлялся вывод средств? Я выводил и когда был в плюсах и когда в минусах. Последний раз когда выводил платил удержку в 50% с суммы вывода, мне аж икалось.
платил удержку в 50%
Имеется ввиду удержанный налог? В таком случае попробуйте выводить меньшую сумму. Если брокер при выводе не может удержать весь налог, он будет удерживать только 13% от суммы вывода.
Пример:
Ваш профит 100000, налог 13000.
Вы пытаетесь вывести 15000, брокер удержит 13000, вам на счёт поступит 2000
Если вывести 10000, то, т.к. брокер не может удержать 13000, он удержит только 1300 (13% от 10000), на счёт поступит 8700. Оставшиеся 5000 можно вывести следующей транзакцией, с которых удержится только 650.
Оставшийся налог 13000-1300-650=11050 вы заплатите в конце года, либо уже при следующих выводах.
В большинстве запросов к API можно выбрать счёт.
Id cчета можно получить запросом GET /user/accounts (https://tinkoffcreditsystems.github.io/invest-openapi/swagger-ui/)
UPD. У автора в настройках вроде такого варианта не увидел. По умолчанию Тинькофф берёт обычный счёт, не ИИС.
Код автора никак не изменить, чтобы инфу по ИИС такую же получить? Или это уже дело в библиотеке tinvest?
Сначала нужно получить 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')
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. В конкурсную массу профессионального участника рынка ценных бумаг, управляющей компании, клиринговой организации не включается имущество их клиентов, находящееся на специальном брокерском счете, торговом счете, клиринговом счете, специальном депозитарном счете, транзитном счете, счете депо, транзитном счете депо, лицевом счете в реестре владельцев ценных бумаг, отдельном банковском счете, открытом для расчетов по операциям, связанным с доверительным управлением, а также находящееся в доверительном управлении управляющей компании, клиринговой организации или переданное в оплату инвестиционных паев иное имущество.
А перевод на другой счет так и на обычном тарифе без комиссии.
То есть выводим с Тинька в какой-нибудь условный Сбер или Альфу (смотря чья карта есть) и дальше уже в их отделениях забираем наличные.
Касательно факта владения бумагами — насколько мне известно, любые активы которые я покупаю с помощью Тинькоф Инвестиций как раз-таки записываются на мое имя. Я делал выписку о списке депозитарных счетов на мое имя и там есть все активы, как валютные, так и рублевые
Может быть полезным уточнением, но межбанк у них бесплатный, сталкивался при оформлении ипотеки в другом банке. И на пользование СБП лимитов не было, только при переводе свыше 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, просто там реже сбои)
Более 5 лет. Также есть другие варианты применения нулевой ставки (гарант):
- Акции были приобретены до 2011 года, при этом не более половины объектов собственности эмитента акций зарегистрированы в иностранных государствах.
- Акции выпущены организацией, представляющей высокотехнологичный производящий сектор экономики. При этом срок владения такой акцией составляет не менее 1 года и 1 дня.
Ну и много других вариантов описаны в статьях 284.* НК РФ
Ситуация — я покупаю акцию по цене 50 долларов. Доллар стоит 50 рублей. Проходит 3 года — стоимость акции вырастает до 60 долларов, доллар вырастает до 60 рублей. Все цены условны.
Изначально в рублях эта акция стоила 2500р. Сейчас она стоит 3600р. Из них 500р то сам прирост акции, а 600р это рост стоимости доллара. Или наоборот, тут уже сложная математика для меня пока что.
Вопрос: должен ли я что-то заплатить в качестве налога? Или весь прирост независимо от источника не будет облагаться налогом?
tinkoff_bank кстати, почему так нельзя?
А, да. Еще при переходе в инвестиции он почему-то предлагает мне «собрать портфель», хотя у меня уже там давно активов на много денег.
Может его тоже выложить в паблик, может кому то пригодиться.
как, при доходе в 1М с меня удержали налогов в 250К?Налог удерживается с прибыли, но не возвращается при убытках. То есть например вы продали акций газпрома с прибылью 2 млн, и заплатили с них налог 260 т.р., и затем продали акций лукойла с убытком 1 млн, и заплатили 0 рублей налога, итого ваша общая прибыль 1 млн, а налога уплачено 260 т.р.
Налог удерживается в конце года, и если в году были прибыли и убытки по отдельным сделкам, убытки вполне будут вычитаться из налогооблагаемой базы.
Если сделки из вашего примера закрыты в один год, то не будет 260 налога, будет 130.
В момент закрытия сделки никаких налогов не удерживается, так что "продали и заплатили налог" не совсем корректное описание вообще.
Там вся радость в расчетах, за акции в долларах, я же говорю что если мотреть по сделкам то все выглядит корректно, а если взять общий профит и сумму налогов то получается больше. Думаю я все же доберусь до анализа всех сделок и пойму где собака порылась.
Возможно, в вашем случае, например IPO-шки принесли 2 ляма, а торговля на акциях условного яндекса убыток в лям
Тк это разные категории — убыток снизит налог только по успешным торговлям с акциями
Итого с айпио вы платите 260, общий доход всего лям, и в следующем году 130тысяч убытка сможете зачесть в успешную торговлю акциями яндекса
Я для фридома с налогами ковырялся, если много отчетов от тинькова будет, смогу и его считать. Вот мой бот для фридома: t.me/Nalogusbot
А в чем риск?
Например, недавно Тиньков лежал и не было возможности совершать операции. Таким образом вы ничего не сможете сделать в случае чего.
Конкретно у меня были проблемы с продажей валюты в начале утренней сессии через одного желтого брокера с полгода назад (заявки тупо не проходили). Также были неприятности с тем, что однажды не смог выйти из компании Phizer, когда пошли негативные новости ну и получил убыток. Желтый брокек/банк в этот момент решил провести плановые работы. Теоретически можно не успет купить актив по самой привлекательной цене изза таких вот моментов.
Не все так категорично, нужно тут разделять трейдинг и инвестиции. Если у вас от возможности закрыть позиции в течение дня критически зависит прибыль -- вы трейдер. Для инвестора такая проблема неакутальна, он через месяц зайдет и посмотрит на счет, а про сбой -- в новостях прочитает на следующий день после сбоя.
Похоже в тот день тиньков решил постричь лосей на невнимательности, поменял порядок валют в выпадающем списке на пополнение, обычно там рубли всегда были первыми.
Я думаю это зависит от того, какой общий объем сбережений. Если сто мультов, почему бы 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)
Советую делать периодический чек с налоговым отчетом, выгружаемым из ЛК — на всякий)
Первая мысль что-то «унавожено» :)))
Это мем. По смыслу, кстати, противоположный тому, что хотел сказать @EgoPingvina
Почитал про этот, занятно. Получается мем надо употреблять когда вроде и уважаешь, но с сильным сарказмом. Дурдом! Немудрено что автор перепутал.
Блин, лучше словами…
Противоположно его, по-моему, мало кто воспринимает.
Просто. Оставлю. Это. Здесь.
У меня была ошибка в день появления бумаги на бирже после IPO.
Ещё может быть ошибка, если бумага торгуется в валюте, отличной от USD и EUR.
Кстати, у меня в портфеле не оказалось бумаг, номинированных в EUR, поэтому с ними программа не тестировалась. По коду всё писал так же, как для USD, но мог где-то проглядеть.
UPD: Пользователи на GitHub заметили ошибку «деление на 0», которая появляется, если бумага досталась вам по нулевой цене.
Обязательно исправлю в будущей версии.
Некоторые думают, что из-за этого не придётся подавать декларацию на дивиденды, а на самом деле при первой же камералке вам придётся выплатить налог по полной программе и в России и в США
Многие думают, что не подписывая форму W8BEN не придётся подавать декларацию в России, что брокер просто спишет полный нало в пользу Америки.
Но по факту форма W8BEN — это соглашение об избежании двойного налогооблажения, а это означает, что не подписывая форму вы обязаны заплатить полный налог и в России и в Америке.
Мне попадалась информация, что апи Тинькова не отдает данные по премиумным бумагам. Сейчас это актуально или уже поправили?
Если есть идеи по исправлению
При вычислениях (в том числе сложении и умножении) с валютой всегда оперируйте целочисленными значениями «копеек», а не дробными значениями «рублей». При необходимости вывода в дробном виде — делите на сто непосредственно перед выводом.
Почему: 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")
Затем запускаем main.py и потом можно нажать ctrl+c, чтобы остановить выполнение после получения нужных данных, а именно:
Нам нужен broker_account_id от TinkoffIis, записываем его просто в код, а добавленную строчку удаляем:
Можно записать также и id от брокерского, чтобы потом было проще менять в параметрах, пометив в комментарии, где иис, а где брокерский, после оставляя раскомменченным тот, который нужно запустить:
Теперь добавляем новый параметр в строку operations = client.get_operations(from_=account_data['start_date'], to=account_data['now_date']):
И все, запускаем вновь main.py
Вроде работает, получает другое количество операций:
но почему-то валится на том, что item_list из метода calculate_ave_buy_price_rub в файле main.py — пустой, соответственно деление на ноль и вылет (выводил этот список перед этим, пустой):
а с брокерским счетом все нормально (т.е. если в параметрах указать id брокерского):
Вот пока не пойму, с чем это связано и как можно исправить, если можно
Как нет, если вот человек пользуется?
А вот так: нет официального Python API — т.е. как только вы написали программу на стороннем API и ввели туда ваш код для доступа к счёту — сохранность ваших средств никто не гарантирует.
Бесит это.
А у тех API, которые сейчас существуют — очень плохо с документацией — нету даже тупо описания всех функций с примерами кода. И это при том, что о разработке API заявили 3 года назад — до сих пор всё осталось на уровне ВУЗовской самодеятельности, а не нормального API.
Статья не совсем соответствует заголовку. Что же в итоге "скрывает" API и почему не сошлись цифры?
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
Выяснял, какие бумаги мне принесли доход/убыток когда-либо, сколько съели шорты Telsa (а казалось, что я в плюс наторговал :)) и т.д.
Отчет брокера меня пугал настолько, что было проще самому все распарсить, затолкать в базу, и получить табличку вида:
*скрин старый под рукой
tinkoff_bank не планируется добавить какую-нибудь настраиваемую группировку/сортировку/фильтрацию по своему портфелю? А то очень не удобно ориентировать в своем же портфеле
Чтобы API ЦБ РФ не решил, что мы его ддосим, я поставил небольшую задержку
Можно еще исторические данные сохранить в БД SQLite и читать оттуда, чтобы сократить время формирования, и не ддосить api
А отсутствующие данные получать и добавлять в БД на будущее
И очень хорошо бы добавить возможность добавлять в отчёт бумаги, которые уже проданы, чтобы понимать какой налог и прибыль были по ним.
Ребята из tinkoff_bank — подскажите, пожалуйста, раз вы тоже тут. А не планируется в API добавить метод для получения какой-то информации по инструменту? Например, по акции получить ее мультипликаторы.
Сейчас, по факту, только технический анализ можно делать при помощи свечек. Даже сектор пришлось парсить через curl веб-интерфейса, но его вы хотя бы на неавторизованной странице отдаете. А вот за мультипликаторами надо авторизовываться и тут уже через curl сложнее :)
Я понимаю, что изначально API для торговых ботов писалось, но как видите, многие через него еще пытаются аналитику делать и без мультипликаторов никуда. А скринеров на UI не хватает, иногда по свечкам через API удобнее строить анализ.
Спасибо!
При некоторых расчетах операций использовал Банковское округление чисел (для модуля виртуальной торговли)
Посмотрите проект, возможно что то окажется полезным: 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)
Что недоговаривают Тинькофф Инвестиции. Вытаскиваем все данные по портфелю через API в большую таблицу Excel