GithubHelp home page GithubHelp logo

spacious-team / investbook Goto Github PK

View Code? Open in Web Editor NEW
230.0 27.0 50.0 4.13 MB

Оценка эффективности инвестиций с учетом комиссий, налогов (удержанных и ожидающихся), дивидендов и купонов.

Home Page: https://t.me/investbook_support_bot

License: GNU Affero General Public License v3.0

Java 88.54% HTML 10.67% Batchfile 0.06% Shell 0.05% CSS 0.47% JavaScript 0.21%
finance-management investment-analysis portfolio-management finance investment stock-market forex-market stocks derivatives java

investbook's Introduction


java-version spring-boot-version hits-of-code github-closed-pull-requests github-workflow-status github-all-releases docker-pulls telegram-channel telegram-group telegram-support

Оглавление

Назначение

Если вы ведете учет сделок в excel или слышали, что его надо вести (рекомендация 1, 2, 3), то это бесплатное приложение поможет вам это делать.

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

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

main-page

sectors-pie-chart

Все что нужно - это подгружать свежие отчеты брокера или вручную вводить информацию. При этом вся информация сохраняется на вашем компьютере, в облако данные не уходят, для работы интернет не требуется.

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

  • обзор роста активов, рассчитанного по методике S&P 500, в сравнении с S&P 500, история инвестиций и остатка денежных средств;
    portfolio-analysis
  • портфель ценных бумаг с информацией о текущей позиции, усредненной цене покупок и доходности ценных бумаг (ЧИСТВНДОХ/XIRR) с учетом хеджирующих позиций на срочном рынке и усредненной цены покупки валюты;
    portfolio
  • доля ценной бумаги в портфеле;
    current-proportion
  • портфель трейдера с информацией о доходности сделок на срочном рынке в разрезе группы контрактов (например, по всем фьючерсам и опционам Si, то же по BR и т.д.);
    derivatives-marker-total-profit
  • распределение прибыли по группам срочных контрактов в портфеле трейдера;
    derivatives-profit-proportion
  • детализация дивидендных, купонных и амортизационных выплат;
    portfolio-payment
  • детализация дивидендных, купонных и амортизационных выплат, начисленные по акциям и облигациям со связанного счета ИИС;
    foreign-portfolio-payment
  • доходность сделок на фондовом рынке (метод FIFO);
    stock-market
  • доходность сделок на срочном рынке;
    derivatives-market
  • доходность сделок на валютном рынке;
    foreign-market
  • ввод и вывод ценных бумаг с/на другие счета, конвертация, сплит акций (AAPL, TSLA и др.);
  • доходность портфеля (ЧИСТВНДОХ/XIRR), пополнения, списания, переводы с/на другие счета, текущий остаток денежных средств;
    cash-in
  • налоговая нагрузка, в том числе обязательства самостоятельной уплаты налога для иностранных бумаг;
    tax
  • комиссия брокера.

Отличие от аналогов

Investbook в сравнении с Intelinvest и Snowball Income имеет следующие преимущества:

  1. Отсутствие ежемесячной подписки. Бесплатно. Всегда и безусловно.
  2. Дивидендные, купонные, налоговые выплаты учитываются по факту поступления. Это позволяет точно рассчитывать доходность, вовремя отследить задержку поступлений выплат на счёт.
  3. Высокая точность оценки стоимости портфеля и налоговых обязательств. В отличие от аналогов суммы и даты поступления выплат, указанные в приложении, можно напрямую использоваться для составления декларации 3-НДФЛ.
  4. Не требуется выход в сеть, возможность работать в свободное время в поездках без интернета.
  5. Безопасность. Не требуется выгружать отчёты брокера в облако, не требуется предоставлять токен доступа к брокерскому счету третьим лицам и программному обеспечению с потенциальными ошибками. Например, известно, что токены популярного брокера позволяют совершать сделки без вашего участия.
  6. Открытый код - дополнительная гарантия безопасности и уверенности в доступности данных только вам.
  7. Понятный, широко распространенный формат отчёта - Excel таблицы с детальным описанием каждой колонки.
  8. Единый формат представления данных "Portfolio Open Format" при необходимости позволит безболезненно перенести накопленные данные в другое приложение учета инвестиций.

Брокеры

