Metoda Dietz modificată - Modified Dietz method

De la Wikipedia, enciclopedia liberă

Metoda Dietz modificată este o măsură a ex post ( de exemplu , istoric) performanța unui portofoliu de investiții în prezența fluxurilor externe. (Fluxurile externe sunt mișcări de valoare, cum ar fi transferuri de numerar, valori mobiliare sau alte instrumente în sau din portofoliu, fără o mișcare egală simultană a valorii în direcția opusă și care nu sunt venituri din investițiile în portofoliu, cum ar fi dobânzi, cupoane sau dividende.)

Pentru a calcula randamentul Dietz modificat, împărțiți câștigul sau pierderea de valoare, net de fluxurile externe, la capitalul mediu pe perioada de măsurare. Capitalul mediu ponderează fluxurile de numerar individuale în funcție de perioada de timp dintre fluxurile de numerar respective până la sfârșitul perioadei. Debiturile care apar spre începutul perioadei au o greutate mai mare decât debitele care au loc spre sfârșit. Rezultatul calculului este exprimat ca o rentabilitate procentuală în perioada de deținere.

GIPS

Această metodă pentru calcularea rentabilității este utilizată în gestionarea modernă a portofoliului. Este una dintre metodologiile de calcul al rentabilității recomandate de Investment Performance Council (IPC) ca parte a standardelor lor globale de performanță a investițiilor (GIPS). GIPS sunt destinate să asigure coerența modului în care randamentele portofoliului sunt calculate la nivel internațional.

Origine

Metoda poartă numele lui Peter O. Dietz. Ideea inițială din spatele lucrării lui Peter Dietz a fost de a găsi un mod mai rapid, mai puțin intensiv de calcul de calcul al IRR, deoarece abordarea iterativă folosind computerele destul de lente de atunci, care erau disponibile, a luat o cantitate semnificativă de timp; cercetarea a fost realizată pentru BAI, institutul de administrare bancară.

Formulă

Formula pentru metoda Dietz modificată este următoarea:

Unde

este valoarea de piață de pornire
este valoarea de piață finală
este fluxul extern net pentru perioada respectivă (deci contribuțiile la un portofoliu sunt tratate ca fluxuri pozitive, în timp ce retragerile sunt fluxuri negative)

și

suma fiecărui debit înmulțit cu greutatea sa

Greutatea este proporția perioadei de timp dintre momentul în care are loc fluxul și sfârșitul perioadei. Presupunând că fluxul are loc la sfârșitul zilei, poate fi calculat ca

Unde

este numărul de zile calendaristice din perioada de returnare care este calculată, care este egală cu data de încheiere minus data de începere (plus 1, cu excepția cazului în care adoptați convenția că data de începere este aceeași cu data de sfârșit a perioadei anterioare)
este numărul de zile de la începutul perioadei de returnare până la ziua în care a avut loc fluxul .

Aceasta presupune că fluxul are loc la sfârșitul zilei. Dacă fluxul are loc la începutul zilei, fluxul este în portofoliu pentru o zi suplimentară, deci utilizați următoarea formulă pentru calcularea greutății:

Comparație cu rentabilitatea ponderată în timp și rata internă de rentabilitate

Metoda Dietz modificată are avantajul practic față de metoda reală a ratei de rentabilitate ponderată în timp , prin aceea că calcularea unei rentabilități Dietz modificate nu necesită evaluări ale portofoliului în fiecare moment în timp, ori de câte ori apare un flux extern. Metoda rată internă de rentabilitate împărtășește acest avantaj practic cu metoda Dietz modificată.

Odată cu avansul tehnologiei, majoritatea sistemelor pot calcula un randament ponderat în timp, calculând un randament zilnic și conectând geometric pentru a obține un randament lunar, trimestrial, anual sau orice altă perioadă. Cu toate acestea, metoda Dietz modificată rămâne utilă pentru atribuirea performanței, deoarece are în continuare avantajul de a permite rentabilitățile Dietz modificate ale activelor să fie combinate cu ponderile dintr-un portofoliu, calculate în funcție de capitalul investit mediu, iar media ponderată oferă randamentul Dietz modificat pe portofoliu. Returnările ponderate în timp nu permit acest lucru.

