10.3 part 7
2023-01-14
解法の説明
4月末、7月末、9月末、12月末の先渡価格の理論値と実値との差の二乗の和を 関数 g(s, r)で表す。ただし、s は4月初めの現物価格(spot price)、r は金利である。
関数 g を最小とする s、r を Julia のパッケージ Optim を用いて求め、金利 r を推定する。
パッケージ Optim を使用して得られた解を次に示す。rの値は、10.3 で求めた解と上から 5 桁まで一致した。
s = 403.143573 r = 0.05002219
code
# 10.3.jl # 2023-01-14 using Optim using Printf function g(s, r) m = 12 d1 = 1 / (1 + r / m) d2 = 1 / (1 + r / m) ^ 2 d3 = 1 / (1 + r / m) ^ 3 d4 = 1 / (1 + r / m) ^ 4 d5 = 1 / (1 + r / m) ^ 5 d6 = 1 / (1 + r / m) ^ 6 d7 = 1 / (1 + r / m) ^ 7 d8 = 1 / (1 + r / m) ^ 8 d9 = 1 / (1 + r / m) ^ 9 f4 = s / d1 + c /d1 f7 = s / d4 + c * sum([1/d4, 1/d3, 1/d2, 1/d1]) f9 = s / d6 + c * sum([1/d6, 1/d5, 1/d4, 1/d3, 1/d2, 1/d1]) f12 = s / d9 + c * sum([1/d9, 1/d8, 1/d7, 1/d6, 1/d5, 1/d4, 1/d3, 1/d2, 1/d1]) a = [f4 - fapr, f7 - fjul, f9 - fsep, f12 - fdec] g = sum(map(x -> x ^ 2, a)) return g end #input c = 20 / 12 fapr = 406.50 fjul = 416.64 fsep = 423.48 fdec = 433.84 f(x) = g(x[1], x[2]) x0 = [403, 0.05] res = optimize(f, x0) println("手法 ", Optim.summary(res)) println("最小値g(S, r) ", Optim.minimum(res)) println("最小点[S, r] ", Optim.minimizer(res)) # eof
output
手法 Nelder-Mead 最小値g(S, r) 2.4590690519382888e-5 最小点[S, r] [403.143573414589, 0.050022193925619796]
Optimを使用するときに参照したWebページ
https://zenn.dev/ohno/articles/2a1dc7d609e5bc
history
2023-01-14 create.