Тинькофф Инвестиции — как получить отчет о доходах от иностранных дивидендов

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

Если у вас не подписана форма W8-BEN, то вы платите налог 30% и доплачивать ничего не нужно (хотя подать декларацию 3-НДФЛ все равно придется). Подробно о форме и о том, как платить меньше налогов, можно прочитать по ссылке.

Если же форма подписана и дивиденды приходят с вычетом 10%, то доплатить нужно 3%. Как это сделать? Давайте разбираться.

Шаг №1
Запрашиваем у брокера «Отчет о выплате доходов по ценным бумагам иностранных эмитентов за 2019 год». Сделать это можно в чате приложения брокера. Отчет можно запросить на электронную почту. Затягивать с этим шагом не стоит, так как брокер готовит отчет 15 дней, но, как правило, не укладывается в этот срок.

Дополнение от редакции Тинькофф Инвестиций: «Также одним из подтверждающих документов может выступать форма 1042-S. Брокер Тинькофф Инвестиции направляет своим клиентам ее на электронный адрес, как только к брокеру поступают данные от вышестоящего депозитария».

Шаг №2
Заполнить декларацию можно как в личном кабинете на сайте налоговой, так и в программе «Декларация 2019». Скачиваем на сайте налоговой. Устанавливаем на компьютер. Открываем.

Заполняем вкладку «Задание условий». По умолчанию выбрана нужная нам форма 3-НДФЛ.

Вносим из справки данные об этой выплате. Дата выплаты (именно выплаты, а не отсечки) и дата уплаты налога совпадают, код валюты — 840 (доллар США), выбираем код дохода (для дивидендов — 1010), вводим сумму выплаты и налог, удержанный в иностранном государстве. В данном случае, при выплате дивидендов TCS, налог не удерживался. Оставляем пустое поле.

Ну вот и всё по дивидендам. Нажимаем «+» для добавления информации и вводим следующую выплату. И так по всей справке.

Если у вас иностранный брокер, который не берет налог при продаже акций, то вам необходимо внести в декларацию сведения о доходе, полученном при продаже акций. Для этого вам необходимо запросить отчет брокера за 2019-й, а также отчет за год, в котором была покупка акции (если не в 2019 году). Нажимаем «+» и добавляем сведения. Но в отличие от сведений о дивидендах код дохода будет 1530, и в поле «Вычеты» ставим код 201 и указываем сумму вычета (сумму покупки акций) в рублях. Курс доллара на дату покупки можно узнать на сайте ЦБ РФ.

Заплатил налоги — спи спокойно.

Мнение автора может не совпадать с мнением редакции Тинькофф Инвестиций

Поиск решения

Чтобы внести больше ясности в процесс инвестирования, сделать этот процесс более осознанным, мне нужно:

  • Разобраться, как вычисляются значения, отображаемые в мобильном приложении
  • Выяснить реальные показатели эффективности портфеля
  • Узнать общие суммы налога и комиссий, которые я уплатил за всё время
  • Вычислить сумму, которую я могу вывести со счёта, после уплаты налогов при продаже портфеля

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

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

Здесь на выручку приходит Tinkoff API — средство для разработчиков ПО, позволяющее взаимодействовать с Тинькофф Инвестициями автоматизированными средствами.

Проблема только в том, что я не программист и с банковскими API раньше не работал. Видимо, пришла пора попробовать.

Знакомство с API

Находим официальную страницу Open API от Тинькофф:

[ ЕСТЬ ОТВЕТ ]  PredstaKaps.info

На странице предлагаются SDK: Java, C#, Go, NodeJS.

Ничего из того, что я умею. В основном, я делал DIY проекты на Arduino-подобных контроллерах с WiFi, проектировал и заказывал для своих электронных устройств печатные платы, делал небольшие одностраничные WEB-интерфейсы и телеграм-боты для взаимодействия с этими устройствами. , в основном я работал с железом и писал прошивки на Arduino Wiring (на основе C++).

Из представленного списка мне больше всего импонировал Python, я писал на нём что-то на уровне print(‘Hello World’) и давно хотел познакомиться поглубже. Поэтому, я решил, что буду делать проект с Тинькофф API на Python.

Для начала я нашёл статью на Хабре.

И видео от профессионального разработчика.

Это сильно помогло мне продвинуться на начальном этапе: понять, как получать данные с API.

Если коротко, работает это так:

  • Качаем последнюю версию Python
  • Устанавливаем и настраиваем его на своей машине
  • Устанавливаем через PIP библиотеку tinvest

Открываем редактор кода, например Idle, импортируем установленную библиотеку:

Создаём объект для дальнейшей работы с API:

В my_token выше подставлем свой API key, который получаем в личном кабинете брокера.

Я не стал пробовать в демо-счёте, сразу указал API своего реального портфеля.

Создаём объект с позициями портфеля:

positions = client. get_portfolio() Это сложный массив, который содержит информацию по каждой бумаге.

Создаём объект с операциями. Здесь указывается дата начала инвестирования и текущая дата в определённом формате.

Получаем рыночные курсы валют (понадобятся для дальнейших расчётов):

