本ページでは、一般的な投資収益率の計算方法について説明します。

基本的な概念

投資収益率とは、特定の統計期間における特定の資産ポートフォリオ(portfolio)の投資パフォーマンスを示します。

資産ポートフォリオには、1つの投資対象 (アカウント) や複数の投資対象が含まれることがあります。また、ポートフォリオには現金が含まれる場合があります。現金を投資対象に含めるのは直感に反するかもしれませんが、ポートフォリオ内で現金が占める割合は、しばしば投資パフォーマンスに重要な影響を与えるため、収益率を計算する際に現金ポジションを無視すべきではありません。ポートフォリオにアカウントが1つだけ含まれている場合、そのポートフォリオの収益率はそのアカウントの収益率と同じになります。

統計期間は、指定された一定の期間を指し、期間が始まる時点を期初、期間が終わる時点が期末と呼びます。一般的な統計期間として、1年や半年があります。統計期間がちょうど1年でない場合には、収益率を年率換算する方法がいくつあります。TataruBookでは、任意の日数を単位として統計期間を指定でき、収益率は年率換算されません。

ポートフォリオの市場価値(または価値)は、ポートフォリオ内のすべての資産が特定の通貨で換算されたのです。この通貨は、TataruBookでは標準資産と呼ばれます。

外部キャッシュフロー(external flows)とは、ポートフォリオは外部との間で生じるが、投資による収益とは異なる価値の流れを指します。ポートフォリオに流入するものは資金の流入、ポートフォリオから流出するものは資金の流出と呼ばれます。例えば、家計全体の資産をポートフォリオと見なした場合、家族の給料や日常的な消費支出は一般的な外部キャッシュフローに該当します。一方で、家族間の送金や、ポートフォリオ内のアカウントで行われる現金を用いた株式購入などは、外部キャッシュフローには含まれません。利子やクーポン、配当金などの投資による収益も外部キャッシュフローではなく、投資収益として発生後はポートフォリオ内に保持されます。収益率を計算する際には、外部キャッシュフローを補正しないと収益率が正確に反映されません。

外部キャッシュフローがない場合の計算方法

期初にポートフォリオの市場価値が\(V_s\)であり、期末にポートフォリオの市場価値が\(V_e\)であると仮定すると、収益率 \(R\)は次のように計算されます。

\[R = \frac{V_e - V_s}{V_s}\]

\(V_e\)には、統計期間中にポートフォリオが取得したすべての利子、クーポン、配当などの収益が含まれることに注意してください。これは、期末の投資対象の市場価値だけではありません。

例:ポートフォリオに株式が1つのみ含まれており、期初に1 株あたり\(200\)円で\(100\)株を保有していると仮定します。この場合、ポートフォリオの期初価値は\(200 \times 100 = 20,000\)です。統計期間中、この株式が1株あたり\(10\)円の配当金を取得し、期末に株式価格は 1 株あたり\(196\)円であると仮定すると、受け取る配当金の合計は\(196 \times 100 = 19,600\)です。したがって、\(V_e = 19,600 + 1,000 = 20,600\)元,收益率\(\displaystyle R = \frac{600}{20,000} = 3\%\)となります。

このアルゴリズムはシンプルで理解しやすいですが、統計期間中に外部キャッシュフローがない場合にのみ適用可能です。上記の例では、投資者が統計期間中に同じ\(200\)円の価格で\(100\)株を追加購入した場合、期末のポートフォリオの市場価値は\(41,200\)円 (上記の例の2倍)となり、元の式に沿って算出された収益率\(\displaystyle R = \frac{41,200 - 20,000}{20,000} = 106\%\)となりますが、この収益率は明らかに不正確です。

一部のユーザーは、「統計期間中の資金流入の価値を期初の市場価値\(V_s\)に追加してもよいのではないか」と考えるかもしれません。本例では資金の流入のみで資金の流出がないため、問題はありませんが、実際の状況はもっと複雑です。たとえば、短期トレーダーの場合、毎日のように大量の資金の流入と流出が発生することがあるので、すべての資金流入の市場価値だけを追加すると、収益率の計算結果依然として不正確なままです。

明らかに、外部キャッシュフローがもたらす影響を補正する方法が必要です。以下にいくつかの一般的な方法を説明します。

ディーツ簡便法

