目次 (contents)

10.7

手計算

現在価格 S = 920
先渡価格 F = 940
クーポン C =  80
割引係数 d(0, 6 months) = 1 / (1 + 0.07 / 2) = 0.9662
割引係数 d(0, 12 months) = 1 / (1 + 0.08 / 2)2 = 0.9246
cash flow sream, x = (-S, C, C + F) = (-920, 80, 80 + 940) = (-920, 80, 1020)
割引係数配列 d = (d(0,0), d(0,6m), d(0,12m)) = (1, 0.9662, 0.9246)
先渡契約の現時点での価値 pv = Σ x(i) * d(i)
 = -920 * 1 + 80 * 0.9662 + 1020 * 0.9246 = -920 + 77.30 + 943.09 = 100.39

JavaScript for node.js

// 10.7.js
// 2025-06-28

// 現在価格 s
// 先渡価格 f
// クーポン c
// 利子率 r1
// 利子率 r2
// キャッシュフロー流列 x
// 割引係数配列 d
// 現在価値 pv

// function
const sum = (x, y) => x + y;

// input
let s = 920;
let c =  80;
let f = 940;
let m =   2;
let r1 = 0.07;
let r2 = 0.08;
let x = (function(){ 
    let x1 = [-s, 0, 0]; // 初期支出
    let x2 = [ 0, c, c]; // クーポン収入
    let x3 = [ 0, 0, f]; // 満期時収入
    return x1.map((_, k) => x1[k] + x2[k] + x3[k]);
}()); 
// ↑ 即時実行関数式(これによりx1,x2,x3がローカル変数になる。)
// David Flanagan 著、村上列 訳:JavaScript第7版, オライリー・ジャパン, 2021, p.223.

// calculation
let d = (function(){
    let d0 = 1;
    let d1 = 1 / (1 + r1 / m);
    let d2 = 1 / (1 + r2 / m) ** 2;
    return [d0, d1, d2];
}());
let xd = x.map((_, i) => x[i] * d[i]);
let pv = xd.reduce(sum);

// output
console.log("10.7.js");
console.log("s",  s);
console.log("c",  c);
console.log("f",  f);
console.log("r1", r1);
console.log("r2", r2);
console.log("m",  m);
console.log("x",  x);
console.log("d",  d);
console.log("xd", xd);
console.log("pv", pv);
// end

Python

10.7.py

Julia

10.7.jl

Gauche

10.7.scm

Fortran

10.7.f90

history

2025-02-15 create.
2025-06-28 revise 10.7.js, and add 10.7.py, 10.7.jl, 10.7.scm, and 10.7.f90.


目次 (contents)