Metoda Dietz modificată are, de asemenea, avantajul practic față de metoda ritmului intern de rentabilitate (IRR) că nu necesită încercări și erori repetate pentru a obține un rezultat.

Metoda Dietz modificată se bazează pe un principiu al ratei simple a dobânzii. Se aproximează rata internă de rentabilitate metodei, care se aplică un principiu de compoundare, dar în cazul în care fluxurile și ratele de rentabilitate sunt suficient de mari, rezultatele metodei Dietz modificate va abate în mod semnificativ de rata internă de rentabilitate.

Returnarea Dietz modificată este soluția ecuației:

Unde

este valoarea de pornire
este valoarea finală
este durata totală a perioadei de timp

și

este timpul dintre începutul perioadei și flux

Comparați acest lucru cu rata internă de rentabilitate ( neanualizată) (IRR). TIR (sau mai strict vorbind, o versiune de revenire a perioadei de deținere neanualizate a TIR) este o soluție la ecuație:

Exemplu

Să presupunem că valoarea unui portofoliu este de 100 USD la începutul primului an și de 300 USD la sfârșitul celui de-al doilea an și că există un flux de 50 USD la sfârșitul primului an / începutul celui de-al doilea an. (Să presupunem în plus că niciunul dintre ani nu este un an bisect, deci cei doi ani au aceeași lungime.)

Pentru a calcula câștigul sau pierderea în perioada de doi ani,

Pentru a calcula capitalul mediu pe o perioadă de doi ani,

deci returnarea Dietz modificată este:

Rata internă de rentabilitate (neanualizată) în acest exemplu este de 125%:

deci, în acest caz, randamentul Dietz modificat este semnificativ mai mic decât IRR neunualizat. Această divergență între randamentul Dietz modificat și rata internă de rentabilitate neanualizată se datorează unui flux semnificativ în perioada respectivă și faptului că randamentele sunt mari.

Metoda simplă Dietz

Metoda Dietz modificată este diferită de metoda simplă Dietz , în care fluxurile de numerar sunt ponderate în mod egal, indiferent de momentul în care au avut loc în perioada de măsurare. Simplă metodă Dietz este un caz special al metodei modificate Dietz, în care se presupune că au loc la jumătatea perioadei sau echivalent fluxurile externe, repartizate uniform pe întreaga perioadă, în timp ce o astfel de ipoteză se face atunci când se utilizează metoda Dietz modificată , iar calendarul oricăror fluxuri externe este luat în considerare. Rețineți că, în exemplul de mai sus, fluxul are loc la jumătatea perioadei generale, care se potrivește cu ipoteza care stă la baza metodei simple Dietz. Aceasta înseamnă că returnarea Dietz simplă și returnarea Dietz modificată sunt aceleași în acest exemplu particular.

Ajustări

Dacă valoarea de început sau de sfârșit este zero sau ambele, datele de începere și / sau de încheiere trebuie ajustate pentru a acoperi perioada în care portofoliul are conținut.

Exemplu

Să presupunem că calculăm rentabilitatea anului calendaristic 2016 și că portofoliul este gol până vineri, 30 decembrie, un transfer în numerar de 1 milion EUR într-un cont care nu poartă dobânzi. Până la sfârșitul zilei, sâmbătă, 31 decembrie 2016, cursul de schimb între euro și dolarii din Hong Kong s-a modificat de la 8,1 HKD per EUR la 8,181, ceea ce reprezintă o creștere de 1% a valorii, măsurată în dolari din Hong Kong, deci dreptul răspunsul la întrebarea care este rentabilitatea în dolari din Hong Kong este intuitiv 1 la sută.