Приложение анализирует отчеты брокеров Тинькофф (xlsx), Сбербанк (xlsx), ВТБ (xls), Промсвязьбанк (xlsx, xml) и Твой Брокер / Уралсиб (zip с xls). Если ваш счет открыт у другого брокера, напишите нам. Также вы можете уже на вашей версии приложения воспользоваться формами ввода информации или загрузить данные из excel файла. Также поддержку вашего брокера могут предложить сторонние разработчики через функционал расширений. Инструкция для установки расширений доступна для операционных систем windows, mac и linux.

Установка

Скачать со страницы проекта установщик .msi и запустить его.

Можете обратиться к более подробной инструкции по установке и работе с приложением для операционных систем windows, mac и linux. Investbook также может быть запущен в docker.

Работа с приложением

Запустите приложение через ярлык на рабочем столе Windows, в браузере перейдите по адресу http://localhost:2030 и загрузите отчеты брокера (с локального компьютера или из email ящика).

Для удобства приложение допускает:

  1. Многократную загрузку одного и того же отчета (полезно, если вы не помните, загрузили конкретный отчет или нет), дублирования данных не произойдет.
  2. Загрузку отчетов за любой временной интервал (день, месяц, год или др), причем допустимо, что отчеты разных временных периодов будут перекрываться.
  3. Допустимо загружать отчеты по нескольким брокерским/инвестиционным счетам, в том числе от разных брокерских домов.

После загрузки отчета становится доступным аналитическая выгрузка в формате excel файла.

Обновление приложения

Процесс обновления на Windows не отличается от процесса первоначальной установки. Воспользуйтесь инструкцией для операционных систем windows, mac или linux. Или, если Investbook запускался в docker, воспользуйтесь инструкцией.

Документация

Дополнительная информация может быть найдена в документации, также оффлайн документация всегда доступна вам в установленном приложении на главной странице по ссылке "Документация".

Лицензия

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

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

Почему код приложения открыт

Идея открытого исходного кода (open source) заключается в свободе разработки и использования программного обеспечения. Многие известные бренды используют open source, например Instagram, Android, Telegram, Twitter, Google Chrome, Mozilla Firefox, сайты с защищенным соединением https, такие как https://vk.com и др. Для некоторых сфер решения с открытым исходным кодом подходят лучше других, например в сферах финансов и шифрования данных, т.к. этим решениям можно доверять вследствие того, что вы или любой другой желающий может посмотреть код и убедиться в безопасности программы.

Мнение Илона Маска об открытом исходном коде.

Мы будем публиковать больше исходного кода и выставлять на общественное обозрение. И конечно его также будут критиковать, люди помогут обнаружить все глупости в коде. А мы быстро исправим их, и сделаем это при полном общественном контроле. Я думаю, что такой подход позволит добиться доверия общественности. Потому что здесь не нужно верить на слово, можно своими глазами прочитать код, и то, что люди говорят про этот код. И можно увидеть улучшения, которые мы вносим. За всем процессом можно наблюдать в режиме реального времени, видеть все улучшения. Я бы удивился, если бы после этого общество не подумало: "Ого, кажется, это то, чему можно доверять!" Ну правда, эта история должна вызывать куда больше доверия, чем другие со всеми их черными ящиками и отказом показать подноготную. Что вы пытаетесь скрыть? Явно не что-то хорошее. Если вам нечего скрывать, почему не показать это?

Интервью 2023 г

Как помочь

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

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

Контакты

Вы можете оставить свой отзыв на сайте otzovik.com.

investbook's People

Contributors

aakatov avatar aleksandrklimchuk avatar alex5545 avatar anatolyburcenco avatar bogdan-markov-d avatar dependabot[bot] avatar dimio avatar embraceddd avatar eshishkin avatar ganjubass55 avatar lika976 avatar mbogda avatar oblivion941 avatar petrserg84 avatar sisergeev90 avatar sprokof avatar tusharmeth avatar valery1707 avatar vananiev avatar vanha1en avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

investbook's Issues

Дата выплат дивидендов и купонов

Завести новую страницу, отображающую даты и суммы выплат. Формат аналогичный станице "Зачисленных выплат по внешним брокерским счетам".

Добавить таблицу "Комиссии брокера"

Добавить таблицу "Комиссии брокера". Добавить уточнение в документацию к таблице Доходность, что показана чистая доходность уже после вычетов всех налогов брокера/биржи и налогов.

Выгрузка отчета по выбранным счетам

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

[x] 31000, [x] 10970, [x] 29050V

Допустить одинаковые номера транзакций разных брокеров

