spacious-team / investbook

Оценка эффективности инвестиций с учетом комиссий, налогов (удержанных и ожидающихся), дивидендов и купонов.
https://t.me/investbook_support_bot
GNU Affero General Public License v3.0
277 stars 80 forks source link

Ошибка вычисления доходности по XIRR, если имеются 2 транзакции за день #278

Closed vananiev closed 3 years ago

vananiev commented 3 years ago

Исправить ошибку

2021-05-04 21:31:54.056 DEBUG 7900 --- [ForkJoinPool.commonPool-worker-15] r.i.report.InternalRateOfReturn          : Ошибка вычисления внутренней нормы доходности для бумаги Security(id=RU000A0JPN96, ticker=null, name=АО "МРСК Центра и Приволжья" ПАО, выпуск 01, inn=null)

java.lang.IllegalArgumentException: Transactions must not all be on the same day.

2021-05-04 21:31:54.129 DEBUG 7900 --- [ForkJoinPool.commonPool-worker-15] r.i.report.InternalRateOfReturn          : Ошибка вычисления внутренней нормы доходности для бумаги Security(id=US55279C2008, ticker=null, name=MDMG LI, inn=null)

org.decampo.xirr.OverflowException: Candidate overflow
  at org.decampo.xirr.NewtonRaphson$Calculation.setCandidate(NewtonRaphson.java:166) ~[xirr-1.1.jar!/:na]
vananiev commented 3 years ago

Библиотека https://github.com/RayDeCampo/java-xirr не может рассчитать доходность, если все сделки по акции совершены в один день т.о., что акцией не владели ни одного полного дня. Логика понятна, количество дней владения = 0 приводит к бесконечной доходности. Сообщение в логе

Transactions must not all be on the same day.

ожидаемо отображает эту ситуацию.

vananiev commented 3 years ago

Ошибка

org.decampo.xirr.OverflowException: Candidate overflow

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