3.10
利回りλ = 0.10、期間 n = 10(年)、クーポン率 r = 0.08、
クーポン支払回数 m = 2(回/年)、
額面価値Fを100($)とすると、債権価格Pは次式で求める。
∴ P = 87.54($)P = F / (1 + (λ / m))n + (C / λ)(1 - 1 / (1 + (λ / m))n)
ただし、1年あたりクーポン支払額 C = Fr = 100 × 0.08 = 8($)
デュレーションは、下表で求める。
A | B | C | D | E | F |
年 | 支払額 | (@10%) |
支払額の現在価値 (B×C) | 重み D/価格 | A×E |
0.5 | 4 | 0.952 | 3.808 | 0.043 | 0.022 |
1 | 4 | 0.907 | 3.628 | 0.041 | 0.041 |
1.5 | 4 | 0.864 | 3.456 | 0.039 | 0.059 |
2 | 4 | 0.823 | 3.292 | 0.038 | 0.076 |
2.5 | 4 | 0.784 | 3.136 | 0.036 | 0.090 |
3 | 4 | 0.746 | 2.984 | 0.034 | 0.102 |
3.5 | 4 | 0.711 | 2.844 | 0.032 | 0.112 |
4 | 4 | 0.677 | 2.708 | 0.031 | 0.124 |
4.5 | 4 | 0.645 | 2.580 | 0.029 | 0.131 |
5 | 4 | 0.614 | 2.456 | 0.028 | 0.140 |
5.5 | 4 | 0.585 | 2.340 | 0.027 | 0.149 |
6 | 4 | 0.557 | 2.228 | 0.025 | 0.150 |
6.5 | 4 | 0.530 | 2.120 | 0.024 | 0.156 |
7 | 4 | 0.505 | 2.020 | 0.023 | 0.161 |
7.5 | 4 | 0.481 | 1.924 | 0.022 | 0.165 |
8 | 4 | 0.458 | 1.832 | 0.021 | 0.168 |
8.5 | 4 | 0.436 | 1.744 | 0.020 | 0.170 |
9 | 4 | 0.416 | 1.664 | 0.019 | 0.171 |
9.5 | 4 | 0.396 | 1.584 | 0.018 | 0.171 |
10 | 104 | 0.377 | 39.208 | 0.448 | 4.480 |
合計 | 87.556 価格 | 0.998 | 6.838 デュレーション |
Python
(added on 2015-04-04, revised on 2019-09-14.)
code
# 3.10.py # 19:10 2015-04-04 # 3.10.py 1.2 2019/09/14 08:43:31 s Exp $ la = 0.1 n = 10 r = 0.08 m = 2 f = 100 c = f * r / 2 j = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] a = [0.5 * i for i in j] b = [0, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, 100+c] c = [1 / (1 + la / m) ** i for i in j] d = [x * y for x, y in zip(b, c)] price = sum(d) e = [x / price for x in d] f = [x * y for x, y in zip(a, e)] duration = sum(f) fmt1 = "{:>10}{:>10}{:>10}{:>15}{:>10}{:>10}" print("3.10.py") print(65 * "-") print(fmt1.format("A", "B", "C", "D", "E", "F")) print(fmt1.format("", "", "Discount", "Present Value", "", "")) print(fmt1.format("", "", "factor", "of payment", "Weight", "")) print(fmt1.format("Year","Payment","(@10%)","(BxC)","(D/Price)","AxE")) print(65 * "-") fmt2="{:10.1f}{:10.0f}{:10.3f}{:15.3f}{:10.3f}{:10.3f}" for i in range(len(a)): print(fmt2.format(a[i], b[i], c[i], d[i], e[i], f[i])) print(65 * "-") print("{:30}{:15.3f}{:10.3f}{:10.3f}".format("Sum", price ,sum(e), duration)) print("{:>45}{:>20}".format("Price", "Duration")) print(65 * "-") # end
output
3.10.py ----------------------------------------------------------------- A B C D E F Discount Present Value factor of payment Weight Year Payment (@10%) (BxC) (D/Price) AxE ----------------------------------------------------------------- 0.0 0 1.000 0.000 0.000 0.000 0.5 4 0.952 3.810 0.044 0.022 1.0 4 0.907 3.628 0.041 0.041 1.5 4 0.864 3.455 0.039 0.059 2.0 4 0.823 3.291 0.038 0.075 2.5 4 0.784 3.134 0.036 0.090 3.0 4 0.746 2.985 0.034 0.102 3.5 4 0.711 2.843 0.032 0.114 4.0 4 0.677 2.707 0.031 0.124 4.5 4 0.645 2.578 0.029 0.133 5.0 4 0.614 2.456 0.028 0.140 5.5 4 0.585 2.339 0.027 0.147 6.0 4 0.557 2.227 0.025 0.153 6.5 4 0.530 2.121 0.024 0.158 7.0 4 0.505 2.020 0.023 0.162 7.5 4 0.481 1.924 0.022 0.165 8.0 4 0.458 1.832 0.021 0.167 8.5 4 0.436 1.745 0.020 0.169 9.0 4 0.416 1.662 0.019 0.171 9.5 4 0.396 1.583 0.018 0.172 10.0 104 0.377 39.197 0.448 4.478 ----------------------------------------------------------------- Sum 87.538 1.000 6.840 Price Duration -----------------------------------------------------------------
Julia code
2023-05-03 3.10.jl
Fortran code
2016-12-30, 2024-11-01 3.10.f90
Gauche code
2024-11-01 3.10.scm
history
2004-4-29, revised on 2011-10-29, 2011-11-03, 2015-04-04.
2011-10-29 「割引率」を「割引係数」に訂正した。
2011-11-03 character reference used.
2015-04-04 Python added.
2016-12-30 Fortran code added.
2019-09-14 Python code revised.
2021-02-15 move history, change XHTML to html5, change shift-jis to utf-8, and
add viewport.
2023-05-03 add Julia code.
2024-11-01 add Gauche code, revise Fortran code.