ディーツ簡便法では、統計期間中のすべての資金の流入と流出の価値を累計します(資金流入の符号はプラス、資金流出の符号はマイナスです)。その結果、純流入額\(F\)を取得し(純流出であれば負の値になります)。次に、その純流入額の半分を期初の価値に加算します。つまり、

\[R = \frac{V_e - V_s - F}{V_s + \displaystyle \frac{F}{2}}\]

ディーツ簡便法は、資金の流入と流出が統計期間を通じてほぼ均等に発生すると仮定しています。そのため、統計期間の中間点で純流入が発生したものと見なすことができます。

例: ポートフォリオに株式が1つしかなく、統計期間が\(3\) 日間である場合、各日の株価、資金の流入・流出、および市場価値を次のように仮定します。

日目 株価 新規株数 キャッシュフロー 保有株式数 市場価値
0 10 0 0 10 100
1 12 5 60 15 180
2 11 0 0 15 165

この条件で、ディーツ簡便法を用いて計算した収益率は次のようになります。

\[R = \frac{V_e - V_s - F}{V_s + \displaystyle \frac{F}{2}} = \frac{165 - 100 - 60}{100 + \displaystyle \frac{60}{2}} = \frac{5}{130} \approx 3.85\%\]

ディーツ簡便法には、資金の流入・流出が統計期間内で均等に分布していない場合、計算結果が不正確になるという欠点があります。以下のような極端なケースを仮定します。 ポートフォリオの統計期間を1年間とし、初期の市場価値を\(0\)とします。\(2\)日目に大規模な資金が流入し、その資金で株式を購入しました。そして\(364\)日目に、流入時とほぼ同じ市場価値の資金が流出しました。統計期間全体での純流入額の絶対値は非常に小さく(場合によっては\(0\)になることもあります)。その結果、前述の数式における分母が非常に小さな値(または\(0\))となり、算出される収益率には大きな誤差が生じます。

ディーツ簡便法には欠点もありますが、個人や家族全体の資金の流入と流出は、ディーツ簡便法の仮定に近い場合が多くあります。つまり、資金の流入と流出が時間的に大まかに均等に分布しているという前提です。そのため、すべての内部アカウントを含むポートフォリオの収益率を計算する際、TataruBookではディーツ簡便法を使用しています。(portfolio_statsビューを参照してください)

修正ディーツ法

修正ディーツ法簡便ディーツ法の欠点を補うため、統計期間の中間点で純流入が1回発生するのではなく、実際の資金の流入と流出に基づいて統計期間全体の平均市場価値を算出し、その平均市場価値を分母として使用します:

\[R = \frac{V_e - V_s - F}{V_s + \displaystyle \sum_{i=1}^{n} W_i \times F_i}\]

ここで、\(F = \displaystyle \sum_{i=1}^{n} F_i\)は統計期間全体での純流入額を表します。\(n\)は資金の流入および流出の回数の合計です。\(F_i\)は第\(i\)回目の資金流入または流出の価値表し、流入は正の値、流出は負の値となります。\(W_i\)は第\(i\)回目の資金流入または流出の重み(構成比率)を表し、この重みは流入または流出が発生した時点に基づいて計算されます。つまり:

ここで、\(T\)統計期間の長さ(時間)を表し、\(t_i\)は期初から第\(i\)回目の資金流入または流出が発生するまでに経過した時間を示します。流入または流出が早い時期に発生するほど、その重みが大きくなり、収益率に与える影響も大きくなります。

例:統計期間が\(365\)日間である場合、各日の株価、資金の流入・流出、および市場価値を次のように仮定します(変化がない日は省略します)。

日目 株価 新規株数 キャッシュフロー 保有株式数 市場価値
0 10 0 0 0 0
1 10 1100 11000 1100 11000
364 11 -1000 -11000 100 1100
365 11 0 0 100 1100

修正ディーツ法を用いて計算した収益率の過程は次のようになります:

\[W_0 = \frac{365 - 1}{365} \approx 0.997\] \[W_1 = \frac{365 - 364}{365} \approx 0.003\] \[R = \frac{V_e - V_s - F}{V_s + \displaystyle \sum_{i=1}^{n} W_i \times F_i} \approx \frac{1100 - 0 - 0}{0 + 0.997 \times 11000 - 0.003 \times 11000} \approx 10\%\]