Cu toate acestea, aplicând orbește formula Dietz modificată, folosind o ipoteză de sincronizare a tranzacției la sfârșitul zilei, ponderarea zilei la intrarea de 8,1 m HKD pe 30 decembrie, cu o zi înainte de sfârșitul anului, este 1/366 și capitalul mediu se calculează astfel:

valoare de pornire + intrare × greutate = 0 + 8,1 m HKD × 1/366 = 22.131,15 HKD

iar câștigul este:

valoare finală - valoare inițială - intrare netă = 8.181.000 - 0 - 8.100.000 = 81.000 HKD

deci randamentul Dietz modificat este calculat ca:

câștig sau pierdere / capital mediu = 81.000 / 22.131,15 = 366%

Deci, care este randamentul corect, 1 la sută sau 366 la sută?

Interval de timp ajustat

Singurul răspuns sensibil la exemplul de mai sus este că rentabilitatea perioadei de deținere este fără echivoc de 1 la sută. Aceasta înseamnă că data de începere trebuie ajustată la data fluxului extern inițial. De asemenea, dacă portofoliul este gol la sfârșitul perioadei, data de încheiere ar trebui să fie ajustată la fluxul extern final. Valoarea finală este efectiv fluxul extern final, nu zero.

Randamentul anualizat utilizând o metodă simplă de înmulțire cu 1 la sută pe zi cu numărul de zile din an va da răspunsul 366 la sută, dar rentabilitatea perioadei de deținere este încă de 1 la sută.

Exemplu corectat

Exemplul de mai sus este corectat dacă data de începere este ajustată la sfârșitul zilei, la 30 decembrie, iar valoarea de început este acum 8,1 m HKD. Nu mai există fluxuri externe după aceea.

Câștigul sau pierderea corectată este același ca înainte:

valoare finală - valoare inițială = 8.181.000 - 8.100.000 = 81.000 HKD

dar capitalul mediu corectat este acum:

valoarea inițială + intrările nete ponderate = 8,1 m HKD

deci returnarea Dietz modificată corectată este acum:

câștig sau pierdere / capital mediu = 81.000 / 8,1 m = 1%

Al doilea exemplu

Să presupunem că o obligațiune este cumpărată pentru 1.128.728 HKD, inclusiv dobânzi și comisioane acumulate la data tranzacționării 14 noiembrie și vândute din nou trei zile mai târziu la data tranzacționării 17 noiembrie pentru 1.125.990 HKD (din nou, net de dobânzi și comisioane acumulate). Presupunând că tranzacțiile au loc la începutul zilei, care este randamentul modificat al perioadei de deținere Dietz în HKD pentru această deținere a obligațiunilor în cursul anului până la sfârșitul zilei de pe 17 noiembrie?

Răspuns

Răspunsul este că, în primul rând, referința la perioada de deținere până în prezent până la sfârșitul zilei din 17 noiembrie include atât achiziția, cât și vânzarea. Acest lucru înseamnă că perioada efectivă de deținere ajustată este de fapt de la achiziționarea la începutul zilei, la 14 noiembrie, până când este vândută trei zile mai târziu, la 17 noiembrie. Valoarea inițială ajustată este suma netă a achiziției, valoarea finală este suma netă a vânzării și nu există alte fluxuri externe.

valoarea de pornire = 1.128.728 HKD
valoarea finală = 1.125.990 HKD

Nu există fluxuri, deci câștigul sau pierderea este:

valoare finală - valoare inițială = 1.125.990 - 1.128.728 = -2.738 HKD

iar capitalul mediu este egal cu valoarea inițială, astfel încât randamentul Dietz modificat este:

câștig sau pierdere / capital mediu = -2,738 / 1.128.728 = -0,24% 2 dp

Contribuții - când nu se ajustează perioada de deținere

Această metodă de restricționare a calculului la perioada efectivă de deținere prin aplicarea unei date ajustate de început sau de sfârșit se aplică atunci când randamentul este calculat pe o investiție în mod izolat. Atunci când investiția face parte dintr-un portofoliu și ponderea investiției în portofoliu și contribuția acestei rentabilități la cea a portofoliului în ansamblu este necesară, este necesar să se compare ca și cum ar fi, în termeni de deținere comună perioadă.

