contents

3.10 part2

利回りλ = 0.10、 期間 n = 10(年)、 クーポン率 r = 0.08、 クーポン支払回数 m = 2(回/年)、 額面価値Fを100($)とする。

Javascript

code


// 3.10.js 2024-08-17

function sum(x){
      return x.reduce((sum,element) => sum + element, 0);
};
// input
const lambda = 0.1; // 利回り
const n = 10;       // 期間(年)
const r = 0.08;     // クーポン率
const m = 2;        // クーポン支払回数(回/年)
const face = 100;   // 額面価値
const j        = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
// calcilating
const co       = face * r / m;
const year     = j.map((_, i) => i * 0.5);
const payment  = [0, co, co, co, co, co, co, co, co, co, 
                 co, co, co, co, co, co, co, co, co, co, 100 + co];
const df       =       j.map((x)    => 1 / Math.pow(1 + lambda / m, x));
const pv       = payment.map((_, i) => payment[i] * df[i]);
const price    = sum(pv);
const weight   =   pv.map((x)    => x / price);
const yw       = year.map((_, i) => year[i] * weight[i]);
const duration = sum(yw);
// output
const x1 =    year.map((x) => x.toFixed(1).padStart(10));
const x2 = payment.map((x) => x.toFixed(0).padStart(10));
const x3 =      df.map((x) => x.toFixed(3).padStart(10));
const x4 =      pv.map((x) => x.toFixed(3).padStart(10));
const x5 =  weight.map((x) => x.toFixed(3).padStart(10));
const x6 =      yw.map((x) => x.toFixed(3).padStart(10));
    
console.log('3.10.js');
console.log(['year'.padStart(10), 'payment'.padStart(10),  'df'.padStart(10),
               'pv'.padStart(10),  'weight'.padStart(10), 'y*w'.padStart(10)].join(''));
console.log('-'.repeat(60));
j.forEach((_, i) => console.log([x1[i], x2[i], x3[i], x4[i], x5[i], x6[i]].join('')));
console.log('-'.repeat(60));
console.log([     price.toFixed(3).padStart(40), 
            sum(weight).toFixed(3).padStart(10),
               duration.toFixed(3).padStart(10)].join(''));
console.log(['price'.padStart(40), 'duration'.padStart(20)].join(''));
// end

output


    3.10.js
    year   payment        df        pv    weight       y*w
------------------------------------------------------------
     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
------------------------------------------------------------
                                87.538     1.000     6.840
                                 price            duration

history

2024-08-18 create.