この計算結果は直感的です。なぜなら、株価が\(10\)から\(11\)に上昇したのは、ちょうど\(10\%\)の上昇だからです。一方、本例にディーツ簡便法を用いて計算した場合、分母が\(0\)となり結果を得ることができません。

一般的に、投資収益が時間の経過とともに安定して増加する場合 (例: 預金の利子や通貨基金の収益など)、修正ディーツ法で計算された収益率は非常に正確です。ただし、投資対象の価格が大きく変動する場合、修正ディーツ法で計算された結果に少なからぬ偏りが生じる可能性があります。上記の例では、資金の流入が\(1\)日目ではなく\(363\)日目に発生した場合、計算される平均市場価値は小さくなるため、収益率が非常に大きな数値となり、実際の収益率と一致しなくなります。

修正ディーツ法による利子収益の計算において高い精度を持つため、TataruBookでは各アカウントの利子率の計算する際に修正ディーツ法を使用しています。(interest_ratesを参照してください。)

内部收益率(IRR)

内部收益率とは、すべての資金の流入や流出にける正味現在価値がちょうど\(0\)になる収益率を指します。分かりやすく言うと、ポートフォリオの市場価値が固定された収益率\(R\)で一貫して増加していると仮定した場合、この仮定のもとで、ポートフォリオの実際の期初市場価値と資金の流入・流出が、期末の市場価値と正確に一致する場合、その仮定された収益率\(R\)が内部収益率となります。

内部収益率の計算には特別な要件があります。資金の流入や流出は一定の時間間隔で発生する必要があり、この時間間隔の長さに対応する収益率\(R\)を計算する必要があります。時間間隔\(T\)ごとに資金の流入や流出\(F i\)があると仮定した場合、統計期間\(T\)における内部収益率\(R\)は次の方程式の解となります。

\[\sum_{i=0}^{n} \frac{F_i}{(1 + R)^i} = 0\]

注: 内部収益率を計算する場合、資金流入の\(F i\)は負数、資金流出の\(F i\)は正数とします。この符号の取り扱いは、他の方法で定義されているものとは逆です。また、\(F 0\)は期初の市場価値の反数であり、すなわち\(F 0 = − V s\)です。\(F n\)は期末の市場価値であり、すなわち\(F n =V e\)です。言い換えれば、期初の市場価値を1回の資金流入、期末の市場価値を1回の資金流出と見なします。

例: 統計期間が\(3\)年間であり、ポートフォリオでは1年ごとに次のような資金の流れがあると仮定します。

年目 キャッシャーフロー
0 -123400
1 36200
2 54800
3 48100

このとき、内部収益率は次の方程式の解となります。

\[\sum_{i=0}^{n} \frac{F_i}{(1 + R)^i} = -123400 + \frac{36200}{(1 + R)} + \frac{54800}{(1 + R)^2} + \frac{48100}{(1 + R)^3} = 0\]

この方程式を解くと、一年の内部収益率は\(R \approx 5.96\%\)となります。

内部収益率は、現実世界で広く応用されています。たとえば、毎月一定額の返済するローンでは、内部収益率がそのローンの実質的な利率を示します。ただし、内部収益率には多くの欠点もあります。たとえば、資金の流入や流出が固定の時間間隔で発生しない場合、計算が困難になります。この場合、日単位で資金の流入と流出を処理し、資金の流入や流出がない日を\(F_i = 0\)として大まかに計算することができます。ただし、このようにして得られた内部収益率は、元の統計期間の収益率ではなく、1日あたりの収益率を示します。この1日あたりの収益率を年率に換算したら、大きな偏りが生じる可能性があります。

一例として、統計期間が1年間の投資ポートフォリオを挙げます。このポートフォリオでは、期初の市場価値が\(100\)で、初日の終了時に\(101\)が流出しました。その後、資金の流入や流出は一切なく、期末の市場価値は\(0\)となりました。この場合、計算された内部収益率は1日あたり\(1\%\)です。この収益率を単純に年率換算すると、\((1 + 0.01)^{365} \approx 37.78\)倍となります。明らかに、この年率換算値は著しく歪んでいます。

さらに、内部収益率には別の欠点があります。それは、計算に高次方程式を解く必要があるため、計算量が非常に多く、手計算はほぼ不可能であり、プログラムを使用しなければ解くことができない点です。

