В прошлом году весь свой учет инвестиций я перенес из таблицы в Google Sheets в программу Portfolio Performance. Учет сделок и все расчеты структуры и результатов портфеля теперь там, а личных финансов в целом (баланс, доходы и расходы, план) остался в таблицах. За время использования программы накопился опыт её настройки, которым и хочу поделиться. В конце будет бонус, так что загляните даже если уже пользуетесь этим софтом.
Portfolio Performance – немецкий open source проект (с открытым исходным кодом), десктопная программа для учета инвестиций. Я выбрал именно её, потому что увидел ряд преимуществ в сравнении с другими решениями:
- Хранит данные на диске вашего компьютера. В отличие от онлайн-сервисов для учета инвестиций (например, IntelInvest), доступ к данным есть только у вас. Они хранятся в XML-файле, который, при желании, можно бэкапить в облако любым удобным способом.
- Открытость кода позволяет сообществу пользователей рассчитывать на отсутствие всевозможных закладок, майнеров, бэкдоров и проверять правильность расчётов.
- Написана на Java, а значит доступна для практически любой десктопной операционной системы.
- Легче, чем создавать свои таблицы, особенно когда речь заходит о расчете TWR (доходности, очищенной от влияния покупок и продаж), сплитах, отображения данных в разных валютах и выборе периодов для просмотра статистики.
- Данные сделок могут быть экспортированы в CSV или JSON, что оставляет возможность для дальнейших автоматизированных переездов в другой софт. Если умеете писать скрипты для конвертации файлов.
- Бесплатно!
Возможности
- Объединяет сделки по разным счетам в одном месте. Мало у кого всего один брокерский счет, из-за чего статистика в кабинетах отдельных брокеров бесполезна. Здесь весь зоопарк будет учтен в едином интерфейсе с объединенными результатами.
- Отображение структуры, результатов (TWR, IRR, волатильность, просадки и прочее) и динамики портфеля и отдельных активов в таблицах и на графиках, которые вы создаете сами как угодно. Состав колонок в таблицах можно менять под себя, а на графиках отображать не только портфель, но и отдельные активы, бенчмарки, курсы валют и инфляцию.
- Отображение статистики вашей активности – пополнений портфеля и торговли, в частности уплаченных комиссий, оборачиваемости, количества сделок, среднего времени удержания позиции и тому подобного.
- Учет любых комиссий по счетам в расчете доходностей – как привязанных к конкретным сделкам (вводятся вместе со сделками), так и удержанных по счетам в другое время.
- Учет налогов и налоговых вычетов.
- Учет процентных платежей по денежным счетам, в том числе отрицательных и облагаемых налогом.
- Знает курсы валют (даже с рублем, если настроить) и умеет показывать результаты портфеля в любой валюте.
- Учет переводов денег и ценных бумаг между счетами и конвертаций валюты.
- Учет дробления акций/паев (сплитов). Указываете дату и коэффициент дробления, дальше всё происходит само.
- Есть локализации интерфейса в разные языки, которые выбираются в настройках. Я пользуюсь английской версией, но есть и русская (качество локализации не проверял).
Есть и возможность импорта данных из отчетов различных брокеров. Но поддержки российских брокеров нет, в основном немецких, так что сделки придется вбивать руками. Есть экспериментальный импорт из XML-отчета Interactive Brokers (Activity Flex Query), но я не разбирался как им пользоваться (и не нашел внятных инструкций на сайте PP).
Также стоит отметить, что в левом меню есть полезная секция таксономий. У меня их две: классы активов (equity, debt, cash, real) и размещение активов (asset location – Russia, US). Денежные счета я добавляю в cash и соответствующую страну брокера, активы – в свой класс активов и страну, где они хранятся. Программа сама посчитает сколько процентов активов к какому элементу таксономии относится и покажет распределение в таблице или на графике, в том числе изменение весов во времени. Есть даже встроенный помощник для ребалансировки на основе таксономии, но, конечно, мой круче.😁
Работа с программой
Перечислю общий порядок действий, чтобы вы знали с чего лучше начать и чем закончить, потому что кнопочек и пунктиков меню тут много.
Пополнения брокерских счетов (вами или, например, зачислением дивидендов) и вывод с них денег учитываются по денежным счетам в программе, а покупка и продажа ценных бумаг – по бумажным.
Сперва лучше добавить денежные брокерские счета. У одного брокера их может быть несколько в разных валютах, если у вас есть конвертации. Можно добавить и банковские счета или депозиты, если вы хотите их здесь учитывать. После этого добавляете бумажные брокерские счета («депо») у тех же брокеров. По ним учитываются движения бумаг и остатки.
Для ценных бумаг в левом меню лучше сразу создать несколько списков (watchlists), куда вы их будете помещать, чтобы не путаться. Например, у меня есть такие списки: Активы, Валюты и Бенчмарки (для сравнения с ними портфеля – фондовые индексы, фонды, которыми я не владею, ИПЦ).
В секции ценных бумаг добавляете нужные валютные курсы через кнопку +, пункт New exchange rate. Российским инвесторам чаще всего, конечно, нужен USDRUB. Добавление валют и настройка автоматического получения котировок подробно описаны ниже.
Дальше через ту же кнопку +, New instrument добавляете активы – те, что находятся в портфеле и те, за которыми хотите следить или сравнивать с ними результаты портфеля. Настройки описаны ниже.
Заводите все свои пополнения счетов в конкретных валютах, конвертации (через подменю денежного счета Перевод), сделки с бумагами и комиссии, переводы денег и бумаг, зачисления выплат на счета от эмитентов и выводы денег. Всё это называется общим словом Транзакции. В этот момент у вас начнут рассчитываться результаты инвестирования, даже если вы не настроите обновление котировок, потому что программа знает цены сделок и считает последней ценой наиболее недавнюю.
В секции отчеты есть много разной уже готовой информации – покликайте, там всё должно быть знакомо – динамика портфеля, результаты инвестирования, график доходности / волатильности, круговая (и не только) диаграмма долей активов. На экране Performance можно сделать несколько вкладок с разными наборами доступных виджетов статистики, в итоге получится персонализированный дашборд, отображающий текущее положение дел как вам удобно (или несколько разных). На экране Chart есть возможность построить несколько графиков с разными наборами активов.
Обновление котировок
Переходим к самому интересному. Скажу сразу, сложность настройки автоматического сбора котировок из разных API или сайтов довольно высокая, кто-то даже может почувствовать себя программистом. Делать это не обязательно, данные можно вбивать вручную (например, раз в месяц), или же они в любом случае обновятся при добавлении транзакций, что не идеально, но посчитает вам доходность. Но с автообновлением котировок и красивыми графиками жить всё-таки лучше, веселее (особенно когда они падают на 60% за неделю).
Далее я иногда буду упоминать какое-то «API» – если не знаете, что это, то и не надо. Можно считать, что это просто специальные ссылки на сайты, из которых одни программы могут получать какие-то данные из других программ, а вы только один раз им поможете найти друг друга, всё правильно настроив.
Для всего зарубежного (ETF) можно использовать сервисы Yahoo Finance или Alpha Vantage. Первое делается вообще элементарно, а для второго нужно зарегистрироваться на их сайте, получить ключ от API и указать его в общих настройках Portfolio Performance. Котировки российских инструментов будем получать из API МосБиржи – это посложнее.
Yahoo Finance
Настроим забор данных для фонда Vanguard FTSE All-World UCITS ETF (Acc) под тикером VWRA на LSE. В Yahoo Finance его можно найти под тикером VWRA.L, последняя буква после точки – это обозначение биржи. Жмем плюс в списке ценных бумаг и выбираем пункт New Instrument, далее по списку и скриншотам:
- Поиск по инструментам на Yahoo Finance встроен в саму программу. Если найдете там что нужно и выберете, это немного предзаполнит данные в следующих формах. Пользоваться поиском не обязательно, можно нажать кнопку Empty Instrument и вбить данные самостоятельно.
- Во вкладке Security Master Data не забудьте выбрать валюту, указать Symbol как на Yahoo Finance и выбрать правильный календарь биржи. Можете заполнить ISIN, чтобы работало открытие ссылки на justETF и другие сервисы в браузере (доступно в подменю Open in browser по клику правой кнопкой мыши на инструменте).
- История котировок во вкладке Historical Quotes найдется автоматически по указанному тикеру, когда выберете правильный источник (Yahoo Finance).
- В качестве источника для последней цены во вкладке Latest Quote тоже нужно выбрать Yahoo. Это позволит забирать изменения цены внутри дня, если вы зачем-то хотите их видеть.
- Во вкладке Additional Attributes можно указать, например, TER. Во вкладке Taxonomies – указать класс активов и любые другие категоризации, что вы себе создали.
Alpha Vantage
Чтобы у вас был запасной вариант в случае, если Yahoo по какой-то причине отвалится, проделаем всё то же самое, но с другим источником истории котировок – alphavantage.co:
- Получаем свой API key (можно считать это паролем), который затем вставляем в настройки Portfolio Performance, чтобы приложение могло обращаться к их API.
- Как обычно, создаем новый инструмент. Поиск можно пропустить, здесь он нам ничем не поможет, и сразу нажать Empty Instrument.
- В поле Symbol указываем тот же тикер VWRA.L, потому что именование биржи на Alpha Vantage совпадает.
- В истории котировок выбираем источник Alpha Vantage, котировки загрузятся автоматически.
- Последнюю цену можно попытаться забирать с Alpha Vantage, но у меня это почему-то не работает, а можно выбрать Yahoo.
БПИФ на МосБирже
Для всего отечественного можно использовать бесплатный (для личного использования) API МосБиржи. Настройка получения данных здесь будет зависеть от типа инструмента, я покажу пример с БПИФ EQMX (бывший VTBX) и курсом USDRUB. Начнем с первого:
- В качестве провайдера данных во вкладке Historical Quotes выбираем JSON. Это не сервис, а формат данных, который умеют отдавать почти все современные API, в том числе и МосБиржа.
- В поле Feed URL скопируйте такую ссылку:
https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQTF/securities/EQMX.json?history.columns=TRADEDATE,CLOSE,LOW,HIGH,VOLUME&iss.meta=off&limit=100&from={DATE:yyyy-MM-01}
– в ней мы выбрали секцию под кодом TQTF в разделе stock (акции), где и торгуются БПИФы в рублях, а в параметрах отключили передачу лишней информации, настроили поля данных, которые хотим получать и подставили специальный шаблон выбора даты начала данных, чтобы Portfolio Performance мог воспользоваться пагинацией, ведь на один запрос API МосБиржи отдает максимум 100 строк, а дней в истории котировок больше. - Поле Date Format можно не заполнять или указать yyyy-MM-dd – программа поймет возвращаемую МосБиржей в стандартном формате дату в любом случае.
- В оставшихся полях указываем путь к интересующим нас данным в виде $.history.data[*][0, 1, 2, 3 или 4] (смотрите скриншот). Число в квадратных скобках здесь – это индекс (номер, начинающийся с нуля) колонки, которую мы указали в ссылке (например, TRADEDATE у нас первая, её индекс 0).
Аналогично настраивается получение текущей цены, только ссылка будет другой: https://iss.moex.com/iss/engines/stock/markets/shares/boards/TQTF/securities/EQMX.json?iss.meta=off&iss.only=marketdata&marketdata.columns=SYSTIME,LAST,HIGH,LOW,VOLTODAY
. Доступ к данным здесь будет по такому пути: $.marketdata.data[*][0, 1, 2, 3 или 4] (см. скриншот).
Обменные курсы
Portfolio Performance собирает курсы множества валют к евро с сайта ЕЦБ, но EURRUB перестал там публиковаться в марте, а USDRUB никогда и не было. Поэтому динамику валютных пар с участием рубля лучше забирать с МосБиржи, что на примере USDRUB делается так:
- В списке бумаг кликаете плюс и выбираете New exchange rate.
- В первой вкладке заполняете коды валют в правильном порядке.
- На вкладке с историей всё то же самое, что и с БПИФ выше, но ссылка будет другая:
https://iss.moex.com/iss/history/engines/currency/markets/selt/boards/CETS/securities/USD000UTSTOM.json?history.columns=TRADEDATE,CLOSE,LOW,HIGH,VOLRUR&iss.meta=off&limit=100&from={DATE:yyyy-MM-01}
. Код других валютных пар (USD000UTSTOM в этой ссылке) ищите на странице инструмента на сайте МосБирже. Для EURRUB можете взять код EUR_RUB__TOM. - Ссылка для получения последней цены выглядит так:
https://iss.moex.com/iss/engines/currency/markets/selt/boards/CETS/securities/USD000UTSTOM.json?iss.meta=off&iss.only=marketdata&marketdata.columns=SYSTIME,LAST,HIGH,LOW,VOLTODAY
Остальные валютные курсы добавлять отдельно вам вряд ли понадобится, потому что PP уже собирает курсы множества валют к евро и через кросс-курсы может привести стоимость активов практически в любых валютах к вашей, выбранной основной в программе, в том числе к рублю.
Обновление котировок драгоценных металлов на МосБирже (GLDRUB, SLVRUB) настраивается точно так же, как и валюты, потому что они торгуются на валютном рынке.
Фондовые индексы
Зарубежные индексы можно брать с Yahoo Finance, правда, ассортимент там ограничен ценовыми страновыми индексами (S&P 500, FTSE 100, DAX, CAC 40 и т. д.), а из индексов полной доходности есть разве что ^SP500TR (у остальных от S&P с полной доходностью вроде бы нет истории, а мультистрановых индексов от MSCI или FTSE там вообще нет). Если они вам нужны, вместо индекса полной доходности можно найти ирландский ETF, реинвестирующий дивиденды, на этот или похожий индекс. И не забывайте выбирать правильную валюту при добавлении индексов.
Данные российских бенчмарков можно забирать с МосБиржи. Настраивается всё точно так же, отличие будет только в ссылке на API МосБиржи. Например, для индекса российских акций MCFTR:
- Получение истории котировок:
https://iss.moex.com/iss/history/engines/stock/markets/index/securities/MCFTR.json?history.columns=TRADEDATE,CLOSE,LOW,HIGH,VOLUME&iss.meta=off&limit=100&from={DATE:yyyy-MM-01}
- Получение последней цены:
https://iss.moex.com/iss/engines/stock/markets/index/securities/MCFTR.json?iss.meta=off&iss.only=marketdata&marketdata.columns=TRADEDATE,CURRENTVALUE,HIGH,LOW,VOLTODAY
В программе график кликабельный – открывается тултип с доходностями с начала периода до места, куда вы нажали. Кроме выбора периода есть и выбор интервала отображения – день, неделя, месяц или год.
Учет облигаций
У Portfolio Performance есть один большой недостаток – полное непонимание программой облигаций. Здесь просто нет такого понятия. Программа заточена под ETF, но, поскольку любой ETF – это акция, то её легко использовать и для отдельных акций, если вам это нужно (дивиденды, сплиты – всё поддерживается).
Но вот про облигации, у которых номинал и текущие цены живут отдельной жизнью, тут нет ничего. Поэтому их котировки остается периодически считать в деньгах и обновлять вручную. Делается это не сложно (может, даже проще, чем в таблицах), то есть недостаток именно в отсутствии прямой возможности это автоматизировать (если вы, конечно, не напишите какой-нибудь веб-сервис, который будет делать это автоматически и отдавать данные, пригодные для импорта в Portfolio Performance).
Текущих цен у облигаций две – с НКД (грязная) и без (чистая), и нам логично учитывать грязную, то есть с добавленным НКД, потому что именно за неё мы можем облигацию продать. В момент выплаты купона НКД заменится на зачисленные на счет деньги, а цена облигации упадет на сумму выплаты.
Для расчета грязной цены в деньгах берем текущий размер номинала облигации и умножаем на её цену в процентах с биржи, прибавляем НКД (тоже публикуется на бирже). Результат можно использовать как очередную котировку, которую можно добавить в программу вручную на экране списка ценных бумаг (вкладка Historical Quotes, правый клик, пункт меню Add), а сумму купона в день его выплаты можно учесть как дивиденд – это такое же зачисление денег на счет.
Нам нужны три подчеркнутых числа (кликабельно).
Грязная цена этой облигации на 29.07.22 = 1364.21 * 95.61% + 16.19 = 1320.51 руб.
Инфляция
В Portfolio Performance есть встроенная возможность забирать данные страновых ИПЦ с сайта ЕЦБ, причем среди стран там не только относящиеся к Евросоюзу. Но среди них нет России, да и имеющиеся данные не всегда последние (например, по США в июле были только апрельские), поэтому тут придется импровизировать.
Чтобы добавить динамику ИПЦ Росстата, нужен какой-нибудь подходящий источник данных, который бы отдавал рост инфляции именно в виде индекса, то есть увеличивая предыдущее своё значение на последний прирост цен. Если вы знаете такой источник, напишите в комментах, лишним не будет.
Я не знаю, поэтому для себя и вас сделал свой API (тот самый бонус) – автоматически обновляемый ряд значений индекса потребительских цен Росстата накопленным итогом:
- Формат: JSON
- URL: https://capital-gain.ru/data/CPI_RU.json
- Дата: [*].date
- Цена закрытия: [*].close
Данные начинаются в январе 1991 года с 1 рубля, который каждый месяц индексируется на инфляцию. К июню 2022 года рублей стало уже 131 262. Ну а дальше эти данные можно использовать как бенчмарк своего портфеля или просто делать всякие визуализации для понимания ситуации. Например, у меня есть такой график сравнения индекса ОФЗ, фонда на него, фонда облигаций Арсагеры и пары отдельных ОФЗ-ИН с инфляцией:
То же самое есть и для US CPI (индекс инфляции в США), его данные с 1913 года можно получить по ссылке: https://capital-gain.ru/data/CPI_US.json
На этом всё. Если я что-то забыл или остались непонятные моменты, пишите вопросы в комментариях!
10 ответов к “Учет инвестиций в программе Portfolio Performance”
Ура ) хоть что-то на русском. Я когда с ней разбирался смотрел немецкие видео с переведенными субтитрами
Добрый день! Спасибо за рекомендацию.
Начал с создания активов (акции Мосбиржи). Не могу найти способа копировать уже созданные активы. Приходится каждый раз создавать заново и заполнять все поля. Неужели нет копирования?
Да, мне тоже не хватало иногда, но, похоже, копирования нет.
Если речь идет о копировании актива из одного портфеля в другой, то это возможно следующим образом:
1. В портфеле (файле.xml), куда хотели бы перемещать ценную бумагу, создать Watchlist.
2. Разделить экран PP на два портфеля так, чтобы они были видны рядом друг с другом. Это можно делать, таская мышкой портфель (название) слегка вниз – PP тогда предлагает разделение экрана. (Потом так же можно таскать обратно, чтобы иметь только 1 портфель на весь экран)
3. Перетаскать мышью ценную бумагу в Watchlist. Она также появится среди всех ценнных бумаг портфеля. Параметры и история котировок передаются, сделки – нет.
Жесть)) Спасибо за лайфхак! По-моему это так сложно, что проще настройки котировок скопировать в любой текстовый редактор и из него ручками копировать в новые активы, всё равно их надо немного править. А больше там вроде и копировать особо нечего (названия, тикеры, ISIN у каждого актива свои).
Как заставить программу использовать курс валюты из данных Мосбиржи, а не последние данные ЕЦБ на март прошлого года, для отчетов? А то она использует курс примерно 110,71 и данные в рублях по долларовым бумагам завышены.
Разобрался. Сам немного накосячил при создании нового валютного курса )
Спасибо за статью, смотрел на красивые графики в блоге про Итоги и задавался вопросом – как сделать такое же для своего портфеля.
У меня вопросы:
1. Как правильно учитывать stock options? Если от компании в которой я работаю периодически вестятся акции, то как их правильно учитывать в портфеле?
На форуме пишут, что нужно делать Inbound transfer на соотвествующий Securities аккаунт. Вроде это правильнее, чем оформлять транзакцию, как покупку?
2. Я продаю акции за X и покупаю другие активы за X. При этом из своего внешнего источника дохода я плачу налоги за продажу акций. Как правильно учитывать налоги в этом случае? Стоит ли их учитывать в портфеле?
Получилось подгрузить данные Historical Quotes и Latest Quote путем обращения к JSON Feed URL API МосБиржи для Board TQBR и TQPI (Фондовый рынок Т+ Акции и ДР и Фондовый рынок Т+ Акции ПИР соответственно), но для Board MTQR (Внебиржевой рынок акций с ЦК режим “Непрерывный аукцион с ЦК”) возвращает пустые данные по обоим URL’ам. Если кто-нибудь добрый подскажет, как починить, был бы благодарен )