contents

3.10

利回りλ = 0.10、期間 n = 10(年)、クーポン率 r = 0.08、 クーポン支払回数 m = 2(回/年)、 額面価値Fを100($)とすると、債権価格Pは次式で求める。

P = F / (1 + (λ / m))n + (C / λ)(1 - 1 / (1 + (λ / m))n)
ただし、1年あたりクーポン支払額 C = Fr = 100 × 0.08 = 8($)

∴ P = 87.54($)

デュレーションは、下表で求める。

デュレーションの算定表
ABCDEF
支払額割引率 割引係数
(@10%)
支払額の現在価値
(B×C)
重み
D/価格
A×E
0.5 40.952 3.8080.043 0.022
1 40.907 3.6280.041 0.041
1.5 40.864 3.4560.039 0.059
2 40.823 3.2920.038 0.076
2.5 40.784 3.1360.036 0.090
3 40.746 2.9840.034 0.102
3.5 40.711 2.8440.032 0.112
4 40.677 2.7080.031 0.124
4.5 40.645 2.5800.029 0.131
5 40.614 2.4560.028 0.140
5.5 40.585 2.3400.027 0.149
6 40.557 2.2280.025 0.150
6.5 40.530 2.1200.024 0.156
7 40.505 2.0200.023 0.161
7.5 40.481 1.9240.022 0.165
8 40.458 1.8320.021 0.168
8.5 40.436 1.7440.020 0.170
9 40.416 1.6640.019 0.171
9.5 40.396 1.5840.018 0.171
10 1040.37739.2080.448 4.480
合計

87.556
価格
0.9986.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.