C 言語による債券価格計算(利回りから)

CBeginner
オンラインで実践に進む

はじめに

この実験では、C 言語を用いて債券の利回りから価格を計算する方法を学びます。まず、クーポン利回り、額面価値、利回り、満期日など、主要な債券パラメータを読み込みます。次に、将来の債券支払いを現在価値に割引く現在価値計算を実装し、債券価格を求めます。最後に、計算された債券価格を出力します。

この実験は、C プログラミングを用いた基本的な金融数学と利息計算を扱っており、様々な金融アプリケーションに適用可能な債券価格計算の実用的な例を示しています。

クーポン利回り、額面価値、利回り、満期日の読み込み

このステップでは、C 言語で債券価格計算に必要な主要なパラメータ(クーポン利回り、額面価値、利回り、満期日)を読み込み、初期化する手順を学びます。

まず、債券価格計算を実装するための新しい C ファイルを作成しましょう。

cd ~/project
nano bond_price.c

次に、債券パラメータを宣言し初期化するコードを記述します。

#include <stdio.h>

int main() {
    // 債券パラメータ
    double coupon_rate = 0.05;   // 年利 5% のクーポン利回り
    double face_value = 1000.0;  // 債券の額面価値
    double yield = 0.06;         // 満期までの年利回り
    int maturity = 5;            // 満期までの年数

    // 債券パラメータを出力
    printf("債券パラメータ:\n");
    printf("クーポン利回り:%.2f%%\n", coupon_rate * 100);
    printf("額面価値:$%.2f\n", face_value);
    printf("満期までの利回り:%.2f%%\n", yield * 100);
    printf("満期までの年数:%d年\n", maturity);

    return 0;
}

プログラムをコンパイルして実行します。

gcc bond_price.c -o bond_price
./bond_price

実行結果の例:

債券パラメータ:
クーポン利回り:5.00%
額面価値:$1000.00
満期までの利回り:6.00%
満期までの年数:5 年

すべての支払いを現在価値に割引く

このステップでは、債券の支払いの現在価値計算を実装します。これは、クーポン支払いと額面価値を現在価値に割引くことを含みます。

bond_price.c ファイルを更新して、現在価値計算を含めます。

cd ~/project
nano bond_price.c

キャッシュフローの現在価値を計算するコードを修正します。

#include <stdio.h>
#include <math.h>

double calculate_bond_price(double coupon_rate, double face_value,
                             double yield, int maturity) {
    double bond_price = 0.0;

    // クーポン支払いを計算
    double coupon_payment = coupon_rate * face_value;

    // クーポン支払いを割引く
    for (int year = 1; year <= maturity; year++) {
        double present_value_coupon = coupon_payment / pow(1 + yield, year);
        bond_price += present_value_coupon;
    }

    // 額面価値を割引く
    double present_value_face = face_value / pow(1 + yield, maturity);
    bond_price += present_value_face;

    return bond_price;
}

int main() {
    // 債券パラメータ
    double coupon_rate = 0.05;   // 年利 5% のクーポン利回り
    double face_value = 1000.0;  // 債券の額面価値
    double yield = 0.06;         // 満期までの年利回り
    int maturity = 5;            // 満期までの年数

    // 債券価格を計算
    double bond_price = calculate_bond_price(coupon_rate, face_value, yield, maturity);

    // 結果を出力
    printf("債券価格計算:\n");
    printf("クーポン利回り:%.2f%%\n", coupon_rate * 100);
    printf("額面価値:$%.2f\n", face_value);
    printf("満期までの利回り:%.2f%%\n", yield * 100);
    printf("満期までの年数:%d年\n", maturity);
    printf("債券価格:$%.2f\n", bond_price);

    return 0;
}

数学ライブラリを使用してプログラムをコンパイルします。

gcc bond_price.c -o bond_price -lm
./bond_price

実行結果の例:

債券価格計算:
クーポン利回り:5.00%
額面価値:$1000.00
満期までの利回り:6.00%
満期までの年数:5 年
債券価格:$952.08

債券価格の表示

このステップでは、債券価格計算プログラムを強化し、債券価格計算結果をより詳細でフォーマットされた出力にする方法を学びます。

bond_price.c ファイルを更新して、出力のフォーマットを改善します。

cd ~/project
nano bond_price.c

詳細な債券価格表示を追加するコードを修正します。

#include <stdio.h>
#include <math.h>

double calculate_bond_price(double coupon_rate, double face_value,
                             double yield, int maturity) {
    double bond_price = 0.0;

    // クーポン支払いを計算
    double coupon_payment = coupon_rate * face_value;

    // クーポン支払いを割引く
    for (int year = 1; year <= maturity; year++) {
        double present_value_coupon = coupon_payment / pow(1 + yield, year);
        bond_price += present_value_coupon;
    }

    // 額面価値を割引く
    double present_value_face = face_value / pow(1 + yield, maturity);
    bond_price += present_value_face;

    return bond_price;
}

void print_bond_details(double coupon_rate, double face_value,
                         double yield, int maturity, double bond_price) {
    printf("===== 債券価格分析 =====\n");
    printf("クーポン利回り:         %.2f%%\n", coupon_rate * 100);
    printf("額面価値:          $%.2f\n", face_value);
    printf("満期までの利回り:   %.2f%%\n", yield * 100);
    printf("満期までの年数:   %d年\n", maturity);
    printf("--------------------------------\n");
    printf("計算された債券価格:$%.2f\n", bond_price);
    printf("額面からの割引額:    $%.2f (%.2f%%)\n",
           face_value - bond_price,
           ((face_value - bond_price) / face_value) * 100);
    printf("===============================\n");
}

int main() {
    // 債券パラメータ
    double coupon_rate = 0.05;   // 年利 5% のクーポン利回り
    double face_value = 1000.0;  // 債券の額面価値
    double yield = 0.06;         // 満期までの年利回り
    int maturity = 5;            // 満期までの年数

    // 債券価格を計算
    double bond_price = calculate_bond_price(coupon_rate, face_value, yield, maturity);

    // 詳細な債券価格情報を表示
    print_bond_details(coupon_rate, face_value, yield, maturity, bond_price);

    return 0;
}

プログラムをコンパイルして実行します。

gcc bond_price.c -o bond_price -lm
./bond_price

実行結果の例:

===== 債券価格分析 =====
クーポン利回り:5.00%
額面価値:          $1000.00
満期までの利回り:6.00%
満期までの年数:5 年
--------------------------------
計算された債券価格:$952.08
額面からの割引額:    $47.92 (4.79%)
===============================

まとめ

この実験では、C 言語で債券価格を計算するために必要な主要なパラメータ(クーポン利回り、額面価値、利回り、満期日)の読み込みと初期化の方法を学びました。その後、債券支払いの現在価値計算を実装し、クーポン支払いと額面価値を現在価値に割引きました。最後に、計算された債券価格を出力しました。

この実験は、C 言語で利回りが与えられた場合の債券価格計算手順を段階的に示し、債券価格計算プロセスにおける重要な側面を網羅しています。提供された手順に従うことで、開発者は基礎となる概念をしっかりと理解し、実際の債券価格設定シナリオに適用することができます。