Comments (2)
@CliveCleaves, first of all, thank you so much for preparing so many examples. It's a lot of work.
By definition, the Internal Rate of Return is the interest rate that makes the Net Present Value zero.
So, the result of npv(irr(payments), payments)
must be close to zero.
I checked the first 100 cases from the file and as a result did not get a value close to zero (the results are in the table below).
Here is the code snippet I used:
import numpy_financial as npf
for i, bad_payment in enumerate(bad_payments_list[:100], start=1):
monthly_irr = irr(bad_payment)
if monthly_irr is None:
rate = npf.irr(bad_payment)
print(i, " ", rate, "\t", npf.npv(rate, bad_payment))
As you can see, npf calculates the wrong rate in most cases. In some cases, the rate is close to 0.01, but the default tolerance in pyxirr is 0.001.
My suggestion: add a parameter to control the tolerance. This will allow for rate close to 0.01 (as in lines 1, 31, 61) instead of None.
row | npf.irr(payments) | npf.npv(npf.irr(payments), payments) |
---|---|---|
1 | -0.8936246934946801 | -0.015625 |
2 | -0.7990327261002742 | -2560.0 |
3 | -0.7158083244273705 | 3670016.0 |
4 | -0.6425367523140351 | -738197504.0 |
5 | -0.45306129910967397 | -6912.0 |
6 | -0.27943531109758235 | -16128.0 |
7 | -0.05894303425691705 | -226.9128818511963 |
8 | -0.062069116554579806 | -791.8739314079285 |
9 | -0.06130802108808808 | 345.1872525215149 |
10 | -0.05933842038265813 | -1688.7603859901428 |
11 | -0.05461159904197255 | -978.9646096229553 |
12 | -0.052236780965806084 | 28.20184588432312 |
13 | -0.04993411223184674 | 105.46152472496033 |
14 | -0.04771710604071966 | -659.4393312931061 |
15 | -0.11313290374336471 | -2.1179680285957706e+17 |
16 | -0.12380011736813235 | -8.303599304799997e+20 |
17 | -0.12148983904900423 | -8.399282265207042e+20 |
18 | -0.11351942509378687 | -1.0985608755409074e+19 |
19 | -0.10971825180743133 | 3.970466888300542e+19 |
20 | -0.10617590512106323 | -2.591060111004934e+19 |
21 | -0.10288417295784236 | -3.5182019461365e+18 |
22 | -0.09982373039333636 | -4.272342621694098e+18 |
23 | -0.096974859077675 | -1.0566482529556257e+19 |
24 | -0.0942605713520277 | -3.554631715430676e+18 |
25 | -0.09160441776867478 | 2.0985123094762243e+18 |
26 | -0.08638409596484464 | 2691025437610568.0 |
27 | -0.08375016974399507 | 2.1768153108064202e+17 |
28 | -0.07813769007643134 | -3.1658335976152216e+16 |
29 | -0.07496610539028381 | -6260952040811012.0 |
30 | -0.07135299331973177 | -2587482753078264.0 |
31 | -0.8936246934946801 | -0.015625 |
32 | -0.7998321714433255 | 1024.0 |
33 | -0.35834923940077545 | -11264.0 |
34 | -0.3201477883422911 | -25600.0 |
35 | -0.06178150788719028 | -1188.607373714447 |
36 | -0.06479969725043433 | -3342.7869114875793 |
37 | -0.0639511124405634 | -5621.257207870483 |
38 | -0.06193347593420073 | 1884.1013813018799 |
39 | -0.059586994349779654 | -2328.552409172058 |
40 | -0.057170549931088055 | -4020.973428249359 |
41 | -0.05478806692913096 | -295.99726915359497 |
42 | -0.05247866453616756 | -2035.0299735069275 |
43 | -0.0502534326425359 | -405.5948085784912 |
44 | -0.12092730577360811 | -9.852461598033881e+18 |
45 | -0.13088050883528168 | -7.42961726435428e+22 |
46 | -0.12832189961437568 | -5.703403052118493e+22 |
47 | -0.12433446914135182 | 1.0904007085940357e+22 |
48 | -0.12035878161468416 | -1.0133329081812726e+22 |
49 | -0.11662953054938607 | -2.735239229801871e+20 |
50 | -0.1131766136006368 | 4.9687771080854576e+20 |
51 | -0.1070419042505083 | -6.538533176600873e+20 |
52 | -0.10173330034181949 | -3.403131881079792e+20 |
53 | -0.09919648188532759 | -2.0014840980656613e+20 |
54 | -0.09668812782631997 | -7.85954229262796e+18 |
55 | -0.09417677384893142 | -1.1776497112587638e+20 |
56 | -0.0916133564870083 | 7.990358787247078e+19 |
57 | -0.0889298995123946 | 1.0533573271899357e+19 |
58 | -0.08603514212123309 | 4.1335453872802186e+18 |
59 | -0.08279861201389727 | -1.682472576693933e+18 |
60 | -0.07903993184061098 | 4.056002572715154e+17 |
61 | -0.8936246934946801 | -0.015625 |
62 | -0.40678912033617265 | 13312.0 |
63 | -0.36271295591593067 | -34816.0 |
64 | -0.29319483223699905 | -67584.0 |
65 | -0.048873335750406754 | -1.586534470319748 |
66 | -0.06423297770524161 | -1867.2682104110718 |
67 | -0.06714763445396643 | -4781.858381271362 |
68 | -0.06622229055758766 | -18794.263805389404 |
69 | -0.06416275576541774 | -51622.113845825195 |
70 | -0.061794893125661665 | -30779.593170166016 |
71 | -0.059365765722609765 | 7436.420125007629 |
72 | -0.05697382260635797 | 2957.5482454299927 |
73 | -0.05465487196079233 | -5706.3660707473755 |
74 | -0.12749121493063642 | -1.8105029574469603e+21 |
75 | -0.1368043670031981 | -5.094417497900866e+23 |
76 | -0.1300269706616849 | 5.339293325272833e+22 |
77 | -0.12607739717808297 | 6.23260729465026e+23 |
78 | -0.12239718999773586 | 4.815888797973269e+22 |
79 | -0.11900718071444105 | -2.393781977084619e+22 |
80 | -0.11302986834685591 | 4.4430147946035843e+21 |
81 | -0.11040106061107957 | -6.636981947398056e+22 |
82 | -0.1079109580094878 | 2.1342333723921393e+21 |
83 | -0.10546226382208324 | 7.911211341279792e+21 |
84 | -0.10058576940085195 | -3.615519782716349e+21 |
85 | -0.09806843841170787 | -4.0271933527674276e+21 |
86 | -0.09540414560153032 | -1.5542887407623744e+21 |
87 | -0.09249112617613864 | -7.51720377758537e+20 |
88 | -0.08918507501300055 | 2.073024456663685e+20 |
89 | -0.08527891420665845 | 5.904417979139076e+19 |
90 | -0.6945652270960949 | -1.5 |
91 | -0.4554753414952092 | -30.0 |
92 | -0.18407373777942015 | -385.1511790752411 |
93 | -0.16742490338378802 | -363.22283458709717 |
94 | -0.14680347997793708 | -21.146135687828064 |
95 | -0.12905888338688876 | 0.4194630980491638 |
96 | -0.11416158249887243 | -11.897696077823639 |
97 | -0.10165908399892021 | -1.1505871415138245 |
98 | -0.09108732540593278 | -1.263539344072342 |
99 | -0.0820965521945235 | -0.27379148453474045 |
100 | -0.07440695784995799 | -0.2943432182073593 |
from pyxirr.
Awesome, thank you very much for looking into it. I was certainly taking for granted the idea that NPF was correct or close to correct! It was no trouble at all preparing the examples. I'll look into tolerance locally 😄
from pyxirr.
Related Issues (20)
- Can't install from wheels for 3.10 on arm linux (inside M1 host docker) HOT 4
- Publish new version with updated metadata HOT 2
- Weird values for xirr when too close to zero HOT 2
- Add support for different day count conventions HOT 5
- New release? HOT 2
- Missing InvalidPaymentsError exception declaration in .pyi causes mypy missing import error HOT 1
- No module name error on glue aws HOT 2
- XIRR for a pd.Series HOT 1
- Using silent in xnfv HOT 1
- How to use with Dataframe & datetime64[ns]
- Interest in adding private equity metrics? HOT 4
- Dependency Issue
- Conflicting sub-dependencies with other libraries HOT 8
- IRR function args for tolerance and max iterations HOT 3
- Wrong irr values HOT 3
- Fetching PME index amounts HOT 1
- what is different in excel and pyxirr when calculating xirr? HOT 2
- IRR/XIRR with only two amounts can be solved analytically HOT 1
- High IRR Result
- Control Xirr accuracy
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pyxirr.