SQLite データベースやPythonの標準ライブラリには、内部収益率を計算する機能が備わっていません。そのため、TataruBookではソフトウェアの依存性を増やしたり、応答時間を長くしたりしないよう、内部収益率を計算する機能は提供していません。ただし、TataruBookではperiods_cash_flowsビューを提供しています。このビューでは、ポートフォリオおける日ごとの資金の流入・流出の市場価値を表示します。このビューのデータを Excel にコピーし、XIRR関数をすることで、すべての内部アカウントを1つのポートフォリオとして内部収益率を計算できます。

時間加重収益率

時間加重収益率(TWR)は、次のような考え方に基づいています。任意の2回の資金流入または流出の間の期間では、資金の流入や流出が発生しないため、このサブ期間については、外部キャッシュフローがない場合の計算方法を使用して収益率を求めることができます。その後、すべてのサブ期間の収益率を掛け合わせることで、総収益率を得ることができます。

時間加重収益率を計算するためには、投資ポートフォリオの期初と期末の市場価値だけでなく、各資金流入や流出時のポートフォリオの市場価値も把握しておく必要があります。資金流入および流出が\(n - 1\)回発生すると仮定すると、 期初の市場価値は\(V_0 = V_s\)、 期末の市場価値は\(V_n = V_e\)で、さらに\(V_i\)は第\(i\)回目の流入や流出\(F_i\)が発生した直後の市場価値であるとします。このとき、時間加重収益率\(R\)次の方程式の解となります。

\[1 + R = \frac{V_1 - F_1}{V_0} \times \frac{V_2 - F_2}{V_1} \times \frac{V_3 - F_3}{V_2} \times \dots \times \frac{V_{n-1} - F_{n-1}}{V_{n-2}} \times \frac{V_{n} - F_{n}}{V_{n-1}}\]

例: ポートフォリオに株式が1つだけあり、統計期間が \(2\)年で、期初および各年末の株価や資金の流入・流出が次のように仮定されているとします。

年目 株価 新規株数 キャッシュフロー 保有株式数 市場価値
0 10 0 0 50 500
1 20 50 1000 100 2000
2 15 0 0 100 1500

時間加重収益率は次のようになります。

\[\frac{V_1 - F_1}{V_0} \times \frac{V_2 - F_2}{V_1} - 1 = \frac{2000 - 1000}{500} \times \frac{1500 - 0}{2000} - 1 = 2 \times 0.75 - 1 = 50\%\]

この収益率は、実際には株価そのものの変化率であり、資金の流入・流出が実質的な収益に与える影響は反映されていません。このポートフォリオの実際の利益率を見みると、期初価値が\(500\)、途中の追加投資が\(1000\)、期末価値が\(1500\)となり、実際の利益率は\(0\)であることがわかります。これは時間加重収益率と一致しません。

ただし、時間加重収益率の特徴として、ポートフォリオ全体を1つのファンドと見なし、資金の流入と流出をファンドの購入や解約に相当するものとして扱います。時間加重収益率は、購入解約による影響を排除し、ファンドそのものの投資パフォーマンスだけを反映することを目的としています。このため、時間加重収益率は時間加重リターンとも呼ばれることがあります。

ポートフォリオの資金の流入と流出がポートフォリオマネージャーによって管理されていない場合、時間加重収益率はマネージャーの投資成果を適切に反映します。しかし、マネージャー自身がポートフォリオの資金の流入と流出を管理している場合は、上記の例のように、時間加重収益率は実際の収益状況を正確に反映しないことがあります。

TataruBookでは、時間加重収益率を計算する機能は提供されていません。これは、資金の流入や流出が発生するたびにポートフォリオの市場価値を計算する必要があるためです。この要件は、すべての非標準資産の価格を毎回提示することを意味しますが、これは個人や家庭の記帳作業には簡単ではありません。将来的には、状況に応じてTataruBookに時間加重収益率を計算する機能を追加する可能性があります。

最小初期資金法

ポートフォリオに投資商品が1つだけ存在する場合、すべての外部キャッシュフローは、この投資商品の買入・売却操作に該当します。仮想の現金アカウントをポートフォリオに追加し、この現金アカウントの市場価値が、統計期間内のすべての買入・売却操作を満たすと仮定します。 具体的には、各買入操作は現金アカウントから投資商品のアカウントへ市場価値を移転するものと見なし、各売却操作はその逆に、投資商品のアカウントから現金アカウントへ市場価値を移転するものと見なします。このようにして、元々の外部キャッシュフローはすべて、ポートフォリオ内の投資アカウントと現金アカウント間の内部キャッシュフローに変換されます。この新しいポートフォリオでは、外部キャッシュフローはなくなり、外部キャッシュフローがない場合の計算方法を適用して収益率を算出できます。