Exemplu

Să presupunem că la începutul anului, un portofoliu conține numerar, în valoare de 10.000 USD, într-un cont care poartă dobânzi fără nicio taxă. La începutul celui de-al patrulea trimestru, 8.000 USD din acești bani sunt investiți în unele acțiuni în dolari SUA (în compania X). Investitorul aplică o strategie de cumpărare și deținere și nu există alte tranzacții pentru restul anului. La sfârșitul anului, acțiunile au crescut în valoare cu 10% până la 8.800 USD, iar dobânda de 100 USD este capitalizată în contul de numerar.

Care este rentabilitatea portofoliului pe parcursul anului? Care sunt contribuțiile din contul de numerar și acțiuni? În plus, care este rentabilitatea contului de numerar?

Răspuns

Valoarea finală a portofoliului este de 2.100 USD în numerar, plus acțiuni în valoare de 8.800 USD, care este în total 10.900 USD. A existat o creștere de 9% a valorii de la începutul anului. Nu există fluxuri externe în sau din portofoliu pe parcursul anului.

debite ponderate = 0

asa de

capital mediu = valoarea inițială = 10.000 USD

deci revenirea este:

câștig sau pierdere / capital mediu = 900 / 10.000 = 9%

Această rentabilitate a portofoliului de 9% se împarte între contribuția de 8% din 800 $ câștigat pe acțiuni și contribuția 1% din dobânda de 100 $ câștigată din contul de numerar, dar cum putem calcula mai general contribuțiile?

Primul pas este calcularea capitalului mediu din fiecare cont de numerar și a acțiunilor pe parcursul întregului an. Acestea ar trebui să însumeze capitalul mediu al portofoliului de 10.000 $ în ansamblu. Din capitalul mediu al fiecăreia dintre cele două componente ale portofoliului, putem calcula ponderile. Ponderea contului de numerar este capitalul mediu al contului de numerar, împărțit la capitalul mediu (10.000 USD) din portofoliu, iar ponderea acțiunilor este capitalul mediu al acțiunilor pe tot parcursul anului, împărțit la capitalul mediu a portofoliului.

Pentru comoditate, vom presupune că greutatea în timp a fluxului de 8.000 USD în numerar pentru plata acțiunilor este exact 1/4. Aceasta înseamnă că cele patru trimestre ale anului sunt tratate ca având o lungime egală.

Capitalul mediu al contului de numerar este:

capital mediu
= valoarea de pornire - greutatea în timp × cantitatea de ieșire
= 10.000 - 1 / 4 × 8.000 USD
= 10.000 - 2.000 USD
= 8.000 $

Capitalul mediu al acțiunilor din ultimul trimestru nu necesită calcul, deoarece nu există fluxuri după începutul ultimului trimestru. Este vorba de cei 8.000 de dolari investiți în acțiuni. Cu toate acestea, capitalul mediu al acțiunilor pe tot parcursul anului este altceva. Valoarea inițială a acțiunilor la începutul anului a fost zero și a existat un flux de 8.000 USD la începutul ultimului trimestru, deci:

capital mediu
= valoarea de pornire - greutatea în timp × cantitatea de ieșire
= 0 + 1 / 4 × 8.000 USD
= 2.000 USD

Putem vedea imediat că ponderea contului de numerar din portofoliu pe parcursul anului a fost:

capital mediu în contul de numerar / capital mediu în portofoliu
= 8.000 / 10.000
= 80%

iar ponderea acțiunilor a fost:

capital mediu în acțiuni / capital mediu în portofoliu
= 2.000 / 10.000
= 20%

care însumează 100 la sută.

Putem calcula rentabilitatea contului de numerar, care a fost:

câștig sau pierdere / capital mediu = 100 / 8.000 = 1,25%

Contribuția la rentabilitatea portofoliului este:

greutate × randament = 80% × 1,25% = 1%

Ce zici de contribuția la rentabilitatea portofoliului din acțiuni?

