Расчёт цены облигации по доходности в C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме мы изучим, как вычислить цену облигации, зная её доходность в C. Мы начнём с чтения ключевых параметров облигации, включая купонную ставку, номинальную стоимость, доходность и срок погашения. Затем мы реализуем вычисление текущей стоимости, чтобы дисконтировать все будущие платежи по облигации до их текущей стоимости, что даст нам цену облигации. Наконец, мы выведем рассчитанную цену облигации.

Практикум охватывает фундаментальные финансовые математические вычисления и расчёты процентов с использованием программирования на C, предоставляя практический пример ценообразования облигаций, который может быть применён в различных финансовых приложениях.

Read Coupon, Face Value, Yield, Maturity

In this step, we will learn how to read and initialize the key parameters required for bond price calculation in C. These parameters include coupon rate, face value, yield, and maturity.

First, let's create a new C file to implement our bond pricing calculation:

cd ~/project
nano bond_price.c

Now, let's write the code to declare and initialize the bond parameters:

#include <stdio.h>

int main() {
    // Bond parameters
    double coupon_rate = 0.05;   // 5% annual coupon rate
    double face_value = 1000.0;  // Bond face value
    double yield = 0.06;         // Annual yield to maturity
    int maturity = 5;            // Years to maturity

    // Print the bond parameters
    printf("Bond Parameters:\n");
    printf("Coupon Rate: %.2f%%\n", coupon_rate * 100);
    printf("Face Value: $%.2f\n", face_value);
    printf("Yield to Maturity: %.2f%%\n", yield * 100);
    printf("Years to Maturity: %d\n", maturity);

    return 0;
}

Compile and run the program:

gcc bond_price.c -o bond_price
./bond_price

Example output:

Bond Parameters:
Coupon Rate: 5.00%
Face Value: $1000.00
Yield to Maturity: 6.00%
Years to Maturity: 5

Discount All Payments to Present

In this step, we will implement the present value calculation for bond payments, which involves discounting coupon payments and face value to their present value.

Update the bond_price.c file to include the present value calculation:

cd ~/project
nano bond_price.c

Modify the code to calculate present value of cash flows:

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

    // Calculate coupon payment
    double coupon_payment = coupon_rate * face_value;

    // Discount coupon payments
    for (int year = 1; year <= maturity; year++) {
        double present_value_coupon = coupon_payment / pow(1 + yield, year);
        bond_price += present_value_coupon;
    }

    // Discount face value
    double present_value_face = face_value / pow(1 + yield, maturity);
    bond_price += present_value_face;

    return bond_price;
}

int main() {
    // Bond parameters
    double coupon_rate = 0.05;   // 5% annual coupon rate
    double face_value = 1000.0;  // Bond face value
    double yield = 0.06;         // Annual yield to maturity
    int maturity = 5;            // Years to maturity

    // Calculate bond price
    double bond_price = calculate_bond_price(coupon_rate, face_value, yield, maturity);

    // Print results
    printf("Bond Price Calculation:\n");
    printf("Coupon Rate: %.2f%%\n", coupon_rate * 100);
    printf("Face Value: $%.2f\n", face_value);
    printf("Yield to Maturity: %.2f%%\n", yield * 100);
    printf("Years to Maturity: %d\n", maturity);
    printf("Bond Price: $%.2f\n", bond_price);

    return 0;
}

Compile the program with math library:

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

Example output:

Bond Price Calculation:
Coupon Rate: 5.00%
Face Value: $1000.00
Yield to Maturity: 6.00%
Years to Maturity: 5
Bond Price: $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, охватывая основные аспекты процесса ценообразования облигаций. Следуя предоставленным инструкциям, разработчики могут получить глубокое понимание базовых концепций и применять их к реальным сценариям ценообразования облигаций.