course_usd = client. get_market_orderbook(figi=’BBG0013HGFT4′, depth=20

course_eur = client. get_market_orderbook(figi=’BBG0013HJJ31′, depth=20)

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

currencies = client. get_portfolio_currencies()

Данные можно выводить сразу же через print, например:

for pos in positions. payload. positions:

print(‘name:’, pos. name)

print(‘ticker:’, pos. ticker)

print(‘balance:’, pos. balance)

print(‘currency:’, pos. average_position_price. currency)

print(‘price:’, pos. average_position_price. value)

Но наша цель — это Excel таблица. Для её формирования я выбрал библиотеку XlsxWriter:

Файлик с excel появляется в папке с программной. Если файл с таким названием уже есть в папке — он перезапишется. Поэтому, я сделал, чтобы в названии файла была текущая дата, так удобно потом сравнивать отчёты за разные дни / месяцы:

ecxelFileName = ‘tinkoffReport_’ + today + ‘. xlsx’

workbook = xlsxwriter. Workbook(ecxelFileName)

worksheet = workbook. add_worksheet()

Так, на этом этапе, у меня получилась небольшая программка, создающая таблицу с базовой информацией по бумагам, получаемой по API, а именно:

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

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

Писалось всё в Idle, выглядело как-то так: (НЕ ПОВТОРЯТЬ!)

Подглядывая в проекты других разработчиков на Python, я тогда ещё мало что понимал, но было очевидным, что их проекты пишутся совсем по-другому, и мне придётся менять структуру в корне.

Я решил переписать всё заново, как положено, и в более удобной среде разработки.

Знакомство с Python

В качестве более продвинутой среды, ребята с работы посоветовали PyCharm.

С ним дело пошло гораздо продуктивнее, среда автоматически дрессирует писать в соответствии с PEP8 (стандарт оформления кода).

Просто прошерстил все его статьи по питону сверху вниз, и потом периодически обращался за подробностями.

Структура программы

Я решил разбить проект на 3 модуля (файлика. py) и отдельный файлик. txt с данными аккаунта.

Модуль main. py — основной модуль программы, который мы запускаем. В нём создаются классы объектов, происходят вычисления и формируются объекты, заполняясь полученными данными. Парсит только курсы валют по разным датам с API ЦБ РФ.

Модуль data_parser. py — содержет всего две функции, первая парсит данные аккаунта из текстового файла, а вторая из Тинькофф Инвестиций и больше программа к этому не возвращается.

Модуль excel_builder. py — большой модуль, который ничего не считает, только берёт данные из main. py и строит огромную красивую таблицу.

— Позиции

В левой части таблицы выводится информация по текущему портфелю:

[ ЕСТЬ ОТВЕТ ]  Лимит, размер комиссии за снятие и перевод, банки-партнеры

Параметры (базовые, из API):

name — название бумаги

ticker — тикер

balance — количество бумаг в портфеле

currency — валюта

ave. price — средняя цена покупки в валюте

exp. yield — ожидаемая прибыль с продажи (без учёта налогов и комиссий)

Тут, кстати, стало понятно, откуда взялась сумма 955 644 руб (+12,21%) на главном экране приложения — это как раз и есть суммарный exp. yield в рублях по рыночному курсу.

Параметры, посчитанные на основе базовых:

market price — текущая рыночная цена одной бумаги (ave. price + exp. yield)

% change — процент изменения стоимости актива (market_price / ave. price) * 100) — 100)

market value — текущая рыночная стоимость всей позиции (market_price * balance)

market value RUB — рыночная стоимость всей позиции в пересчёте на рубли по текущему рыночному (не ЦБ) курсу

ave. % — среднее арифметическое всех % change. Сейчас я понимаю, что это бесполезный параметр. Надо было считать по-другому, возможно исправлю в следующих версиях программы.

total value: — рыночная стоимость портфеля в рублях (сумма всех market value RUB)

Как видим из скриншота, total value составляет 8 782 836, что близко к значению на главном экране приложения: 8 782 160р, но не соответствует ему точь-в-точь. Отклонение составляет 0,0077%. Не существенно, но чем вызвано, я не совсем понимаю. Если есть идеи по исправлению — напишите, пожалуйста, в комментариях.

Дальше — интереснее!

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

CB value RUB — стоимость позиции в рублях по курсу ЦБ на сегодня.

Внизу считается сумма, которая у меня составила 8 749 045 — это оценка стоимости моего портфеля, с точки зрения ЦБ, и она отличается от рыночной стоимости на 33 791 руб, что вполне нормально.

ave. buy in RUB — средняя стоимость покупки в рублях по курсу ЦБ на дату покупки. Это важный параметр для последующего расчёта налога.

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

Чтобы решить эту задачу, я придумал сделать для каждой позиции упорядоченный список (массив). Программа пробегает по всем операциям покупки, находя операции с figi данной бумаги, и каждая покупка добавляет в список количество ячеек, соответствующее количеству приобретённых бумаг. Каждая ячейка содержит значение, соответствующее цене покупки в рублях по курсу ЦБ на дату операции. А каждая продажа удаляет нужное количество ячеек из начала списка. Затем считается среднее значение по оставшимся ячейкам, так получается средняя цена покупки в рублях по курсу ЦБ.

