Избранное трейдера Андрей из Сибири
Добрый вечер!
Уже 8 апреля, а это значит, что скоро закончится прием налоговых деклараций – 30 апреля. По подаче декларации на возврат НДФЛ от внесенных на ИИС средств я уже писал недавно, сейчас только жду уведомление от налоговой.
Второй важный вопрос по декларированию доходов инвестора – самостоятельная уплата НДФЛ по дивидендам компаний, по которым ваш брокер не является налоговым агентом и не уплачивает налог 13% с дивидендов за вас. В этом случае дивиденды к вам на счет приходят неочищенными от налогов и вам самим нужно заплатить налог. Об этом будет сегодняшний пост.
Такая потребность часто возникает в случае, если компания зарегистрирована за рубежом или в оффшорных зонах. Лично мой брокер по ним не удерживает НДФЛ. Примеры таких компаний – Полиметалл, Русал, Яндекс.
Поэтому уточните лишний раз у своего брокера, удерживает ли он НДФЛ по дивидендам от этих компаний. Если нет, и вы об этом не будете знать, то вам могут начать начислять пени за неуплату налогов.
Конечно, часто налоговой пофиг на ваши копейки. Я, когда изучал эту тему, часто наталкивался на комментарии людей, которые все подали и оплатили налог как положено, но налоговая им все возвращала обратно, думая, что они уплатили излишний налог. Может потому, что это необычные пока для России декларации (в отличие от всяких имущественных и социальных) и операционисты ошибаются с ними. В любом случае, я предпочитаю не быть плохишом и делать все как надо, если нет путей добросовестной оптимизации налогов.
Итак, расскажу пошагово, как самостоятельно уплатить налог с дивидендов.
Это все делает онлайн на сайте Налог.ру. Как там зарегистрироваться и как получить электронную цифровую подпись здесь не буду описывать, т.к. писал уже в посте «Вычет по ИИС (тип А). Инструкция».
Сначала заходим в личный кабинет на сайте Налог.ру и выбираем «Жизненные ситуации» → «Подать декларацию 3-НДФЛ» → «Заполнить онлайн».
1. Вкладка «Данные» — отвечаем на 2 простых вопроса и жмем «Далее».
2. Вкладка «Доходы» — удаляем все лишние источники дохода в пределах РФ и выбираем «За пределами РФ» → «Добавить источник дохода» и заполняем данные о компании, стране ее регистрации. В графе «Вид дохода» выбираем 1010-дивиденды. В поле «Предоставить налоговый вычет» выбираем «Не предоставлять». Заполняем сумму дохода в валюте и дату начисления на брокерский счет (эту информацию смотрите в отчете брокера, предварительно запросив у него). Далее выбираем валюту, в которой пришли дивиденды (код доллара США — 840) и ставим галочку у «Определить курс автоматически», чтобы вручную не переводить доллары в рубли на дату поступления дивидендов. Жмем «Далее».
TICER = "SBER"; CLASS_CODE = "TQBR"; FilePath = getScriptPath() .. "\\export.txt";--путь к файлу save = false;--сохранять данные в файл если false нет, true да f = nil; stopped = false; t_id = nil H = -1; M = -1; VSELL = 0; VBUY = 0; CDelta = 0; CountTrans = 0; PriceTrans = 0.0; t = ""; function OnInit() CountTrans = 0; if save then f = io.open(FilePath,"w"); end CreateTable(); end function main() while not stopped do if IsWindowClosed(t_id) then stopped = true; end sleep(10); end end function CreateTable() t_id = AllocTable(); AddColumn(t_id, 0, "Время", true, QTABLE_STRING_TYPE, 10); AddColumn(t_id, 1, "BUY", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 2, "SELL", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 3, "Дельта V", true, QTABLE_INT_TYPE, 10); AddColumn(t_id, 4, "AVG Цена", true, QTABLE_DOUBLE_TYPE, 15); AddColumn(t_id, 5, "Накопленная Дельта", true, QTABLE_INT_TYPE, 15); AddColumn(t_id, 6, "Кол-во сделок", true, QTABLE_DOUBLE_TYPE, 12); tab = CreateWindow(t_id); local NAME = tostring(getParamEx(CLASS_CODE,TICER,"LONGNAME").param_image); SetWindowCaption(t_id, TICER.." ("..NAME..") Баланс покупок/продаж"); SetTableNotificationCallback(t_id, EventCallBack); end function Calc(alltrade) if bit.test(alltrade.flags, 0) then VSELL = VSELL+alltrade.qty; --Продажа else VBUY = VBUY+alltrade.qty; end CountTrans = CountTrans+1; PriceTrans = PriceTrans+alltrade.price; end function OnAllTrade(alltrade) if alltrade.sec_code == TICER then local Rows, Col = GetTableSize(t_id); if H==-1 or H~= alltrade.datetime.hour then H = alltrade.datetime.hour; M = alltrade.datetime.min; t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min); end if M==alltrade.datetime.min then Calc(alltrade); else M=alltrade.datetime.min; InsertRow(t_id, -1); local Delta = VBUY-VSELL; Price = PriceTrans/CountTrans; SetCell(t_id, Rows, 6, tostring(CountTrans)); SetCell(t_id, Rows, 0, t); SetCell(t_id, Rows, 1, tostring(VBUY)); SetCell(t_id, Rows, 2, tostring(VSELL)); SetCell(t_id, Rows, 3, tostring(Delta)); local SEC_SCALE = tostring(getParamEx(CLASS_CODE,TICER,"SEC_SCALE").param_value); SEC_SCALE = string.format("%.0f",SEC_SCALE); SetCell(t_id, Rows, 4, string.format("%."..SEC_SCALE.."f", tostring(Price))); if Rows>=2 then local OldPrice = tonumber(GetCell(t_id,Rows-1,4).image); if OldPrice>Price then Red(Rows,4); else Green(Rows,4); end CDelta = tonumber(GetCell(t_id,Rows-1,5).image); CDelta = CDelta + Delta; else CDelta = Delta; end SetCell(t_id, Rows, 5, tostring(CDelta)); if Delta<0 then Red(Rows,3); end if Delta>0 then Green(Rows,3); end if CDelta<0 then Red(Rows,5); end if CDelta>0 then Green(Rows,5); end if save then local Str = tostring(H)..";"..tostring(M)..";"..tostring(VBUY)..";"..tostring(VSELL)..";" ..tostring(Delta)..";"..tostring(Price)..";"..tostring(CDelta); Str=Str.."\n"; SaveFile(Str); end t = tostring(alltrade.datetime.hour)..":"..tostring(alltrade.datetime.min); VBUY = 0;VSELL = 0; PriceTrans = 0; CountTrans = 0; Calc(alltrade); end end --if alltrade.sec_code == TICER then end function SaveFile(Str) if f ~= nil then f:write(Str); f:flush(); end end function Red(row,col) SetColor(t_id, row, col, RGB(255,0,0), RGB(0,0,0), RGB(255,0,0), RGB(0,0,0)); end function Yellow(row,col) SetColor(t_id, row, col, RGB(240,240,0), RGB(0,0,0), RGB(240,240,0), RGB(0,0,0)); end function Green(row,col) SetColor(t_id, row, col, RGB(0,200,0), RGB(0,0,0), RGB(0,200,0), RGB(0,0,0)); end function EventCallBack(t_id, msg, par1, par2) if msg==QTABLE_CLOSE then OnStop(); end; end function OnStop(s) if f ~= nil then f:close(); end if t_id ~= nil then DestroyTable (t_id); end; stopped = true; end
Утвержден Перечень из 646 системообразующих организаций, которых будут спасать.
Из того, что опубликовано, в него вошли:
12 ПАО «НОВАТЭК»
16 ПАО «Газпром нефть»
17 ПАО «Газпром»
18 ПАО «ЛУКОЙЛ»
19 ПАО «Нефтяная компания „Роснефть“
20 ПАО „Сургутнефтегаз“
21 ПАО „Татнефть“ имени В.Д.Шашина
38 ПАО „Мечел“
45 АО „Московская областная энергосетевая компания“
62 ПАО „Интер Рао“
63 ПАО „Квадра-генерирующая компания“
64 ПАО „Россети“
65 ПАО „Русгидро“
67 ПАО „ТГК-14“
68 ПАО „Территориальная генерирующая компания №2“
69 ПАО „Энел Россия“
70 ПАО „Юнипро“
72 ПАО „Транснефть“
94 ПАО „Трансконтейнер“
100 ПАО „Авиакомпания “ЮТэйр»
102 ПАО «Аэрофлот»
130 ПАО «Новороссийский морской торговый порт»
PS
Банки и страховые спасает ЦБ
Все мы знаем, что зарубежные брокеры не являются налоговыми агентами в РФ, соответственно, отчитываться по доходам и платить налоги с них мы должны самостоятельно. Вопрос отчитываться или нет у меня не стоял, поэтому, чтобы не тратить каждый год уйму времени на достаточно трудоемкие расчеты, я написал скрипт, который берет отчеты Interactive Brokers и формирует на основе них пояснительную записку со всеми пояснениями и расчетами для налоговой. Вам останется только приложить этот файл к декларации 3-НДФЛ, а в нее саму внести лишь два пункта (см. ниже).
Ограничения по применениюПоскольку я занимаюсь долгосрочными инвестициями, я не использую такие инструменты, как фьючерсы, опционы, а также никогда не использую плечо и сделки SHORT. В связи с этим, такие операции скриптом не поддерживаются. Если у кого-то есть желание — могут дописать сами.
Подготовка к использованию