修正ディーツ法[ 1 ] [ 2 ] [ 3 ]は、外部資金フローが存在する状況下での投資ポートフォリオの事後的(すなわち過去の)パフォーマンスを測定する方法です。(外部資金フローとは、ポートフォリオへの現金、証券、その他の金融商品の出入りなど、価値の移動を指し、反対方向への同時的な価値の移動はなく、ポートフォリオ内の投資からの収益(利子、クーポン、配当など)ではありません。)
修正ディーツ収益率を計算するには、外部資金流入を差し引いた価値の増減を、測定期間の平均資本で割ります。平均資本は、個々のキャッシュフローを、そのキャッシュフロー間の期間の長さに応じて加重平均したものです。期間の初めに発生するキャッシュフローは、終わりに発生するキャッシュフローよりも高い加重を持ちます。計算結果は、保有期間に対する収益率(パーセント)で表されます。
この収益計算方法は、現代のポートフォリオ運用で使用されています。これは、投資パフォーマンス協議会(IPC)がグローバル投資パフォーマンス基準(GIPS)の一部として推奨している収益計算方法の1つです。GIPSは、ポートフォリオ収益の国際的な計算方法に一貫性を持たせることを目的としています。[ 4 ]
この方法はピーター・O・ディーツにちなんで名付けられました。[ 5 ] ピーター・ディーツの研究の背後にある本来のアイデアは、当時利用可能だったかなり遅いコンピュータを使用した反復アプローチでかなりの時間がかかっていたため、IRR を計算するより迅速でコンピュータ負荷の少ない方法を見つけることでした。この研究は、銀行管理研究所 (BAI) のために作成されました。修正されたディーツ法は線形IRRです。
修正ディーツ法の式は以下のとおりです。
どこ
そして
重量 は、流れが発生した時点から、発生と期間の終了。フローが一日の終わりに発生すると仮定すると、 計算すると次のようになります
どこ
これは、資金の流れが一日の終わりに発生することを前提としています。資金の流れが一日の初めに発生する場合は、その資金がポートフォリオにさらに一日残るため、以下の式を使用してウェイトを計算してください。
修正ディーツ法は、真の時間加重収益率法に比べて、実質的な利点があります。それは、修正ディーツ収益率の計算では、外部資金フローが発生するたびに、その時点でのポートフォリオ評価を必要としない点です。内部収益率法も、この実質的な利点を修正ディーツ法と共有しています。逆に、ある時点でポートフォリオ評価が存在する場合、その時点におけるキャッシュフローの修正ディーツ評価は、実際の評価と一致する可能性は非常に低いと言えます。
技術の進歩に伴い、ほとんどのシステムでは、日次リターンを計算し、それを幾何級数的に連結することで、月次、四半期、年次、またはその他の期間のリターンを算出し、時間加重リターンを計算することができます。しかし、修正ディーツ法は、パフォーマンス分析において依然として有用です。なぜなら、修正ディーツ法には、資産に対する修正ディーツリターンを、平均投資資本に基づいて計算されたポートフォリオのウェイトと組み合わせることができ、その加重平均によってポートフォリオに対する修正ディーツリターンが得られるという利点があるからです。時間加重リターンでは、このようなことは不可能です。
修正ディーツ法は、内部収益率(IRR)法に比べて、結果を得るために試行錯誤を繰り返す必要がないという実用的な利点も持っている。[ 6 ]
修正ディーツ法は、単純な利子率の原理に基づいています。複利計算の原理を適用する内部収益率法に近似しますが、資金の流れと収益率が十分に大きい場合、修正ディーツ法の結果は内部収益率から大きく乖離します。
修正ディーツリターンが解決策です方程式に以下を代入します。
どこ
そして
これを(年率換算されていない)内部収益率(IRR)と比較してみましょう。IRR(より厳密に言えば、年率換算されていない保有期間収益率バージョンのIRR)は、方程式に以下を代入します。
ポートフォリオの価値が1年目の初めに100ドル、2年目の終わりに300ドルであり、1年目の終わり/2年目の初めに50ドルの資金流入があったとします。(さらに、どちらの年も閏年ではないため、2年間は同じ長さであるとします。)
2年間の損益を計算するには、
2年間の平均資本を計算するには、
したがって、修正されたディーツリターンは次のようになります。
この例における(年率換算されていない)内部収益率は125%です。
したがって、この場合、修正ディーツ収益率は年率換算されていない内部収益率よりも著しく低くなります。修正ディーツ収益率と年率換算されていない内部収益率のこの乖離は、期間中の資金フローが大きいことと、収益率が大きいことに起因します。資金フローがない場合、修正ディーツ収益率、年率換算されていない内部収益率、またはその他の保有期間収益率の計算方法の間には差はありません。資金フローが小さい場合、または収益率自体が小さい場合は、修正ディーツ収益率と年率換算されていない内部収益率の差は小さくなります。
内部収益率(IRR)は50%です。理由は以下のとおりです。
しかし、IRR法を用いた年率換算されていない保有期間収益率は125%です。年率50%を2期間にわたって複利計算すると、保有期間収益率は125%になります。
修正ディーツ法は、測定期間中に発生した時期に関係なくキャッシュフローを均等に加重する単純ディーツ法とは異なります。単純ディーツ法は修正ディーツ法の特殊なケースであり、外部フローは期間の中間点に発生するか、あるいは期間全体に均等に分散されると仮定されますが、修正ディーツ法ではそのような仮定は行われず、外部フローの発生時期が考慮されます。上記の例では、フローは全体の期間の中間点で発生しており、これは単純ディーツ法の前提と一致しています。つまり、この例では単純ディーツ法の収益率と修正ディーツ法の収益率は同じになります。
開始値または終了値のいずれか、あるいは両方がゼロの場合、ポートフォリオの内容が含まれる期間をカバーするように、開始日および/または終了日を調整する必要があります。
2016年の暦年リターンを計算すると仮定します。ポートフォリオは、12月30日(金)に無利息口座に100万ユーロの現金が振り込まれるまで空の状態でした。2016年12月31日(土)の終業までに、ユーロと香港ドルの為替レートは1ユーロあたり8.1香港ドルから8.181香港ドルに変化しました。これは香港ドル建てで1%の価値上昇です。したがって、香港ドル建てのリターンはいくらかという質問に対する正しい答えは、直感的に1%です。
しかし、修正ディーツ式を盲目的に適用し、取引のタイミングを日末時点と仮定すると、年末前日の12月30日に流入した810万香港ドルの日次加重は1/366となり、平均資本は次のように計算されます。
そしてその利益は次のとおりです。
したがって、修正ディーツリターンは次のように計算されます。
では、正しいリターンは1パーセントでしょうか、それとも366パーセントでしょうか?
上記の例に対する唯一妥当な答えは、保有期間のリターンが明確に1パーセントであるということです。つまり、開始日は最初の外部資金流入日に調整されるべきです。同様に、期間終了時にポートフォリオが空の場合、終了日は最後の外部資金流入日に調整されるべきです。最終値は実質的に最後の外部資金流入であり、ゼロではありません。
1日あたり1%の利回りに1年の日数を掛けるという単純な方法で年率換算すると366%になりますが、保有期間利回りは依然として1%です。
上記の例は、開始日を12月30日の終業時刻に調整すれば修正され、開始値は810万香港ドルとなります。その後、外部への資金流入はありません。
修正後の損益は以前と同じです。
しかし、修正後の平均資本は次のようになります。
したがって、修正後のディーツリターンは次のようになります。
仮に、ある債券が11月14日の取引日に、発生利息と手数料を含めて1,128,728香港ドルで購入され、3日後の11月17日の取引日に、発生利息と手数料を差し引いた後の金額で1,125,990香港ドルで売却されたとします。取引が1日の開始時に行われたと仮定した場合、11月17日の取引終了時までの年初来のこの債券保有に対する修正ディーツ保有期間収益率(香港ドル建て)はいくらでしょうか?
答えは、まず、11月17日の終値までの年初来保有期間には、購入と売却の両方が含まれるということです。つまり、実際の調整済み保有期間は、11月14日の始値での購入から、3日後の11月17日の売却までとなります。調整済み開始値は購入の純額、終了値は売却の純額であり、その他の外部資金の流れはありません。
流れがないため、利益または損失は次のようになります。
平均資本は開始値と等しいので、修正ディーツ収益率は次のようになる。
調整された開始日または終了日を適用することで計算を実際の保有期間に限定するこの方法は、投資のリターンを単独で計算する場合に適用されます。投資がポートフォリオの一部であり、ポートフォリオにおける投資の比重、およびポートフォリオ全体のリターンに対するそのリターンの貢献度が必要な場合は、共通の保有期間に基づいて、同等の投資を比較する必要があります。
年初に、手数料無料の利息が付く口座に1万ドルの現金がポートフォリオに含まれているとします。第4四半期の初めに、その現金のうち8,000ドルが米ドル建ての株式(X社)に投資されます。投資家はバイ・アンド・ホールド戦略を採用し、年末までそれ以上の取引は行われません。年末には、株価は10%上昇して8,800ドルになり、100ドルの利息が現金口座に計上されます。
ポートフォリオの年間収益率はいくらですか?現金口座と株式からの貢献額はそれぞれいくらですか?さらに、現金口座の収益率はいくらですか?
ポートフォリオの最終価値は、現金2,100ドルと株式8,800ドルを合わせた合計10,900ドルです。年初から9%の価値上昇がありました。この1年間で、ポートフォリオへの資金流入または流出はありませんでした。
それで
したがって、戻り値は次のようになります。
この9%のポートフォリオ収益は、株式で得た800ドルからの8%の貢献と、現金口座で得た100ドルの利息からの1%の貢献に分けられますが、より一般的に貢献度を計算するにはどうすればよいでしょうか?
まず、現金口座と株式それぞれの年間平均資本額を計算します。これらの合計は、ポートフォリオ全体の平均資本額である1万ドルに等しくなります。ポートフォリオを構成する2つの要素それぞれの平均資本額から、ウェイトを算出します。現金口座のウェイトは、現金口座の平均資本額をポートフォリオ全体の平均資本額(1万ドル)で割った値であり、株式のウェイトは、株式の年間平均資本額をポートフォリオ全体の平均資本額で割った値です。
便宜上、株式購入のための8,000ドルの現金支出の時間的重みは正確に1/4であると仮定します。これは、1年を4つの四半期に分け、それぞれの長さが等しいものとして扱うことを意味します。
現金口座の平均資本金は以下のとおりです。
直近四半期の株式の平均資本は、直近四半期の開始以降に資金の流入がないため、計算する必要はありません。それは株式に投資された8,000ドルです。しかし、年間を通じた株式の平均資本は異なります。年初の株式の開始価格はゼロであり、直近四半期の開始時に8,000ドルの資金流入があったため、次のようになります。
年間を通じてポートフォリオにおける現金口座の比重が以下の通りであったことがすぐにわかります。
そして、株式の重量は以下の通りでした。
合計すると100パーセントになります。
現金口座の収益率を計算したところ、以下のようになりました。
ポートフォリオのリターンへの貢献度は以下のとおりです。
株式がポートフォリオの収益にどれだけ貢献しているかはどうでしょうか?
株式の調整済み保有期間収益率は10%です。これをポートフォリオにおける当該株式の比率である20%で乗算すると、結果はわずか2%になりますが、正しい貢献度は8%です。
答えは、調整前の通年期間における株式の収益率を用いて貢献度を計算することです。
すると、株式がポートフォリオの収益に占める割合は次のようになります。
これは、株式の正しい保有期間収益率が40%であるという意味ではなく、貢献額の計算には、実際の10%の保有期間収益率ではなく、調整前の期間収益率である40%を使用するという意味です。
手数料控除後のリターンを測定するには、ポートフォリオの価値から手数料分を差し引きます。手数料控除前のリターンを計算するには、手数料を外部資金の流れとして扱い、未払手数料を評価額から除外します。
修正ディーツ収益率は、保有期間収益率であり、保有期間がたまたま1年である場合を除き、年率収益率ではないことに注意してください。保有期間収益率を年率収益率に変換する年率化は、別のプロセスです。
修正ディーツ法は、時間加重法とは対照的に、金額(またはドル)加重法の一例です。特に、2 つのポートフォリオの修正ディーツ収益率がそして共通の同期期間で測定した場合、同じ期間で2つのポートフォリオを合わせた修正ディーツ収益率は、2つの収益率の加重平均となる。
ポートフォリオのウェイトは、一定期間における平均資本に依存する。
修正ディーツ法に代わる方法として、修正ディーツ法の収益率をより短い期間で幾何級数的に連結する方法がある。連結された修正ディーツ法は時間加重法に分類されるが、各キャッシュフロー発生時点での評価を必要とする真の時間加重法と同じ結果は得られない。
ポートフォリオの収益率を計算または分解する際に、すべての取引が一日の終わりや始まりといった特定の時間帯に発生すると仮定すると、問題が生じる場合があります。収益率を計算する際にどのような方法を用いるにせよ、すべての取引が毎日同じ時間に同時に発生するという仮定は、誤りを招く可能性があります。
例えば、1日の始めにポートフォリオが空で、開始値Aがゼロであるとします。その後、その日にF = 100ドルの外部資金流入があったとします。1日の終わりまでに市場価格が変動し、最終値は99ドルになります。
すべての取引が一日の終わりに発生したとみなされる場合、流入に対する日次加重がゼロであるため、開始値Aはゼロとなり、平均資本の値もゼロとなる。したがって、修正ディーツ収益率を計算することはできない。
修正版ディーツ法をさらに調整して、購入を始値に、販売を終値にするようにすれば、こうした問題の一部は解決されるが、より高度な例外処理の方がより良い結果が得られる。
ポートフォリオのリターンを分解する際に、すべての取引が1日のうちの1つの時点で発生したものとして扱うと、他の問題が生じる場合がある。
例えば、あるファンドが100ドルの単一銘柄で運用を開始し、その銘柄が日中に110ドルで売却されたとします。同じ日に、別の銘柄が110ドルで購入され、120ドルで取引を終えました。各銘柄のリターンはそれぞれ10%と120/110 − 1 = 9.0909%(小数点以下4桁)であり、ポートフォリオのリターンは20%です。これら2つの資産のリターンをポートフォリオのリターンに合わせるために必要な資産ウェイトw i(時間ウェイトW iとは異なります)は、最初の銘柄では1200%、2番目の銘柄ではマイナス1100%です。
このような加重は不合理だ。なぜなら、2番目の銘柄は空売りされていないからだ。
問題が生じるのは、一日を単一の独立した時間間隔として扱っているからに他ならない。
通常、平均資本はプラスになります。期間内の資金流出が大きく、かつ早期に発生した場合、平均資本はマイナスまたはゼロになることがあります。平均資本がマイナスの場合、利益が出ているときは修正ディーツリターンがマイナスになり、損失が出ているときはプラスになります。これは、投資が実際には負債や空売りポジションではない場合でも、負債や空売りポジションの挙動に似ています。平均資本がゼロの場合、修正ディーツリターンは計算できません。平均資本がゼロに近い場合、修正ディーツリターンは大きくなります(大きくプラス、または大きくマイナス)。
部分的な回避策の一つとして、まず例外を捕捉する方法があります。例えば、開始値(または最初の流入額)が正で、平均資本が負の場合を検出します。この場合、単純リターン法を用いて、流出額に応じて最終値を調整します。これは、構成要素の拠出額の合計に相当し、拠出額は開始値に応じた単純リターンと重みに基づいて算出されます。
例えば、保有資産の一部のみが、期間の比較的早い段階で、当初の総価値を大幅に上回る価格で売却されるシナリオでは、次のようになります。
利益または損失は、最終値-開始値+流出額で計算されます。
利益が出ており、ポジションはロングなので、直感的にはプラスのリターンが期待できるだろう。
この場合の平均資本金は以下のとおりです。
この場合、平均資本がマイナスとなるため、修正ディーツリターンは正しくありません。これはロングポジションであるにもかかわらずです。この場合の修正ディーツリターンは次のとおりです。
その代わりに、開始時の値はプラスであるものの、平均資本はマイナスであることがわかります。さらに、空売りは行われていません。つまり、保有株数は常にプラスです。
次に、売却した株式からの単純収益率を測定します。
そして期末時点で保有していた株式から:
そして、これらの収益を、初期ポジション内の株式のこれら2つの部分のウェイトと組み合わせます。そのウェイトは次のとおりです。
これにより、全体の収益への貢献度が明らかになります。
これらの貢献の合計が収益となります。
これは、単純なリターン計算に相当し、最終値を流出額に合わせて調整したものです。
この回避策には限界がある。保有資産をこのように分割できる場合にのみ可能となる。
さらに2つの理由から、これは理想的とは言えません。1つは、すべてのケースを網羅しているわけではないこと、もう1つは、修正ディーツ法と矛盾していることです。他の資産に対する修正ディーツ法による貢献度と組み合わせると、構成要素の貢献度の合計が全体の収益率と一致しなくなります。
平均資本がマイナスになるもう一つのケースは、空売りです。株式を購入して投資する代わりに、株式を借りて売却します。株価の下落は損失ではなく利益をもたらします。このポジションは資産ではなく負債となります。利益がプラスで平均資本がマイナスの場合、修正ディーツ収益率はマイナスとなり、株式数は変わらないものの、負債の絶対値が縮小したことを示します。
株式を購入した後、購入数よりも多くの株式を売却してショートポジション(株式数がマイナス)になった場合、平均資本もマイナスになる可能性があります。購入時には資産であったものが、売却後は負債となるためです。修正ディーツ収益率の解釈は、状況によって異なります。
関数georet_MD ( myDates , myReturns , FlowMap , scaler ) ' この関数は、時系列の修正ディーツリターンを計算します。 ' ' 入力。' myDates。日付の Tx1 ベクトル' myReturns。財務リターンの Tx1 ベクトル' FlowMap。日付 (左列) とフロー (右列) の Nx2 行列' scaler。リターンを適切な頻度にスケーリングします。 ' ' 出力。' 修正ディーツリターン。' ' 指定された日付ベクトルには、フローのすべての日付が存在する必要があることに注意してください。' フローが入力されると、1 期間後にのみ累積が開始されます。' Dim i , j , T , N As Long Dim matchFlows (), Tflows (), cumFlows () As Double Dim np As Long Dim AvFlows , TotFlows As Double' ディメンションを取得します。StrComp ( TypeName ( myDates ), "Range" ) = 0の場合、T = myDates . Rows . Countそれ以外の場合、 T = UBound ( myDates , 1 )を実行します。StrComp ( TypeName ( FlowMap ), "Range" ) = 0の場合、N = FlowMap . Rows . Countそれ以外の場合、 N = UBound ( FlowMap , 1 )を実行します。' 配列のサイズ変更 ReDim cumFlows ( 1 To T , 1 To 1 ) ReDim matchFlows ( 1 To T , 1 To 1 ) ReDim Tflows ( 1 To T , 1 To 1 )' フローのベクトルを作成します。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' 累積フローi = 1からTまでi = 1の場合、cumFlows ( i , 1 ) = matchFlows ( i , 1 )それ以外の場合、cumFlows ( i , 1 ) = cumFlows ( i - 1 , 1 ) * ( 1 + myReturns ( i , 1 )) + matchFlows ( i , 1 ) End If Next iAvFlows = Application.WorksheetFunction.SumProduct ( matchFlows , Tflows ) TotFlows = Application.WorksheetFunction.Sum ( matchFlows )georet_MD = ( 1 + ( cumFlows ( T , 1 ) - TotFlows ) / AvFlows ) ^ ( scaler / np ) - 1関数終了private static double modifiedDietz ( double emv , double bmv , double cashFlow [] , int numCD , int numD [] ) {/* emv: 期末市場価値 * bmv: 期首市場価値 * cashFlow[]: キャッシュフロー * numCD: 期間内の実際の日数 * numD[]: 期間の開始日から cashFlow[] の日付までの日数 */double md = -99999 ; // デバッグ番号で修正済みディーツを初期化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 ; //合計時間加重キャッシュフローfor ( int i = 0 ; i < cashFlow.length ; i ++ ) { ttwcf += weight [ i ] * cashFlow [ i ] ; }double tncf = 0 ; //総正味キャッシュフロー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 ; }Public Function MDIETZ ( dStartValue As Double , dEndValue As Double , iPeriod As Integer , rCash As Range , rDays As Range ) As Double'Jelle-Jeroen Lamkamp 2008年1月10日Dim i As Integer : Dim Cash () As Double : Dim Days () As Integer Dim Cell As Range : Dim SumCash As Double : Dim TempSum As Double'エラー処理rCash.Cells.Count < > rDays.Cells.Countの場合、MDIETZ = CVErr ( xlErrValue ) :関数を終了します。Application.WorksheetFunction.Max ( rDays ) > iPeriodの場合、MDIETZ = CVErr ( xlErrValue ) :関数を終了します。ReDim Cash ( rCash . Cells . Count - 1 ) ReDim Days ( rDays . Cells . Count - 1 )i = 0 rCashの各セルについてCash ( i ) = Cell . Value : i = i + 1次のセルi = 0 rDaysの各セルについてDays ( i ) = Cell.Value : i = i + 1次のセルSumCash = Application.WorksheetFunction.Sum ( rCash )TempSum = 0 For i = 0 To ( rCash . Cells . Count - 1 ) TempSum = TempSum + ((( iPeriod - Days ( i )) / iPeriod ) * Cash ( i )) Next iMDIETZ = ( dEndValue - dStartValue - SumCash ) / ( dStartValue + TempSum )関数終了1966年に画期的な著作『年金基金:投資パフォーマンスの測定』を出版した。金融サービス業界にサービスを提供する米国拠点の組織である銀行管理協会(BAI)は、その後、ディーツの研究に基づいて収益率の計算ガイドラインを策定した。
方法を少し改良したものが、日加重法、または修正ディーツ法です。この方法は、キャッシュフローと期首との間の時間に対応する係数でキャッシュフローを調整します。
これらの収益計算方法の1つである修正ディーツ法は、現在でも定期的な投資収益を計算する最も一般的な方法です。