Rentabilitatea ajustată a perioadei de deținere a acțiunilor este de 10%. Dacă înmulțim acest lucru cu ponderea de 20% a acțiunilor din portofoliu, rezultatul este de doar 2%, dar contribuția corectă este de 8%.

Răspunsul este să folosiți rentabilitatea acțiunilor pe perioada neajustată a întregului an pentru a calcula contribuția:

Revenirea perioadei neajustate
= câștig sau pierdere / capital mediu mediu neajustat
= 800 / 2.000
= 40%

Apoi, contribuția acțiunilor la rentabilitatea portofoliului este:

greutate × revenire perioadă neajustată
= 20% × 40% = 8%

Aceasta nu înseamnă că rentabilitatea corectă a perioadei de deținere a acțiunilor este de 40 la sută, dar pentru calcularea contribuției, utilizați rentabilitatea perioadei neajustate, care este cifra de 40 la sută, nu rentabilitatea efectivă a perioadei de deținere de 10 la sută.

Taxe

Pentru a măsura randamentul net de comisioane, permiteți reducerea valorii portofoliului cu valoarea comisioanelor. Pentru a calcula randamentele brute de comisioane, compensați-le tratându-le ca un flux extern și excludeți comisioanele acumulate din evaluări.

Rata de rentabilitate anuală

Rețineți că randamentul Dietz modificat este un randament pe perioadă de deținere, nu o rată de rentabilitate anuală, cu excepția cazului în care perioada se întâmplă să fie de un an. Anualizarea, care este conversia rentabilității perioadei de deținere la o rată anuală de rentabilitate, este un proces separat.

Rentabilitate în funcție de bani

Metoda Dietz modificată este un exemplu de metodologie ponderată în bani (sau în dolari) (spre deosebire de ponderată în timp ). În special, dacă rentabilitatea Dietz modificată pentru două portofolii este și , măsurată pe un interval de timp comun de potrivire, atunci randamentul Dietz modificat pentru cele două portofolii reunite pe același interval de timp este media ponderată a celor două rentabilități:

unde ponderile portofoliilor depind de capitalul mediu pe intervalul de timp:

Randament legat versus randament real ponderat în timp

O alternativă la metoda Dietz modificată este de a lega geometric retururile Dietz modificate pentru perioade mai scurte. Metoda Dietz modificată legată este clasificată ca o metodă ponderată în timp, dar nu produce aceleași rezultate ca metoda ponderată în timp real , care necesită evaluări la momentul fiecărui flux de numerar.

Probleme

Probleme cu ipotezele de sincronizare

Uneori există dificultăți la calcularea sau descompunerea rentabilității portofoliului, dacă toate tranzacțiile sunt tratate ca având loc la un singur moment al zilei, cum ar fi sfârșitul zilei sau începutul zilei. Oricare ar fi metoda aplicată pentru a calcula randamentele, presupunerea că toate tranzacțiile au loc simultan la un moment dat în fiecare zi poate duce la erori.

De exemplu, luați în considerare un scenariu în care un portofoliu este gol la începutul unei zile, astfel încât valoarea de pornire A să fie zero. Există apoi un flux extern în acea zi de F = 100 USD. La sfârșitul zilei, prețurile pieței s-au mutat, iar valoarea finală este de 99 USD.

Dacă toate tranzacțiile sunt tratate ca având loc la sfârșitul zilei, atunci există valoarea zero de pornire A și valoarea zero pentru capitalul mediu, deoarece greutatea pe zi a intrării este zero, deci nu se poate calcula nicio rentabilitate Dietz modificată.

Unele astfel de probleme sunt rezolvate dacă metoda Dietz modificată este ajustată în continuare astfel încât să plaseze achizițiile la deschidere și vânzările la închidere, dar gestionarea mai sofisticată a excepțiilor produce rezultate mai bune.

Uneori există alte dificultăți la descompunerea rentabilității portofoliului, dacă toate tranzacțiile sunt tratate ca având loc într-un singur punct în timpul zilei.