На текущий момент таблица transaction содержит уникальный ключ - номер сделки. В случае, если у разных брокеров будет одинаковые номера сделок, загрузить сделку не получится. Ограничить адресное пространство номеров сделок в пределах одного брокера.

Задача необходима для решения #4.

Выбор периода для выгрузки

Тема поднималась в заявке gh-29, тогда было решено фильтровать средствами excel. Однако такой способ не закрывает полезной фичи.

На странице "Состояние портфеля" отображаются выплаты по срочным контрактам и ценным бумагам. Для проверки налоговых начислений брокером, например, за 2020 год, будет полезно видеть финансовый результат за текущий год. Этого нельзя сделать средствами фильтрации в excel, в т.ч. и на странице "Срочный рынок", т.к. нет возможности фильтровать по контакту (для справедливости замечу, что на странице "Фондовый рынок" можно определить выплаты по конкретной бумаге за 2020 год, отфильтровав и вручную просуммировав, но это не удобно).

Учет нескольких валют при рассчете доходности портфеля

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

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

Упростить установку приложения

Упростить установку приложения за счет включения jre в приложение. Под каждую ОС нужна будет своя сборка, под Windows можно рассмотреть использование установщика msi.

Уралсиб. Зачисление купонов и дивидендов на брокерский счет

Входные данные: есть ИИС и брокерский счет, купоны и дивиденды настроены на зачисление на брокерский счет.
На обоих счетах есть одни и те же ЦБ (одинаковые ISIN). Тогда в отчете по брокерскому счету будет 2 записи о поступлении купона/дивиденда, например:

№ операции Дата Тип операции Сумма Валюта Комментарий
NC/200406/xxxxxx 06.04.2020 Погашение купона 346,50 RUR Погашение купона № КарМаниБ03
NC/200406/xxxxxx 06.04.2020 Погашение купона 808,50 RUR Погашение купона № КарМаниБ03

Одна выплата должна относиться к бумагам брокерского счета и попасть в таблицу "Выплаты", а другая выплата относится к бумагам внешнего по отношению к брокерскому счету (счету ИИС) и выплата должна попасть в таблицу "Внешние выплаты".

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

Если бы ЦБ отсутствовали на брокерском счете, то однозначно выплата относилась бы к внешним выплатам (такой алгоритм уже работает).

Группировка выплат по месяцам

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

Погашение облагаций в отчетах Уралсиб брокера

В отчетах Уралсиб брокера и погашение, и амортизация облигации помечаются событием "погашение номинала" в таблице "Движение денежных средств за отчетный период". Так, что приложение не может однозначно определить какое событие произошло.

Алгоритм приложение вычисляет событие погашения, если в отчете одновременно с событием "погашение номинала" есть событие "Списание ЦБ после погашения" в таблице "Движение ценных бумаг за отчетный период". Однако иногда событие списания ЦБ и события зачисления ДС "погашение номинала" приходят в отчетах за разные дни (а также в случае, когда событие списания ЦБ не приходит в дневных отчетах, сформированных в час ночи, см. gh-138).

Есть второй вариант детектирования события погашения - по количеству ЦБ = 0 или отсутствию ЦБ в таблице "Состояние портфеля ценных бумаг". Это гарантированно сработает для дневных отчетов, но для месячных и годовых - нет, т.к. по ЦБ может сначала произойти событие "погашение номинала" (амортизация), а потом ЦБ может быть продана. Таким образом, в месячном отчете на конец периода ЦБ будет отсутствовать в портфеле, но не по причине его погашения, а по причине продажи.

Для месячных и годовых отчетов с большой вероятностью сработает текущий алгоритм определения события "Погашения облигации" (одновременное наличие информации "погашение номинала" и "Списание ЦБ после погашения" для интересующей облигации). Малая вероятность сбоя алгоритма - это тот случай, когда эти события придут в разных месячных/годовых отчетах (такая вероятность гораздо ниже из-за того, что месячный/годовой интервал гораздо продолжительнее дневного и скорее всего охватит оба события, происходящие с небольшой разницей во времени).

Обработка сделок Уралсиб Брокера на фондовой и валютной секции

Обработка сделок Уралсиб Брокера на фондовой и валютной секции

  • сделках на фондовой секции;
  • купонах/амортизации/погашении облигиций и дивиденах;
  • ликвидной стоимости портфеля;
  • пополнении/снятии/налогообложении;
  • остатках наличных денежных средств
  • сделках на валютной секции;

