現在価格 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
// 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
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.