De exemplu, luați în considerare deschiderea unui fond cu doar 100 USD dintr-o singură acțiune care se vinde cu 110 USD pe parcursul zilei. În aceeași zi, se achiziționează un alt stoc cu 110 USD, închizându-se cu o valoare de 120 USD. Randamentele pentru fiecare stoc sunt de 10% și 120/110 - 1 = 9,0909% (4 dp), iar randamentul portofoliului este de 20%. Ponderile activelor w i (spre deosebire de ponderile temporale W i ) necesare pentru a obține randamentele acestor două active pentru a reveni la rentabilitatea portofoliului sunt 1200% pentru prima acțiune și un negativ 1100% pentru a doua:

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

Astfel de greutăți sunt absurde, deoarece al doilea stoc nu este limitat.

Problema apare doar pentru că ziua este tratată ca un singur interval de timp discret.

Capital negativ sau mediu zero

În circumstanțe normale, capitalul mediu este pozitiv. Atunci când un flux intra-perioadă este suficient de mare și suficient de devreme, capitalul mediu poate fi negativ sau zero. Capitalul mediu negativ determină revenirea Dietz modificată să fie negativă atunci când există un profit și pozitivă atunci când există o pierdere. Aceasta seamănă cu comportamentul unei datorii sau poziții scurte, chiar dacă investiția nu este de fapt o datorie sau o poziție scurtă. În cazurile în care capitalul mediu este zero, nu se poate calcula rentabilitatea Dietz modificată. Dacă capitalul mediu este aproape de zero, randamentul Dietz modificat va fi mare (mare și pozitiv sau mare și negativ).

O soluție de soluție parțială implică, ca prim pas, captarea excepției, detectând, de exemplu, când valoarea inițială (sau prima intrare) este pozitivă și capitalul mediu este negativ. Apoi, în acest caz, utilizați metoda simplă de returnare, ajustând valoarea finală pentru ieșiri. Acest lucru este echivalent cu suma contribuțiilor constitutive, în care contribuțiile se bazează pe rentabilități simple și ponderi în funcție de valorile inițiale.

Exemplu

De exemplu, într-un scenariu în care doar o parte din exploatații sunt vândute, cu mult mai mult decât valoarea inițială totală, relativ devreme în perioadă:

La începutul primei zile, numărul acțiunilor este de 100
La începutul primei zile, prețul acțiunii este de 10 dolari
Valoarea inițială = 1.000 de dolari
La sfârșitul zilei 5, 80 de acțiuni sunt vândute la 15 dolari pe acțiune
La sfârșitul zilei 40, restul de 20 de acțiuni valorează 12,50 dolari pe acțiune

Câștigul sau pierderea este valoarea finală - valoarea inițială + ieșire:

Există un câștig, iar poziția este lungă, așa că ne-am aștepta intuitiv la o rentabilitate pozitivă.

Capitalul mediu în acest caz este:

Randamentul Dietz modificat în acest caz se strică, deoarece capitalul mediu este negativ, chiar dacă aceasta este o poziție lungă. Returnarea Dietz modificată în acest caz este:

În schimb, observăm că valoarea inițială este pozitivă, dar capitalul mediu este negativ. În plus, nu există vânzare scurtă. Cu alte cuvinte, în orice moment, numărul acțiunilor deținute este pozitiv.

Măsurăm apoi randamentul simplu din acțiunile vândute:

și din acțiunile încă deținute la final:

și combinați aceste randamente cu ponderile acestor două părți ale acțiunilor din poziția inițială, care sunt:

și respectiv.

Aceasta oferă contribuțiile la randamentul global, care sunt:

și respectiv.

Suma acestor contribuții este rentabilitatea:

Acest lucru este echivalent cu rentabilitatea simplă, ajustând valoarea finală pentru ieșiri:

Limitări

Această soluție are limitări. Este posibil doar dacă exploatațiile pot fi împărțite astfel.

