mcpField
T
time-value-of-money

time-value-of-money

github.com/joellewisその他218719 回インストール15 週間前に更新
リポジトリ

time-value-of-money について

time-value-of-moneyは、キャッシュフローの時間価値を計算するための、金融学習者や実務家向けスキルです。複利、年金、NPV、IRR、ローンの償却を扱い、Python実装と計算例の検証機能を備えています。

主な機能

  1. 01現在価値と将来価値の計算
  2. 02離散・連続複利
  3. 03年金と永久年金の評価
  4. 04キャッシュフローのNPVとIRR
  5. 05ローン償却スケジュール
  6. 06Pythonデモと検証

活用シーン

  1. 01異なる時点のキャッシュフローを比較する
  2. 02NPVまたはIRRでプロジェクトを評価する
  3. 03ローンの返済額と残高を計算する
  4. 04計算例を使って金融公式を検証する

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/joellewis/finance_skills --skill time-value-of-money

インストール後、Claude Code で/time-value-of-moneyを入力して読み込まれたか確認します。

同梱ファイルscripts/time_value_of_money.py

詳細

貨幣の時間価値

基本概念

将来価値(FV)

現在の金額が、1期間あたりの利率 r で n 期間利息を得た後の価値です。

$$FV = PV \times (1 + r)^n$$

将来価値は時間とともに指数関数的に増加し、複利の数学的な基礎となります。

現在価値(PV)

将来の金額を、利率 r で n 期間割り引いた現在の価値です。これは将来価値の逆算です。

$$PV = \frac{FV}{(1 + r)^n}$$

現在価値はあらゆる価値評価の基礎です。資本の機会費用があるため、今日の1ドルは明日の1ドルより価値があります。

複利計算の方式

利息を複利計算する頻度はさまざまです。名目年利 r_nom を年に m 回複利計算すると、実効利回りは異なります。

離散複利(年に m 回):

$$FV = PV \times \left(1 + \frac{r_{nom}}{m}\right)^{m \times t}$$

連続複利:

$$FV = PV \times e^{r \times t}$$

実効年利(EAR):

$$EAR = \left(1 + \frac{r_{nom}}{m}\right)^m - 1$$

連続複利の場合:EAR = e^(r_nom) - 1

一般的な頻度:

頻度m
年次1
半年ごと2
四半期ごと4
月次12
日次365
連続無限
普通年金

n 期間にわたって、各期間の終了時に支払われる均等な支払いの系列です。

現在価値:

$$PV = PMT \times \frac{1 - (1 + r)^{-n}}{r}$$

将来価値:

$$FV = PMT \times \frac{(1 + r)^n - 1}{r}$$

期首年金

各期間の開始時に支払われる均等な支払いの系列です。各キャッシュフローは普通年金より1期間分近いため、価値は (1 + r) 倍されます。

現在価値:

$$PV = PMT \times \frac{1 - (1 + r)^{-n}}{r} \times (1 + r)$$

将来価値:

$$FV = PMT \times \frac{(1 + r)^n - 1}{r} \times (1 + r)$$

成長年金

各期間に一定率 g で増加する、有限期間の支払い系列です(g != r)。

現在価値:

$$PV = \frac{PMT}{r - g} \times \left[1 - \left(\frac{1 + g}{1 + r}\right)^n\right]$$

株式評価(例:多段階配当割引モデル)や給与・年金の予測で広く使われます。

永久年金

均等な支払いが無限に続く系列です。

$$PV = \frac{PMT}{r}$$

成長永久年金

一定率 g で増加する支払いが無限に続く系列です。収束するには g < r である必要があります。

$$PV = \frac{PMT}{r - g}$$

配当に適用すると、ゴードン成長モデルになります。

正味現在価値(NPV)

初期投資を含む、すべての割引後キャッシュフローの合計です。NPVが正であれば、価値が創出されていることを示します。

$$NPV = \sum_{t=0}^{T} \frac{CF_t}{(1 + r)^t}$$

通常、CF_0 は初期投資によるマイナスの支出で、その後の CF_t は流入です。

内部収益率(IRR)

すべてのキャッシュフローのNPVを正確にゼロにする割引率 r です。

$$0 = \sum_{t=0}^{T} \frac{CF_t}{(1 + r)^t}$$

一般的なキャッシュフロー系列には閉形式の解がないため、IRRは数値的に(ニュートン・ラフソン法または二分法で)求めます。通常のキャッシュフロー(符号の変化が1回)の場合、一意のIRRが存在します。

償却

償却ローンの各支払いは、利息部分と元本部分に分けられます。

  • 利息部分: Interest_t = Balance_{t-1} * r
  • 元本部分: Principal_t = PMT - Interest_t
  • 残高: Balance_t = Balance_{t-1} - Principal_t

時間の経過とともに、利息部分は減少し、元本部分は増加します。

主要な公式

公式式使用例
将来価値FV = PV * (1 + r)^n一括払いの金額を複利で将来価値に換算する
現在価値PV = FV / (1 + r)^n将来の一括払いの金額を割り引く
実効年利率(EAR)(1 + r_nom/m)^m - 1複利頻度の異なる利率を比較する
連続複利の将来価値FV = PV * e^(r*t)連続複利計算
普通年金の現在価値PMT * [1 - (1+r)^(-n)] / rローンの支払い、リースの評価
期首年金の現在価値PMT * [1 - (1+r)^(-n)] / r * (1+r)家賃、保険料(前払い)
成長年金の現在価値PMT/(r-g) * [1 - ((1+g)/(1+r))^n]給与の受け取り、増配する配当
永久年金の現在価値PMT / r優先株、永久債
成長永久年金の現在価値PMT / (r - g)ゴードン成長モデル
NPVsum(CF_t / (1+r)^t)プロジェクト/投資の評価
IRRsolve: sum(CF_t / (1+r)^t) = 0不均等なキャッシュフローの収益率指標

