lib: roi does not fail on empty input data (+test)
This commit is contained in:
parent
e49da20f8c
commit
87b82b6839
@ -148,7 +148,8 @@ timeWeightedReturn showCashFlow prettyTables investmentsQuery trans (OneSpan spa
|
|||||||
cashflow
|
cashflow
|
||||||
|
|
||||||
let finalUnitBalance = if null units then initialUnits else let (_,_,_,u) = last units in u
|
let finalUnitBalance = if null units then initialUnits else let (_,_,_,u) = last units in u
|
||||||
finalUnitPrice = valueAfter / finalUnitBalance
|
finalUnitPrice = if finalUnitBalance == 0 then initialUnitPrice
|
||||||
|
else valueAfter / finalUnitBalance
|
||||||
totalTWR = roundTo 2 $ (finalUnitPrice - initialUnitPrice)
|
totalTWR = roundTo 2 $ (finalUnitPrice - initialUnitPrice)
|
||||||
years = fromIntegral (diffDays spanEnd spanBegin) / 365 :: Double
|
years = fromIntegral (diffDays spanEnd spanBegin) / 365 :: Double
|
||||||
annualizedTWR = 100*((1+(realToFrac totalTWR/100))**(1/years)-1) :: Double
|
annualizedTWR = 100*((1+(realToFrac totalTWR/100))**(1/years)-1) :: Double
|
||||||
@ -202,16 +203,19 @@ internalRateOfReturn showCashFlow prettyTables (OneSpan spanBegin spanEnd valueB
|
|||||||
(map ((:[]) . show) amounts))
|
(map ((:[]) . show) amounts))
|
||||||
|
|
||||||
-- 0% is always a solution, so require at least something here
|
-- 0% is always a solution, so require at least something here
|
||||||
case ridders
|
case totalCF of
|
||||||
|
[] -> return 0
|
||||||
|
_ ->
|
||||||
|
case ridders
|
||||||
#if MIN_VERSION_math_functions(0,3,0)
|
#if MIN_VERSION_math_functions(0,3,0)
|
||||||
(RiddersParam 100 (AbsTol 0.00001))
|
(RiddersParam 100 (AbsTol 0.00001))
|
||||||
#else
|
#else
|
||||||
0.00001
|
0.00001
|
||||||
#endif
|
#endif
|
||||||
(0.000000000001,10000) (interestSum spanEnd totalCF) of
|
(0.000000000001,10000) (interestSum spanEnd totalCF) of
|
||||||
Root rate -> return ((rate-1)*100)
|
Root rate -> return ((rate-1)*100)
|
||||||
NotBracketed -> error "Error: No solution -- not bracketed."
|
NotBracketed -> error "Error: No solution -- not bracketed."
|
||||||
SearchFailed -> error "Error: Failed to find solution."
|
SearchFailed -> error "Error: Failed to find solution."
|
||||||
|
|
||||||
type CashFlow = [(Day, Quantity)]
|
type CashFlow = [(Day, Quantity)]
|
||||||
|
|
||||||
|
|||||||
@ -210,3 +210,18 @@ hledger -f- roi --inv investment --pnl pnl -b 2017-06 -e 2018
|
|||||||
+---++------------+------------++---------------+----------+-------------+-----++-------+--------+
|
+---++------------+------------++---------------+----------+-------------+-----++-------+--------+
|
||||||
|
|
||||||
>>>=0
|
>>>=0
|
||||||
|
|
||||||
|
# 8. Dont fail where there is no rate-of-return
|
||||||
|
hledger -f- roi -p 2019-11
|
||||||
|
<<<
|
||||||
|
2019/11/01 Example
|
||||||
|
Assets:Checking 1
|
||||||
|
Income:Salary -1
|
||||||
|
>>>
|
||||||
|
+---++------------+------------++---------------+----------+-------------+-----++-------+-------+
|
||||||
|
| || Begin | End || Value (begin) | Cashflow | Value (end) | PnL || IRR | TWR |
|
||||||
|
+===++============+============++===============+==========+=============+=====++=======+=======+
|
||||||
|
| 1 || 2019/11/01 | 2019/11/30 || 0 | 0 | 0 | 0 || 0.00% | 0.00% |
|
||||||
|
+---++------------+------------++---------------+----------+-------------+-----++-------+-------+
|
||||||
|
|
||||||
|
>>>=0
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user