Nu este ideal, din alte două motive, care nu acoperă toate cazurile și este incompatibil cu metoda Dietz modificată. Combinată cu contribuțiile Dietz modificate pentru alte active, suma contribuțiilor constituente nu va reuși să se adauge la randamentul global.

O altă situație în care capitalul mediu poate fi negativ este vânzarea în lipsă. În loc să investească prin cumpărarea de acțiuni, acțiunile sunt împrumutate și apoi vândute. O scădere a prețului acțiunilor are ca rezultat un profit în loc de o pierdere. Poziția este o datorie în loc de un activ. Dacă profitul este pozitiv, iar capitalul mediu este negativ, randamentul Dietz modificat este negativ, indicând faptul că, deși numărul acțiunilor este neschimbat, valoarea absolută a pasivului a scăzut.

În cazul unei achiziții, urmată de o vânzare de mai multe acțiuni decât cele cumpărate, rezultând o poziție scurtă (un număr negativ de acțiuni), capitalul mediu poate fi, de asemenea, negativ. Ceea ce era un activ în momentul achiziției a devenit o datorie după vânzare. Interpretarea revenirii Dietz modificate variază de la o situație la alta.

Visual Basic

Function georet_MD(myDates, myReturns, FlowMap, scaler)
' This function calculates the modified Dietz return of a time series
'
' Inputs.
'   myDates. Tx1 vector of dates
'   myReturns. Tx1 vector of financial returns
'   FlowMap. Nx2 matrix of Dates (left column) and flows (right column)
'   scaler. Scales the returns to the appropriate frequency
'
' Outputs.
'   Modified Dietz Returns.
'
' Note that all the dates of the flows need to exist in the date vector that is provided.
' when a flow is entered, it only starts accumulating after 1 period.
'
Dim i, j, T, N As Long
Dim matchFlows(), Tflows(), cumFlows() As Double
Dim np As Long
Dim AvFlows, TotFlows As Double

' Get dimensions
If StrComp(TypeName(myDates), "Range") = 0 Then
    T = myDates.Rows.Count
Else
    T = UBound(myDates, 1)
End If
If StrComp(TypeName(FlowMap), "Range") = 0 Then
    N = FlowMap.Rows.Count
Else
    N = UBound(FlowMap, 1)
End If

' Redim arrays
ReDim cumFlows(1 To T, 1 To 1)
ReDim matchFlows(1 To T, 1 To 1)
ReDim Tflows(1 To T, 1 To 1)

' Create a vector of Flows
For i = 1 To N
    j = Application.WorksheetFunction.Match(FlowMap(i, 1), myDates, True)
    matchFlows(j, 1) = FlowMap(i, 2)
    Tflows(j, 1) = 1 - (FlowMap(i, 1) - FlowMap(1, 1)) / (myDates(T, 1) - FlowMap(1, 1))
    If i = 1 Then np = T - j
Next i

' Cumulated Flows
For i = 1 To T
    If i = 1 Then
        cumFlows(i, 1) = matchFlows(i, 1)
    Else
        cumFlows(i, 1) = cumFlows(i - 1, 1) * (1 + myReturns(i, 1)) + matchFlows(i, 1)
    End If
Next i

AvFlows = Application.WorksheetFunction.SumProduct(matchFlows, Tflows)
TotFlows = Application.WorksheetFunction.Sum(matchFlows)

georet_MD = (1 + (cumFlows(T, 1) - TotFlows) / AvFlows) ^ (scaler / np) - 1

End Function

Metoda Java pentru returnarea Dietz modificată

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

Funcția Excel VBA pentru returnarea Dietz modificată

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

Vezi si

Referințe

Lecturi suplimentare

  • Carl Bacon. Portofoliu practic de măsurare și atribuire. West Sussex: Wiley, 2003. ISBN   0-470-85679-3
  • Bruce J. Feibel. Măsurarea performanței investiționale. New York: Wiley, 2003. ISBN   0-471-26849-6
  • Christopherson, Jon A. și colab. Măsurarea performanței portofoliului și benchmarking. McGraw-Hill, 2009. ISBN   9780071496650