Поддержка брокера ВТБ. Часть 1

Реализовать поддержку брокера. Требуется загрузка информации:

  1. Свойства портфеля: стоимость активов (руб), курсы валют ЦБ (если есть)
  2. Позиции по денежным средствам портфеля в разбивке по площадкам (фондовый, срочный, валютный, псб рынки)
  3. Таблица ввода/вывода денежных средств, а также перевода с/на другой счет
  4. Список ценных бумаг портфеля с фондового рынка
  5. Транзакции на фондовом рынке
  6. Выплата дивидендов по акциям
  7. Транзакции на срочном рынке по фьючерсам и опционам (купля, продажа интрадей и с переносом в следующий торговый день, экспирация)
  8. Перечисления вариационной маржи по сделкам срочного рынка (информация отсутствует в отчетах брокера в разрезе контракта)
  9. Ввод и вывод ценных бумаг с брокерского счета
  10. Конвертация ценных бумаг
  11. Удержания налога
  12. Котировки ЦБ

Имеющийся пример отчета брокера ВТБ не дает реализовать извлечение части информации. Поэтому запланиована доработка на будущее gh-120.

Разделить таблицу фондовой секции по валютам

Сейчас и рублевые, и долларовые и сделки с другими валютами выводятся в одну таблицу. Из-за разных валют ошибочно суммирует строчка "итого". Разнести сделки в разных валютах по разным таблицам.

Учесть, что для долларовых ЦБ на СПБ бирже комиссия рублевая. Для правильного расчета доходности сделки необходимо приводить комиссию к доллару.

Состояние портфеля инвестора

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

  • о текущем составе портфеля (если получится, c группировкой бумаг по секторам экономики);
  • среднюю цену покупок (нужно ли учитывать в средней цене уже проданные бумаги?)

Выбор периода для выгрузки

Реализовать в веб-интерфейсе по адресу http://localhost выбор периода времени (либо в виде календаря, где указывается дата начала и конца интересующего периода, либо, чтобы пользователь вводил в специально отведенные поля даты в формате дд.мм.гггг) для выгрузки данных из отчетов в Excel

Невозможно загрузить годовые отчеты из-за ограничения размера (Уралсиб)

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Apr 27 14:51:57 YEKT 2020
There was an unexpected error (type=Internal Server Error, status=500).
Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException: The field reports exceeds its maximum permitted size of 1048576 bytes.

Интерфейс для ручного ввода информации

Требуется добавить страницу для ручного ввода:

  • Транзакций.
  • ISIN новых ценных бумаг и кода производных инструментов.
  • Дивидендов, купонов, амортизации и погашения облигаций.
  • Событий по ДС (ввод, вывод, налог, комиссия и т.д.).
  • Активов портфеля.
  • Курса валют.
  • Котировки ценных бумаг и производных инструментов.

Фича будет полезна, если пока нет поддержки парсинга отчетов интересующего брокера или при малом количестве транзакций.

Ошибка при формировании отчета

Ошибка сборки отчета

java.lang.ArithmeticException: / by zero
at java.base/java.math.BigDecimal.divideAndRound(BigDecimal.java:4586)
at java.base/java.math.BigDecimal.divide(BigDecimal.java:5663)
at java.base/java.math.BigDecimal.divide(BigDecimal.java:1593)
at java.base/java.math.BigDecimal.divide(BigDecimal.java:1623)
at ru.portfolio.portfolio.view.PaidInterestFactory.getPositionWithPayments(PaidInterestFactory.java:77)
at ru.portfolio.portfolio.view.PaidInterestFactory.create(PaidInterestFactory.java:49)
at ru.portfolio.portfolio.view.excel.StockMarketProfitExcelTableFactory.create(StockMarketProfitExcelTableFactory.java:76)
at ru.portfolio.portfolio.view.excel.StockMarketProfitExcelTableFactory.create(StockMarketProfitExcelTableFactory.java:65)
at ru.portfolio.portfolio.view.excel.StockMarketProfitExcelTableView.writeTo(StockMarketProfitExcelTableView.java:58)
at ru.portfolio.portfolio.view.excel.ExcelTableView.writeTo(ExcelTableView.java:55)
at ru.portfolio.portfolio.view.excel.ExcelView.writeTo(ExcelView.java:36)
at ru.portfolio.portfolio.view.PortfolioViewRestController.getExelView(PortfolioViewRestController.java:56)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:832)

