Рубрики
Авторские тексты

Учет инвестиций в программе Portfolio Performance

В прошлом году весь свой учет инвестиций я перенес из таблицы в 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
Доходность фондовых индексов разных стран с начала 2022 года в долларах США (без дивидендов).
В программе график кликабельный — открывается тултип с доходностями с начала периода до места, куда вы нажали. Кроме выбора периода есть и выбор интервала отображения — день, неделя, месяц или год.

Учет облигаций

У Portfolio Performance есть один большой недостаток — полное непонимание программой облигаций. Здесь просто нет такого понятия. Программа заточена под ETF, но, поскольку любой ETF — это акция, то её легко использовать и для отдельных акций, если вам это нужно (дивиденды, сплиты — всё поддерживается).

Но вот про облигации, у которых номинал и текущие цены живут отдельной жизнью, тут нет ничего. Поэтому их котировки остается периодически считать в деньгах и обновлять вручную. Делается это не сложно (может, даже проще, чем в таблицах), то есть недостаток именно в отсутствии прямой возможности это автоматизировать (если вы, конечно, не напишите какой-нибудь веб-сервис, который будет делать это автоматически и отдавать данные, пригодные для импорта в Portfolio Performance).

Текущих цен у облигаций две — с НКД (грязная) и без (чистая), и нам логично учитывать грязную, то есть с добавленным НКД, потому что именно за неё мы можем облигацию продать. В момент выплаты купона НКД заменится на зачисленные на счет деньги, а цена облигации упадет на сумму выплаты.

Для расчета грязной цены в деньгах берем текущий размер номинала облигации и умножаем на её цену в процентах с биржи, прибавляем НКД (тоже публикуется на бирже). Результат можно использовать как очередную котировку, которую можно добавить в программу вручную на экране списка ценных бумаг (вкладка Historical Quotes, правый клик, пункт меню Add), а сумму купона в день его выплаты можно учесть как дивиденд — это такое же зачисление денег на счет.

На примере ОФЗ-ИН 52002 все данные можно найти на сайте МосБиржи.
Нам нужны три подчеркнутых числа (кликабельно).
Грязная цена этой облигации на 29.07.22 = 1364.21 * 95.61% + 16.19 = 1320.51 руб.

Инфляция

В Portfolio Performance есть встроенная возможность забирать данные страновых ИПЦ с сайта ЕЦБ, причем среди стран там не только относящиеся к Евросоюзу. Но среди них нет России, да и имеющиеся данные не всегда последние (например, по США в июле были только апрельские), поэтому тут придется импровизировать.

Чтобы добавить динамику ИПЦ Росстата, нужен какой-нибудь подходящий источник данных, который бы отдавал рост инфляции именно в виде индекса, то есть увеличивая предыдущее своё значение на последний прирост цен. Если вы знаете такой источник, напишите в комментах, лишним не будет.

Я не знаю, поэтому для себя и вас сделал свой API (тот самый бонус) — автоматически обновляемый ряд значений индекса потребительских цен Росстата накопленным итогом:

Данные начинаются в январе 1991 года с 1 рубля, который каждый месяц индексируется на инфляцию. К июню 2022 года рублей стало уже 131 262. Ну а дальше эти данные можно использовать как бенчмарк своего портфеля или просто делать всякие визуализации для понимания ситуации. Например, у меня есть такой график сравнения индекса ОФЗ, фонда на него, фонда облигаций Арсагеры и пары отдельных ОФЗ-ИН с инфляцией:

Динамика активов за последние 3 года.

То же самое есть и для US CPI (индекс инфляции в США), его данные с 1913 года можно получить по ссылке: https://capital-gain.ru/data/CPI_US.json

На этом всё. Если я что-то забыл или остались непонятные моменты, пишите вопросы в комментариях!


Хотите научиться инвестировать? Пройдите мой обучающий курс о создании инвестиционного портфеля.

Нравится блог? Поддержите меня подпиской и получите доступ к преимуществам.

  • Есть вопросы? Задайте их в комментариях!
  • Чтобы не пропустить новые статьи, подпишитесь на Telegram, VK или еженедельную рассылку анонсов на почту:

5 ответов к “Учет инвестиций в программе Portfolio Performance”

Ура ) хоть что-то на русском. Я когда с ней разбирался смотрел немецкие видео с переведенными субтитрами

Добрый день! Спасибо за рекомендацию.

Начал с создания активов (акции Мосбиржи). Не могу найти способа копировать уже созданные активы. Приходится каждый раз создавать заново и заполнять все поля. Неужели нет копирования?

Если речь идет о копировании актива из одного портфеля в другой, то это возможно следующим образом:
1. В портфеле (файле.xml), куда хотели бы перемещать ценную бумагу, создать Watchlist.
2. Разделить экран PP на два портфеля так, чтобы они были видны рядом друг с другом. Это можно делать, таская мышкой портфель (название) слегка вниз — PP тогда предлагает разделение экрана. (Потом так же можно таскать обратно, чтобы иметь только 1 портфель на весь экран)
3. Перетаскать мышью ценную бумагу в Watchlist. Она также появится среди всех ценнных бумаг портфеля. Параметры и история котировок передаются, сделки — нет.

Жесть)) Спасибо за лайфхак! По-моему это так сложно, что проще настройки котировок скопировать в любой текстовый редактор и из него ручками копировать в новые активы, всё равно их надо немного править. А больше там вроде и копировать особо нечего (названия, тикеры, ISIN у каждого актива свои).

Добавить комментарий

Ваш адрес email не будет опубликован.