Был небольшой подвох, связанный с тем, что в списке операций от Tinkoff API есть не только выполненные, но и нулевые операции, которые пришлось отсеивать.

Чтобы API ЦБ РФ не решил, что мы его ддосим, я поставил небольшую задержку. В итоге, всё считается как надо, но этот этап обрабатывается ощутимо медленно. Чтобы обработались мои 15 позиций и 430 операций, приходится ждать около 1 минуты.

Наверняка это можно как-то оптимизировать, но, в принципе, мы не торопимся.

Разобравшись с самым сложным этапом, можно составить следующие колоночки:

sum. buy in RUB — сумма покупки позиции в рублях по курсу ЦБ (ave. buy in RUB * balance)

Внизу считается сумма, которая составила 7 178 123 — на такую сумму, по мнению ЦБ, я приобрёл текущие активы.

tax base — налоговая база (sum. buy in RUB — CB value RUB)

expected tax — ожидаемый налог по ставке 13%, который нам насчитают, если продать бумагу сейчас.

Внизу получилась сумма: 207 145 руб. — такой налог будет удержан, если я продам весь портфель сейчас.

— Операции

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

[ ЕСТЬ ОТВЕТ ]  Please Wait...

Под каждой колоночкой считается сумма. Это как раз то, что нам не покажет брокер. И здесь есть кое-что интересное.

Теперь мы можем сравнить сумму внесённых средств и сумму выведенных (в переводе на рубли по курсу ЦБ)

Ещё можно посчитать сумму всех купонов и дивидендов, а также, внимание:

все комиссии, уплаченные брокеру, и все налоги, удержанные брокером!

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

Теперь можно сделать из них выводы.

— Аналитика

Я впихнул этот маленький раздел прямо под таблицей с позициями.

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

Кстати, что касается дат, я не учитывал часовые пояса, и это может где-то выплыть.

PayIn — PayOut — разница между внесёнными на счёт средствами и выведенными по курсу ЦБ на дату операции. У меня это получилось 5 843 172 руб — столько средств я задонатил на свой счёт.

Commissions payed — сумма всех комиссий, уплаченных брокеру. У меня она составила 17 315 руб, из которых 2200 руб — это 2% побор за участие в IPO Сегежа, в которое я впутался пару дней назад. Если не принимать его во внимание, то за всё время я заплатил всего около 15 000 руб комиссий, что, я считаю, достаточно мало. На тарифе Премиум при покупке $1000 я плачу всего 18,22 руб комиссии.

Кстати, из-за появления в портфеле позиции «Сегежа» в первый день после IPO программа не могла выполниться и выдавала ошибку. На следующий день по бумаге с API стали приходить нормальные данные и программа снова заработала.

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

Если что, форма W8BEN, у меня, на данный момент, по некоторым причинам, не действует.

Итого, в российский бюджет я уже уплатил 117 631 руб, и, как было посчитано выше, мне предстоит уплатить ещё порядка 207К, если я зафиксирую портфель сейчас.

Здесь ещё раз уточню: налог считается в рублях, и если мы купили бумагу за $100 при курсе ЦБ 60р за доллар, а через год, когда доллар стал стоить 80р, продали эту бумагу за те же $100, мы должны будем заплатить налог 260р за счёт курсовой разницы, потому что, с точки зрения ЦБ, мы купили бумагу за 6000р, а продали за 8000р, хотя ни одного $ мы не заработали.

Clean portfolio — стоимость нашего портфеля по текущему рыночному курсу за вычетом предстоящего налога. Это те деньги, которые мы реально сможем вывести, если зафиксируем весь портфель сейчас. Сюда ещё можно накинуть комиссию брокера, но она варьируется, и я не стал её хардкодить. Навскидку, если у меня портфель примерно $116000 и тариф Премиум, комиссия за продажу всех активов получится где-то примерно 2000р. И ещё почти столько же, если я захочу поменять в рубли. Если не ошибаюсь, в Тинькофф Инвестициях комиссия на всё одинаковая.

Profit — сумма, которую мы заработаем при фиксации портфеля сегодня. Считается как Clean portfolio — (PayIn — PayOut), т. , полученные средства, очищенные от налогов, минус вложенные средства. У меня получилась сумма 2 732 519, что похоже на сумму «Доход за всё время» из раздела «Портфельная аналитика» в мобильном приложении, только за вычетом налога 207К. Расхождение около 2500 руб. Не знаю, насколько это здесь существенно.

В общем-то, это пока всё, что я сделал.

  • За депозитарные расписки банк-депозитарий взимает дополнительную комиссию за их учет и хранение. Эта сумма не является налогом! Комиссия только уменьшает сумму, с которой вы должны заплатить налог.
  • Если ваши акции находились в РЕПО, то брокер самостоятельно удержит налог. Ничего доплачивать не потребуется.

Внизу отчета находим «Справочная информация по дивидендам / купонам».

Оцените статью
Всё о денежных переводах и платежных системах
Добавить комментарий

Adblock
detector