Расширить документацию

Приложение является полезным для анализа доходности портфелей и оценки правильности сделок как для новичков, так и для профессионалов. Однако для новичков кроме технических сложностей, есть еще и нехватка понятийной базы, поэтому будет полезно пояснить чем, например, отличается цена и премия на срочном рынке. Кроме того в приложение добавляется новый функционал: по оценке налогооблажения, учету поступлений внешних выплат (дивидендов) - вот только часть из последнего добавленного функционала.

Документация постепенно вырастает из ограничений одностраничного README файла. Будет полезно одновременно с приложением начать и развивать многостраничную документацию.

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

Учитывать вывод валюты в таблицах Портфель и Валютный рынок

Ананлогично вводу и выводу ЦБ с фондового рынка в другой депозиторий можно учитывать ввод вывод валюты с валютной секции. Например, для контракта USDRUB учитывать вывод USD как закрывающую сделку, а ввод USD расценивать как открывающую сделку с возможностью последующей продажи валюты по контракту USDRUB (или как закрывающую сделку для ранее проданного контракта USDRUB).

Аналогично в таблице Портфель учитывать ввод и вывод в колонках куплено и продано.

Вопрос с тем, как поступать с вводом выводом валюты суммами не кратными лоту (1000 USD в примере). Может реализовать фичу и не возможно из-за этого.

Вывод ЦБ из портфеля Уралсиб

Появился пример отчета, необходимо учесть вывод ЦБ с счета. Подумать над тем какую цену использвать при выводе, возможно, цену покупки из очереди FIFIO как то выцепить.

Отображать доходность по ЦБ в таблице портфель

Отображать доходность вложений в ценную бумагу по дисконтированной стоимости (по датам и размерам выплат, приведенных к одной эталонной дате) так, как это делает Excel формула ЧИСТВНДОХ() (формула описана в вики "Внутренняя норма доходности").

Функционал вынесен из задачи gh-37.

Повторный запуск приложения приводит к отображению ошибки

Если приложение запускается повторно, появляется окно с ошибкой
photo_2020-08-01_12-26-06
Это предупреждение того, что приложение уже запущено, предупреждение никак не сказывается на работоспособности приложения. Однако было бы неплохо при втором запуске программы тоже открывать окно браузера.

Символ "/" в номере брокерского счета приводит к ошибке формирования выгрузки

При наличии брокерских субсчетов в их наименовании может присутствовать символ "/", который приводит к ошибке при выгрузке отчета

java.lang.IllegalArgumentException: Invalid char (/) found at index (15) in sheet name 'Портфель (10212/01) RUB'
at org.apache.poi.ss.util.WorkbookUtil.validateSheetName(WorkbookUtil.java:151)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.createSheet(XSSFWorkbook.java:873)
at ru.investbook.view.excel.PortfolioStatusExcelTableView.writeTo(PortfolioStatusExcelTableView.java:64)

Поддержка брокера Финам

Реализовать поддержку брокера Финам. Требуется загрузка информации:

  1. Свойства портфеля: стоимость активов (руб), курсы валют ЦБ (если есть)
  2. Позиции по денежным средствам портфеля в разбивке по площадкам (фондовый, срочный, валютный, псб рынки)
  3. Таблица ввода/вывода денежных средств, а также перевода с/на другой счет
  4. Список ценных бумаг портфеля с фондового рынка
  5. Транзакции на фондовом рынке
  6. Выплата дивидендов по акциям
  7. Выплата купонов, амортизации и погашения облигаций
  8. Транзакции на срочном рынке по фьючерсам и опционам (купля, продажа интрадей и с переносом в следующий торговый день, экспирация)
  9. Перечисления вариационной маржи по сделкам срочного рынка
  10. Транзакции на валютном рынке
  11. Ввод и вывод ценных бумаг с брокерского счета
  12. Конвертация ценных бумаг
  13. Удержания налога
  14. Котировки ЦБ

Текущая стоимость открытых позиций

v 2020.4
Сейчас не отображается текущая стоимость открытых (купленных, но не проданных) позиций, имеется только общая ликвидная стоимость портфеля на вкладке "Доходность".
Хочется иметь числа по текущей ликвидной стоимости отдельных бумаг (получать их из последнего брокерского отчёта), а именно: текущая стоимость, текущая прибыль (было бы шикарно видеть её сразу с учётом будущей комиссии на продажу, но это скорее всего отдельный фичреквест) в рублях и в процентах, а также доля данной ценной бумаги во всём портфеле, и доля прибыли данной ценной бумаги в прибыли портфеля.