計算例

例 1:住宅ローンの月々の返済額

条件: 年利 6.5%、返済期間 30 年、月払い(普通年金)の固定金利住宅ローンで、借入額は 300,000 ドルです。

計算: 月々の返済額を求めます。

解答:

まず、年利を月利に、年数を月数に換算します。

r_monthly = 0.065 / 12 = 0.00541667
n = 30 * 12 = 360 months

普通年金の現在価値の公式を使い、PMT を求めます。

PV = PMT * [1 - (1 + r)^(-n)] / r

300,000 = PMT * [1 - (1.00541667)^(-360)] / 0.00541667

年金係数を計算します。

(1.00541667)^360 = 6.99179
(1.00541667)^(-360) = 0.143010
1 - 0.143010 = 0.856990
0.856990 / 0.00541667 = 158.2108

PMT を求めます。

PMT = 300,000 / 158.2108 = $1,896.20

月々の住宅ローン返済額は 1,896.20 ドルです。

30 年間の総返済額は 360 * $1,896.20 = $682,632 です。つまり、支払利息の合計は $682,632 - $300,000 = $382,632 です。

例 2:不均等なキャッシュフローがあるプロジェクトの NPV

条件: プロジェクトには初期投資として 50,000 ドルが必要で、次のキャッシュフローが発生します。

  • 1 年目:12,000 ドル
  • 2 年目:15,000 ドル
  • 3 年目:18,000 ドル
  • 4 年目:22,000 ドル
  • 5 年目:25,000 ドル

要求収益率(割引率)は 10%です。

計算: NPV と、プロジェクトを採択すべきかどうかを求めます。

解答:

各キャッシュフローを現在価値に割り引きます。

PV(CF_0) = -50,000 / (1.10)^0 = -50,000.00
PV(CF_1) =  12,000 / (1.10)^1 =  10,909.09
PV(CF_2) =  15,000 / (1.10)^2 =  12,396.69
PV(CF_3) =  18,000 / (1.10)^3 =  13,523.67
PV(CF_4) =  22,000 / (1.10)^4 =  15,026.30
PV(CF_5) =  25,000 / (1.10)^5 =  15,523.03

すべての現在価値を合計します。

NPV = -50,000.00 + 10,909.09 + 12,396.69 + 13,523.67 + 15,026.30 + 15,523.03
NPV = +$17,378.78

NPV は **正(17,378.78 ドル)**なので、このプロジェクトは価値を生み出し、採択すべきです。要求収益率の 10%を上回る収益が得られます。

IRR を求めるには、NPV = 0 となる利率を解きます。このキャッシュフロー系列の IRR は数値計算上、およそ 21.2%(21.18%)で、ハードルレートの 10%を大きく上回ります。

よくある落とし穴

  • 利率と期間の頻度を一致させないこと:支払いが月払いの場合、割引率も月利にする必要があります。実効年利率(EAR)から換算する場合を除き、年の名目利率を 12 で割ります。(1 + annual rate) の 12 乗根は使いません。
  • IRR でキャッシュフローの符号規則を忘れること:流出(投資)は負、流入(収益)は正にするか、またはその逆にしますが、符号の規則は一貫させる必要があります。符号が正しくないと、意味のない IRR が算出されます。
  • 名目利率と実効利率を混同すること:月複利の名目利率 12%から算出される EAR は 12%ではなく 12.68%です。複利の基準を必ず明確にしてください。
  • 期首年金と普通年金で 1 期間ずれる誤り:期首年金では、すべての支払いが 1 期間早まります。(1 + r) の調整係数を忘れると、期首年金の現在価値を過小評価します。
  • 非定型のキャッシュフローで IRR が複数求められる場合:キャッシュフローの符号が 2 回以上変わる場合(例:初期の流出、流入、その後の大きな最終流出)、デカルトの符号法則により、符号の変化回数と同じ数までの正の実数 IRR 解が存在する可能性があります。そのような場合は、NPV プロファイルまたは修正 IRR(MIRR)を使用してください。

スクリプトの実行

scripts/time_value_of_money.py は、TimeValueOfMoney クラスの静的メソッド(present_value、future_value、npv、irr、annuity_pv、annuity_fv、growing_annuity_pv、perpetuity_pv、fisher_rate、continuous_compounding)として、上記のすべての公式を実装し、さらに AmortizationSchedule クラスも備えています。

  • 実行方法:uv run scripts/time_value_of_money.py(PEP 723 のインラインメタデータを使用。標準ライブラリのみで動作し、サードパーティー依存関係はありません)、または python3 scripts/time_value_of_money.py を実行します。
  • 引数なしで実行する(または --verify を指定する)と、すべてのメソッドのデモを表示し、さらに上記の計算例の値を検証します(例1の住宅ローン返済額 = $1,896.20、例2の NPV = $17,378.78、IRR = 21.18%)。不一致がある場合は、ゼロ以外の終了コードで終了します。
  • --help では、利用可能なメソッドとインポート方法が表示されます。
  • プログラムから使用する場合は、実行するのではなくインポートします:from time_value_of_money import TimeValueOfMoney, AmortizationSchedule を記述し、TimeValueOfMoney.npv(...) のように呼び出します。

相互参照

  • return-calculations(コアプラグイン):CAGR は複利成長の特殊なケースです。ポートフォリオの MWR も同じ NPV=0 の枠組みを使用し、このプラグインで扱っています。
  • statistics-fundamentals(コアプラグイン):割引率の推定では、回帰分析(CAPM ベータ)や分布に関する仮定がよく用いられます。

コメント