Content deleted Content added
Citation bot (talk | contribs) Alter: volume. | Use this bot. Report bugs. | Suggested by Spinixster | Category:Investment | #UCB_Category 156/277 |
|||
(9 intermediate revisions by 6 users not shown) | |||
Line 1:
{{Short description|Historical performance of an investment portfolio}}
The '''modified Dietz method'''<ref name="Dietz1966">{{cite book
|author=Peter O. Dietz
Line 28 ⟶ 29:
|publisher=Institute of Chartered Financial Analysts.
|page=72
|quote=A slightly improved version of this method is the day-weighted, or modified Dietz, method. This method adjusts the cash flow by a factor that corresponds to the amount of time between the cash flow and the beginning of the period.}}</ref> The original idea behind the work of Peter Dietz was to find a quicker, less computer-intensive way of calculating an IRR as the iterative approach using the then-quite-slow computers that were available was taking a significant amount of time; the research was produced for BAI, Bank Administration institute.{{Citation needed|date=October 2017}} The modified Dietz method is a linear [[Internal_rate_of_return|IRR]].
==Formula==
Line 117 ⟶ 118:
:<math>100 \times (1 + 125\%)+ 50 \times (1+125\%)^ \frac{2 - 1}{2} = 225 + 50 \times 150\% = 225 + 75 = 300</math>
so in this case, the modified Dietz return is noticeably less than the unannualized IRR. This divergence between the modified Dietz return and the unannualized internal rate of return is due to a significant flow within the period,
The IRR is 50% since:
Line 183 ⟶ 184:
There are no flows, so the gain or loss is:
:{{nowrap begin}}{{link if exists|end value}}
and the average capital equals the start value, so the modified Dietz return is:
:{{nowrap begin}}{{sfrac|{{link if exists|gain or loss}}|{{link if exists|average capital}}}} = {{sfrac|
===Contributions - when not to adjust the holding period===
Line 219 ⟶ 220:
:{{nowrap begin}}{{link if exists|average capital}}{{nowrap end}}
::{{nowrap begin}}= {{link if exists|start value}}
::{{nowrap begin}}= 10,000
::{{nowrap begin}}= 10,000
::{{nowrap begin}}= $8,000{{nowrap end}}
The average capital of the shares over the last quarter requires no calculation, because there are no flows after the beginning of the last quarter. It is the $8,000 invested in the shares. However, the average capital in the shares over the whole year is something else. The start value of the shares at the beginning of the year was zero, and there was an inflow of $8,000 at the beginning of the last quarter, so:
:{{nowrap begin}}{{link if exists|average capital}}{{nowrap end}}
::{{nowrap begin}}= {{link if exists|start value}}
::{{nowrap begin}}= 0 + {{sfrac|1|4}} × $8,000{{nowrap end}}
::{{nowrap begin}}= $2,000{{nowrap end}}
Line 300 ⟶ 301:
There are sometimes other difficulties when decomposing portfolio returns, if all transactions are treated as occurring at a single point during the day.
For example, consider a fund opening with just $100 of a single stock that is sold for $110 during the day. During the same day, another stock is purchased for $110, closing with a value of $120. The returns on each stock are 10% and 120/110
:w*10/100 + (1
Such weights are absurd, because the second stock is not held short.
Line 322 ⟶ 323:
:At the end of Day 40, the remaining 20 shares are worth 12.50 dollars per share
The gain or loss is end value
:<math>20 \times 12.50 - 100 \times 10 + 80 \times 15</math>
Line 387 ⟶ 388:
==Visual Basic==
<syntaxhighlight lang="
Function georet_MD(myDates, myReturns, FlowMap, scaler)
' This function calculates the modified Dietz return of a time series
Line 452 ⟶ 453:
==Java method for modified Dietz return==
<syntaxhighlight lang="java">
private static double modifiedDietz
/* emv: Ending Market Value
Line 467 ⟶ 468:
if (numCD <= 0) {
throw new ArithmeticException
}
for (int i = 0; i < cashFlow.length; i++) {
if (numD[i] < 0) {
throw new ArithmeticException
}
weight[i] = (double) (numCD - numD[i]) / numCD;
Line 478 ⟶ 479:
double ttwcf = 0; // total time weighted cash flows
for (int i = 0; i < cashFlow.length; i++) {
ttwcf += weight[i] * cashFlow[i];
}
double tncf = 0; // total net cash flows
for (int i = 0; i < cashFlow.length; i++) {
tncf += cashFlow[i];
}
Line 504 ⟶ 505:
== Excel VBA function for modified Dietz return ==
<syntaxhighlight lang="
Public Function MDIETZ(dStartValue As Double, dEndValue As Double, iPeriod As Integer, rCash As Range, rDays As Range) As Double
|