Избранное трейдера KSN
Этих супербенефициаров несложно найти — Русагро, Мечел, НКНХ, Русал/ЭН+, Газпром, все нефтяные ВИНК, золотодобытчики(особенно самый дешевый к капиталу Петропавловск), дешевые тарифные компании внутреннего рынка с большими дивидендами(энергосбыты, сети). Есть и самый простой вариант — индексный фонд РТС, на фоне укрепления рубля и большой доли сырьевиков — он будет одним из первых по доходности среди страновых индексов.
Пополнение карты Сбера с карты ВТБ с наименьшими затратами. Полная инструкция.
Итак, друзья мои, сегодня я намереваюсь причинить пользу тем, кто любит пользоваться банковскими услугами, не вставая с дивана.
Эта статья содержит мой бесценный опыт использования диванно-банковских технологий и является завершающей, ибо все квесты мной пройдены и никаких неясностей не осталось (как мне кажется на сей момент).
Прошло 1,5 года с момента прошлого поста и мир действительно пошел по данному сценарию.
Что уже реализовалось:
— валюты-убежища активно обесцениваются инфляцией и отрицательными ставками.
— сырье раллирует, золото в том числе.
— держатели кеша и надежных облигаций западных стран в минусе, не говоря об упущенной выгоде.
— шорты западных и российских индексов не были выгодными.
Часть прогноза еще не реализовалась, но и не отменилась:
— нефть должна сильно подорожать. Вдобавок к инфляции доллара добавились снижение инвестиций в отрасль и прошедший кризис перепроизводства.
— рубль упал, РТС несильно вырос, однако это все равно вопрос времени — капитал компаний вырос, прибыль сильно выросла, доллар обесценился — а цена в долларах та же. Такой дисбаланс не может долго сохранятся, пружина сжимается и итог может быть только один — мощное ралли в РТС. Рубль вероятно тоже укрепится к доллару, как тот уже упал ко всем сырьевым валютам на доковидные уровни. Нужно сказать спасибо Байдену и Трампу, которые запугиванием санкциями держат нашу валюту дешевле ее равновесной ценности, чем делает российский экспорт сверхрентабельным и повышает конкурентоспособность наших производителей. Этот процесс с некоторым лагом непременно проявится в росте как рынка, так и экономики.
— в Китае процесс замедления пошел — рост юаня и кризис перевозок сильно подняли в цене стоимость его товаров, а рост сырья повысил издержки — его конкурентоспособность падает. Поскольку с финансами в Китае все довольно плохо — в банковской системе дыра и валютный курс несвободный — когда-нибудь произойдет крупная девальвация. Но такие масштабные процессы могут очень долго протекать в скрытом виде и проявляются обычно тогда, когда все забудут с чего все началось.
— Американские индексы выросли, однако рост этот не был обеспечен сопоставимым ростом качества его компаний, а был вызван монетарными методами. Финансовые власти США(как и многие люди в мире) уверовали в незыблемость доллара и что любое безумие ему сойдет с рук — печататают деньги даже на такие противоречащие здравому смыслу вещи, как устранение естественных коррекций безумных хаев рынка и стимулирование граждан не работать большими пособиями. За все это придется заплатить — а платить добровольно(сильно повышать ставку, рубить все пузыри, увеличивать налоги и резать социалку) они конечно не захотят, поэтому все это принудительно сделает инфляция.
👨🏻💼 Сегодня хочу остановиться над системой налогообложения доходов, полученных от инвестирования.
«Лучший способ рассказать детям о налогах — съесть 13% от их мороженого» ©
По большому счёту, ничего сложного в налогах нет, но почему-то большинство начинающих инвесторов этой теме не уделяют должного внимания, а в некоторых случаях знания в этой сфере очень поверхностные, хотя есть особенности, которые могут значительно сократить издержки. Об этих особенностях я и предлагаю поговорить более подробно.
Налогообложение буду рассматривать с точки зрения обычного Гражданина РФ (резидента), совершающего сделки с помощью брокера на бирже. С точки зрения нерезидентов смысл тот же, только ставки, как правило, выше.
Итак, в нашей стране в обычной ситуации доход от инвестиций облагается налогом на доходы физических лиц в размере
Надоело логиниться в квик каждый день по 10 раз, всё время за логином-паролем лазить в файл и копипастить. Сделал скрипт, к-й это автоматизирует. Работает на javascript, так что от версии Windows зависеть не должно.
Сам скрипт кладётся в файл типа C:\Util\Js\Q.js или куда угодно, только не у всех на виду. На этот скрипт делается ярлык, он кладётся на рабочий стол куда-то в угол, и ему прописывается горячая клавиша типа Ctrl-Alt-X или любая другая буква. После этого вы запускаете квик, появляется окно логина, нажимаете Ctrl-Alt-X и через полсекунды оно срабатывает. Важно, что ярлык должен быть на рабочем столе, иначе горячая клавиша не работает.
Вообще вводить данные в другую программу можно двумя способами: copy&paste и эмуляция клавиш. Я в данном случае пошёл по второму пути, хотя и первый тоже реализуем и даже чем-то лучше, т.к. там не надо парится с языком. Из-за этого, если вы хотите использовать этот скрипт, нужно проверить ряд моментов и при необходимости внести исправления.
⦁ В варианте, к-й я выкладываю, логин/пароль должны быть прописаны прямо в скрипте, но можно и читать из файла. У меня дома рабочий вариант вообще ищет их в rtf-файле где много всяких данных. Если логин/пароль положить во внешний файл, то их можно конечно и закодировать.
⦁ Чтобы отработало правильно, надо чтобы текущий язык ввода (по сути язык ввода по умолчанию в системе) в квике был русский. Если это не так, то вначале надо поменять bEngSystem=true
⦁ У меня логин русский, а пароль английский, так что между ними производится переключение клавиатуры. Если у вас что угодно из этого не так, надо в нужных местах убрать или добавить переменную LangSwitch, к-я содержит клавиши «Alt-Shift». Если у вас опять же язык переключается по-другому, там надо прописать другие клавиши.
⦁ У меня вводится и логин и пароль. Если у вас вводится только пароль, то поменять тоже нужно и не сложно.
В общем, можно было бы написать более универсальную версию, чтобы определяеть, когда надо переключать языки автоматом, но мне не нужно, а кому надо разберутся. Или же можно переписать через copy&paste. Делать полностью автоматизированный логин, когда вообще ничего нажимать не нужно я не хочу, потому что тогда любой, кто получит доступ к вашему компьютеру сможет получить доступ и к вашим деньгам, просто кликнув на квике. Так хоть комбинацию клавиш знать надо.
bEngSystem=false; //язык системы по умолчанию LangSwitch="%+!"; WshShell=WScript.CreateObject("WScript.Shell"); InitKeys(); KeysSeq=GetData(); if (KeysSeq) EnterData(KeysSeq); //------------------------------------------------------------------------ function GetData(){ //(Возможно) читаем данные из файла и преобразуем в последовательность клавиш //"!" означает паузу для специальных клавиш, к-е требуют время обработки var DataFN, oStream, Data, Pos1, Pos2, Line; if (0){ //данные в файле DataFN='C:/...'; FSO=new ActiveXObject("Scripting.FileSystemObject"); oStream=FSO.OpenTextFile(DataFN, 1); Line=oStream.ReadAll(); oStream.Close(); } else Line='имя:password'; //Tab должен быть и вначале, потому что при фокусировке квика текущее поле - список серверов Line="{Tab}!"+Line.replace(/:/g, "{Tab}!"+LangSwitch); //Переключение языка в самом начале если логин русский if (bEngSystem) Line=LangSwitch+Line; //конвертация русских символов Line=Line.replace(/[А-Яа-я]/g, RusCB); return Line; } function EnterData(KeysSeq){ var ret; WScript.Sleep(300); //Пауза позволяет убрать руки от клавиатуры до того, как скрипт начал работать ret=WshShell.AppActivate("Идентификация пользователя"); if (ret==0) return; WScript.Sleep(100); aSeq=KeysSeq.split('!'); for(var i=0; i<aSeq.length; i++){ Seq=aSeq[i]; if (Seq!=''){ WshShell.SendKeys(Seq); WScript.Sleep(100); } } WshShell.SendKeys("{Enter}"); //WshShell.SendKeys("%+"); WScript.Sleep(100); //switch to Russian //WshShell.SendKeys("{Tab}"); WScript.Sleep(100); //WshShell.SendKeys("^V"); WScript.Sleep(100); //paste } function RusCB(s){ var n, ch, i; if (s.length==1){ ch=s; } else{ //rtf //код символа в Ansi s=s.substr(2); n=parseInt(s, 16); ch=String.fromCharCode(n); } //Преобразовать в Utf и найти в русских клавишах i=RusKeys.indexOf(Ansi2Utf(ch)); //Найти соотв. латинскую клавишу return LatKeys.charAt(i); } //------------------------------------------------------------------------ function Ansi2UtfN(Code){ if (Code>=192 && Code<=255) Code+=848; else if (Code==168) Code=1025; else if (Code==184) Code=1105; return String.fromCharCode(Code); } function Utf2AnsiN(Code){ if (Code>=1040 && Code<=1103) Code-=848; else if (Code==1025) Code=168; else if (Code==1105) Code=184; return String.fromCharCode(Code); } function Ansi2Utf(Str, bRev){ var Buf='', Ch, Res='', c=0, L, n, f; L=Str.length; f=(!bRev ? Ansi2UtfN : Utf2AnsiN); for(n=0; n<L; n++){ Ch=Str.charCodeAt(n); Buf+=f(Ch); c++; if (c>=100){Res+=Buf; Buf=''; c=0;} } return Res+Buf; } //------------------------------------------------------------------------ function alert(S){WScript.Echo(S);} function InitKeys(){ //Проблема в том, что влияет текущий язык в той программе! //Можно нажимать только английские клавиши. Если надо нажимать русские, надо вычислить какие им соответствуют английские RusKeys="йцукенгшщзхъфывапролджэячсмитьбю"; LatKeys="qwertyuiop[]asdfghjkl;'zxcvbnm,."; RusKeys=RusKeys+RusKeys.toUpperCase(); LatKeys=LatKeys+LatKeys.toUpperCase(); }
Пришло время сделать 3-НДФЛ, чтобы получить социальный (за медицинские услуги) и инвестиционный вычеты, заплатить дивиденды, полученные от иностранных эмитентов (W8-ben подписана).
Нюанс — за год были убытки от коротких позиций по акциям и убытки по фьючерсам на акции.
И при формировании 3-НДФЛ получается каша в доходах и вычетах, которую пришлось разобрать.
Задокументирую свой вариант заполнения, проверим результаты летом, когда налоговая будет обрабатывать декларации.
В личном кабинете при заполнении 3-НДФЛ ждет сюрприз от ВТБ и ФНС:
ВТБ действует строго по поговорке «От пирожка, предложенного москвичом, нельзя отказываться, потому что обязательно запихнет и не факт, что в рот» и заталкивает в личный кабинет ФНС декларацию.
ФНС ее отобразить нормально не может, потому что она содержит данные поперек логики применения вычетов, и теряет часть данных о вычетах, что приводит к необходимости ввести данных о доходах в 3-НДФЛ заново.
# В КВИКе запускаем луа-скрипт QuikLuaPython.lua import socket import threading from datetime import datetime, timezone import pandas as pd import finplot as fplt fplt.display_timezone = timezone.utc class DeltaBar(): def __init__(self): self.df = pd.DataFrame(columns='date_time open high low close delta delta_time_sec'.split(' ')) self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0] def parser(self, parse): if parse[0] == '1' and parse[1] == 'RIH1': if abs(self.df.iloc[len(self.df) - 1]['delta']) >= 500: self.df.loc[len(self.df)] = [0, 0, 0, 0, 0, 0, 0] # Добавляем строку в DF self.df.iloc[len(self.df) - 1]['close'] = float(parse[4]) # Записываем последнюю цену как цену close бара if self.df.iloc[len(self.df) - 1]['date_time'] == 0: self.df.iloc[len(self.df) - 1]['date_time'] = \ datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f").replace(microsecond=0) if self.df.iloc[len(self.df) - 1]['open'] == 0: self.df.iloc[len(self.df) - 1]['open'] = float(parse[4]) if float(parse[4]) > self.df.iloc[len(self.df) - 1]['high']: self.df.iloc[len(self.df) - 1]['high'] = float(parse[4]) if (float(parse[4]) < self.df.iloc[len(self.df) - 1]['low']) or \ (self.df.iloc[len(self.df) - 1]['low'] == 0): self.df.iloc[len(self.df) - 1]['low'] = float(parse[4]) if parse[5] == '1026': self.df.iloc[len(self.df) - 1]['delta'] += float(parse[6]) if parse[5] == '1025': self.df.iloc[len(self.df) - 1]['delta'] -= float(parse[6]) self.df.iloc[len(self.df) - 1]['delta_time_sec'] = \ datetime.strptime(f'{parse[7]} {parse[8][0:-1]}', "%d.%m.%Y %H:%M:%S.%f") - \ self.df.iloc[len(self.df) - 1]['date_time'] self.df.iloc[len(self.df) - 1]['delta_time_sec'] = self.df.iloc[len(self.df) - 1]['delta_time_sec'].seconds def service(): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('127.0.0.1', 3587)) # Хост-этот компьютер, порт - 3587 while True: res = sock.recv(2048).decode('utf-8') if res == '<qstp>\n': # строка приходит от клиента при остановке луа-скрипта в КВИКе break else: delta_bar.parser(res.split(' ')) # Здесь вызываете свой парсер. Для примера функция: parser (parse) sock.close() def update(): df = delta_bar.df # Меняем индекс и делаем его типом datetime df = df.set_index(pd.to_datetime(df['date_time'], format='%Y-%m-%d %H:%M:%S')) # print(delta_bar.df) # pick columns for our three data sources: candlesticks and TD candlesticks = df['open close high low'.split()] volumes = df['open close delta_time_sec'.split()] if not plots: # first time we create the plots global ax plots.append(fplt.candlestick_ochl(candlesticks)) plots.append(fplt.volume_ocv(volumes, ax=ax.overlay())) else: # every time after we just update the data sources on each plot plots[0].update_data(candlesticks) plots[1].update_data(volumes) if __name__ == '__main__': delta_bar = DeltaBar() # Запускаем сервер в своем потоке t = threading.Thread(name='service', target=service) t.start() plots = [] ax = fplt.create_plot('RIH1', init_zoom_periods=100, maximize=False) update() fplt.timer_callback(update, 2.0) # update (using synchronous rest call) every N seconds fplt.show()
Здесь описан МОЙ ОПЫТ. Это не инструкция к действию для всех и каждого. Тот способ, которым я отчитываюсь за дивиденды иностранных компаний, можно использовать на свой страх и риск: ваш налоговый инспектор может отказать в таком способе подачи и попросить вас вписать каждую дивидендную выплату отдельной строкой в 3-НДФЛ. Если у вас мало выплат за год (менее 40), рекомендую вписывать их отдельной строкой! Как это делается, я рассказывал в прошлом году (ЧИТАТЬ или СМОТРЕТЬ).
Моя проблема некоторым постоянным читателям известна: особенность стратегии (покупаю 100 американских компаний по отдельности) имеет очевидные минусы, один из которых — огромное количество мелких дивидендных выплат, почти каждый день!
По дивидендам от российских компаний (их порядка 50-60 поступило) за меня отчитывается брокер. Это прекрасно!
По дивидендам от иностранных компаний я отчитываюсь сам. Я напомню, что штраф за неподачу этих данных составляет всего 1000₽. Здесь скорее вопрос гражданской ответственности: я требую соблюдения законов и моих прав от государства. Я отвечаю тем же.