Т.к. на текущей вкладке акций одни и те же акции, купленные в разные даты, записаны разными строками, возможно предлагаемый функционал надо реализовывать на отдельной вкладке, где одной ценной бумаге будет соответствовать одна строка. Там же можно отображать остаток свободных денежных средств.

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

Поддержка нового Брокера за счет подключения расширения стороннего разработчика

Сейчас набор поддерживаемых брокеров "зашит" в релиз. Добавить возможность подключать плагинов поддержку брокеров, которые не входят в стандартную поставку. Плагины могли бы разрабатываться сторонними разработчиками.
Технически для пользователя это должно выглядить так:

  1. Скачиваешь плагин стороннего разработчика для своего брокера
  2. Выкладываешь его в нужную папку
  3. Перезапускаешь приложение и загружаешь отчеты своего брокера

Для разработчика плагина это должно выглядить так:

  1. Используешь maven зависимость, предоставляющую API
  2. Реализуешь API нужным брокером
  3. Выкладываешь в общий доступ jar

Ссылка на главную страницу после загрузки отчётов.

v 2020.4
После загрузки отчётов появляется сообщение: ok, и больше ничего. Для перехода на главную нужно 2 раза нажимать кнопку "Назад" в браузере.
Хочется иметь возможность перейти на главную страницу в один клик.
А ещё лучше - автоматически переходить на главную страницу, предусмотрев на ней место для полученного сообщения по результатам загрузки отчётов. Т.е. после загрузки сразу открывается главная страница с пунктами меню, и там же есть места для системного сообщения, в котором написано "отчёты успешно загружены" или сообщение об ошибке.
Будет полезно, т.к. избавит пользователей от лишних кликов после загрузки отчётов.

Также нужно будет соответствующее изменение в документации

В Excel выгрузке добавить описание колонок

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

Добавить удобства в выборе выгрузки за период или на заданную дату

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

Преобразовать интерфейс к виду

  1. Загрузить отчеты брокера
  2. Получить выгрузку [описание формата]
    за период / на дату <с T1 по T2|T2>

При выборе ссылки "за период"отображаются 2 поля Т1 и Т2, при выборе ссылки "на дату" отображается одно поле Т2.

Добавить ссылку на телеграмм канал техподдержки

На главную страницу нужно добавить ссылку @investbook_support на https://t.me/investbook_support. Например, так

Ваша версия приложения 2020.10. Проверить обновление можно на github странице проекта. Telegram-канал техподдержки @investbook_support. Если вы закончили работу, приложение можно завершить.

Поддержка брокера Альфа-Инвестиции

Реализовать поддержку брокера. Требуется загрузка информации:

  1. Свойства портфеля: стоимость активов (руб), курсы валют ЦБ (если есть)
  2. Позиции по денежным средствам портфеля в разбивке по площадкам (фондовый, срочный, валютный, псб рынки)
  3. Таблица ввода/вывода денежных средств, а также перевода с/на другой счет
  4. Список ценных бумаг портфеля с фондового рынка
  5. Транзакции на фондовом рынке
  6. Выплата дивидендов по акциям
  7. Выплата купонов, амортизации и погашения облигаций
  8. Транзакции на срочном рынке по фьючерсам и опционам (купля, продажа интрадей и с переносом в следующий торговый день, экспирация)
  9. Перечисления вариационной маржи по сделкам срочного рынка
  10. Транзакции на валютном рынке
  11. Ввод и вывод ценных бумаг с брокерского счета

Расширить REAMDE.md информацией о личном кабинете брокера

Между абзацами

...это не полный перечень информации, которую рассчитывает приложение.

Все что нужно - это подгружать свежие отчеты брокера.

Нужно добавить абзац следующего содержания

...это не полный перечень информации, которую рассчитывает приложение.

Почему личного кабинета брокера не достаточно? Брокер является заинтересованной стороной, он предоставит вам красивый интерфейс и графики, но воплне может не раскрыть всей информации. Кроме того, если у вас несколько брокеров, информация будет представлена в разном месте, объеме и разных форматах. Приложение объективно, отображает данные в едином формате для всех брокеров.

Все что нужно - это подгружать свежие отчеты брокера.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.