実際の収益率を最も正確に算出するためには、仮想の現金アカウントに含まれる期初の市場価値を可能な限り小さくする必要があります。ただし、すべての売買操作を完了するのに十分な範囲でなければなりません。この仮想の現金アカウントにおける最小限の期初市場価値は、最小初期資金\(C_s\)と呼ばれます。最小初期資金\(C_s\)を算出するには、次の手順を使用します。

  • まず、\(C_s = 0\)仮定します。この仮定のもとで、統計期間中に現金アカウントの市場価値がマイナスにならない場合、\(0\)が最小初期資金となります。
  • 一方で、統計期間中に現金アカウントの市場価値がマイナスになる場合は、その中から絶対値が最大の負の値を見つけ、その絶対値を最小初期資金\(C_s\)とします。 このようにして、統計期間中に現金アカウントの市場価値がマイナスになることを防ぐことができます。
\[C_s = \text{max}(0, F_1, F_1 + F_2, F_1 + F_2 + F_3, \dots, \sum_{i=1}^{n}F_i)\]

上記の数式では、\(F_i\)は第\(i\)回目の資金流入または流出の市場価値を示します(流入の場合はプラス、流出の場合はマイナス)。この流入と流出は元のポートフォリオの視点から見たものです。一方、新しいポートフォリオの視点から見ると、資金の流入は現金アカウントから投資商品のアカウントに市場価値が移転することを意味し、それによって現金アカウントの市場価値が減少します。したがって、現金アカウントの残高は、すでに\(F_i\)を累積した結果の反数であり、再度反転させる必要はありません。

最小初期現金法を用いて推算すると、期末時点で仮想の現金アカウントの市場価値は\(C_e\)となります。

\[C_e = C_s - \sum_{i=1}^{n}F_i\]

收益率\(R\)は次のように計算されます。

\[R = \frac{(V_e + C_e) - (V_s + C_s)}{V_s + C_s}\]

例1: 元のポートフォリオに株式が1つだけあり、統計期間が\(4\)日で、毎日の株価や資金の流入・流出が次のように仮定されているとします。

日目 株価 新規株数 キャッシュフロー 保有株式数 市場価値
0 10 0 0 10 100
1 12 5 60 15 180
2 15 -6 -90 9 135
3 11 0 0 9 99

\(1\)日目に市場価値が\(60\)の資金が流入したため、仮想の現金アカウントの最小初期資金は \(C_s = 60\)となります。\(2\)日目に市場価値が\(90\)の資金が流出したため、期末時点で仮想の現金アカウントの市場価値は\(C_e = 90\)となります。収益率は次のように計算されます。

\[R = \frac{(99 + 90) - (100 + 60)}{100 + 60} = 18.125\%\]

なお、本例では、資金の流入と流出の順序を入れ替えた場合、仮想の現金アカウントの最小初期資金はこの数値になりません。

例2: 上記の例では、\(1\)日目と\(2\)日目のデータを交換すると、毎日の株価や資金の流入・流出が次のようになります。

日目 株価 新規株数 キャッシュフロー 保有株式数 市場価値
0 10 0 0 10 100
1 15 -6 -90 4 60
2 12 5 60 9 108
3 11 0 0 9 99

\(1\)日目に市場価値が\(90\)の資金が流出したため、仮想の現金アカウントの市場価値は\(90\)増加します。\(2\)日目には市場価値が\(60\)の資金が流入しましたが、この時点で仮想の現金アカウントの市場価値は流入をカバーするのに十分であり、流入後には市場価値\(30\)が残ります。したがって、この仮想の現金アカウントは期初に市場価値を持つ必要がなく、最小初期資金は\(0\)となります。収益率は次のように計算されます。

\[R = \frac{(99 + 30) - (100 + 0)}{100 + 0} = 29\%\]

価格が変動する単一の投資商品の場合、最小初期資金法で計算された収益率は、さまざまな資金の流入や流出の状況においても合理的な結果を得ることができます。そのため、単一の非標準資産を含むアカウントの収益率を計算する際、TataruBook は最小初期資金法を使用します。return_on_sharesビューを参照してください。