Lead (engineering)

From formulasearchengine
Revision as of 23:14, 8 July 2013 by en>Addbot (Bot: Migrating 1 interwiki links, now provided by Wikidata on d:q2386072)
Jump to navigation Jump to search

The modified Dietz method[1] is a measure of the historical performance of an investment portfolio in the presence of external flows. (External flows are movements of value such as transfers of cash, securities or other instruments in or out of the portfolio, with no equal simultaneous movement of value in the opposite direction, and which are not income from the investments in the portfolio, such as interest, coupons or dividends.) To calculate the modified Dietz return, divide the gain or loss in value, net of external flows, by the average capital over the period of measurement. The result of the calculation is expressed as a percentage rate of return for the time period. The average capital weights individual cash flows by the amount of time from when those cash flows occur until the end of the period.

The formula for modified Dietz is as follows:

where

is the ending market value

is the beginning market value

is the net external inflow for the period (contributions to a portfolio are entered as positive flows while withdrawals are entered as negative flows)

and

the sum of each flow multiplied by its weight

The weight is the proportion of the time period between the point in time when the flow occurs and the end of the period. can be calculated as

where

is the number of calendar days during the return period being calculated, which equals end date minus start date plus 1
Di = the number of days from the start of the return period until the day on which the flow Fi occurred.

Discussion/derivation

1) The Modified Dietz method has the practical advantage over the true time-weighted rate of return method, in that the calculation of a Modified Dietz return does not require portfolio valuations at each point in time whenever an external flow occurs. The internal rate of return method shares this practical advantage with the Modified Dietz method.

2) The Modified Dietz method has the practical advantage over the internal rate of return method, in that there is a formula for the Modified Dietz return, whereas iterative numerical methods are usually required to estimate the internal rate of return.

3) The Modified Dietz method is based upon a simple rate of interest principle. It approximates the internal rate of return method, which applies a compounding principle, but if the flows and rates of return are large enough, the results of the Modified Dietz method will significantly diverge from the internal rate of return.

The Modified Dietz return is the solution to the equation:

where

is the ending market value

is the beginning market value

T = total length of time period

ti = time between the start of the period and flow

Compare this with the internal rate of return, which is the solution to the equation:

4) Note that the Modified Dietz return is not an annual rate of return, unless the period happens to be one year. Annualisation, which is conversion of the return to an annual rate of return, is a separate process.

5) Note also that the simple Dietz method is a special case of the Modified Dietz method, in which external flows are assumed to occur at the midpoint of the period, or equivalently, spread evenly throughout the period, whereas no such assumption is made when using the Modified Dietz method, and the timing of any external flows is taken into account.

6) Modified Dietz is an example of a money (or dollar) weighted methodology. In particular, if the Modified Dietz return on two portfolios are and , measured over a common matching time interval, then the Modified Dietz return on the two portfolios put together over the same time interval is the weighted average of the two returns:

where the weights of the portfolios depend on the Average Capital over the time interval:

7) An alternative to the Modified Dietz method is to link geometrically the Modified Dietz returns for shorter periods. This method is classed as a time-weighted method, but does not produce the same results as the true time weighted method, which requires valuations at the time of each cash flow.

8) There are sometimes difficulties when calculating or decomposing portfolio returns, if all transactions are treated as occurring at a single point during the day. Whatever method is applied to calculate returns, an assumption that all transactions take place simultaneously at a single point in time each day can lead to errors.

For example, consider a scenario where a portfolio is empty at the start of a day, so that BMV = 0. There is then an external inflow during a day of F = $100. By the close of the day, market prices have moved, and EMV = $99.

If all transactions are treated as occurring at the end of the day, then there is zero start value BMV, and zero value for Average Capital, so no Modified Dietz return can be calculated.

Some such problems are resolved if the Modified Dietz method is further adjusted so as to put purchases at the open and sales at the close, but more sophisticated exception-handling produces better results.

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 - 1 = 9.0909% (4 d.p.) and the portfolio return is 20%. The asset weights wi (as opposed to the time weights Wi) required to get the returns for these two assets to roll up to the portfolio return are 1200% for the first stock and a negative 1100% for the second:

w*10/100 + (1-w)*10/110 = 20/100 → w = 12.

Such weights are absurd, because the second stock is not held short.

Excel VBA function for modified Dietz return:

Public Function MDIETZ(dStartValue As Double, dEndValue As Double, iPeriod As Integer, rCash As Range, rDays As Range) As Double

    'Jelle-Jeroen Lamkamp 10 Jan 2008
    Dim i As Integer: Dim Cash() As Double: Dim Days() As Integer
    Dim Cell As Range: Dim SumCash As Double: Dim TempSum As Double
    
    'Some error trapping
    If rCash.Cells.Count <> rDays.Cells.Count Then MDIETZ = CVErr(xlErrValue): Exit Function
    If Application.WorksheetFunction.Max(rDays) > iPeriod Then MDIETZ = CVErr(xlErrValue): Exit Function
    
    ReDim Cash(rCash.Cells.Count - 1)
    ReDim Days(rDays.Cells.Count - 1)
    
    i = 0
    For Each Cell In rCash
        Cash(i) = Cell.Value: i = i + 1
    Next Cell
    
    i = 0
    For Each Cell In rDays
        Days(i) = Cell.Value: i = i + 1
    Next Cell
    
    SumCash = Application.WorksheetFunction.Sum(rCash)

    TempSum = 0
    For i = 0 To (rCash.Cells.Count - 1)
            TempSum = TempSum + (((iPeriod - Days(i)) / iPeriod) * Cash(i))
    Next i
    
    MDIETZ = (dEndValue - dStartValue - SumCash) / (dStartValue + TempSum)

End Function

The above VBA program is designed to use with Excel. Here is a Java program written for general purposes.

Java Method for Modified Dietz Return:

private static double modifiedDietz (double emv, double bmv, double cashFlow[], int numCD, int numD[]) {

    /* emv:        Ending Market Value
     * bmv:        Beginning Market Value
     * cashFlow[]: Cash Flow
     * numCD:      actual number of days in the period
     * numD[]:     number of days between beginning of the period and date of cashFlow[]
     */

    double md = -99999; // initialize modified dietz with a debugging number

    try {

        double[] weight = new double[cashFlow.length];

        if (numCD <= 0) {
            throw new ArithmeticException ("numCD <= 0");
        }
    
        for (int i=0; i<cashFlow.length; i++) {
            if (numD[i] < 0) {
        	throw new ArithmeticException ("numD[i]<0 , " + "i=" + i);
            }
            weight[i] = (double) (numCD - numD[i]) / numCD;
        }

        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];
        }

        md = (emv - bmv - tncf) / (bmv + ttwcf);               
    }
    catch (ArrayIndexOutOfBoundsException e) {
    	e.printStackTrace();
    }
    catch (ArithmeticException e) {
    	e.printStackTrace();
    }
    catch (Exception e) {
    	e.printStackTrace();
    }

    return md;
}

See also

Further reading

  • Carl Bacon. Practical Portfolio Performance Measurement and Attribution. West Sussex: Wiley, 2003. ISBN 0-470-85679-3
  • Bruce J. Feibel. Investment Performance Measurement. New York: Wiley, 2003. ISBN 0-471-26849-6