private static void Demo_HW() { var marketT = new[] { 0, 0.255555556, 0.511111111, 0.761111111, 1.013888889, 1.269444444, 1.530555556, 1.775, 2.027777778, 2.291666667, 2.541666667, 2.797222222, 3.047222222, 3.302777778, 3.555555556, 3.805555556, 4.058333333, 4.313888889, 4.569444444, 4.819444444 }; var marketP = new[] { 1, 0.993664, 0.989978, 0.98618, 0.982123, 0.977784, 0.973149, 0.968688, 0.963922, 0.958764, 0.95371, 0.948381, 0.943253, 0.937892, 0.932477, 0.927016, 0.921614, 0.916074, 0.91046, 0.904898 }; var marketF = new[] { .0115761, 0.0134633, 0.0145677, 0.015404, 0.016344, 0.0173619, 0.0182408, 0.0188542, 0.0195574, 0.0203891, 0.0212078, 0.0219844, 0.0217523, 0.0223657, 0.0229775, 0.0235635, 0.0231886, 0.0236636, 0.0241312, 0.0245827 }; var hw = new HullWhiteModel("hw1", .5, .05, marketT, marketP, marketF); for (var i = 0; i < marketT.Length; i++) { var t = marketT[i]; var p = hw.HW_ZBPrice_CF(0, t, marketF[0]); Console.WriteLine($"{t}: {p} <- {marketP[i]}"); } }
private static void Demo_HW() { var marketT = new[] { 0, 0.255555556, 0.511111111, 0.761111111, 1.013888889, 1.269444444, 1.530555556, 1.775, 2.027777778, 2.291666667, 2.541666667, 2.797222222, 3.047222222, 3.302777778, 3.555555556, 3.805555556, 4.058333333, 4.313888889, 4.569444444, 4.819444444 }; var marketP = new[] { 1, 0.993664, 0.989978, 0.98618, 0.982123, 0.977784, 0.973149, 0.968688, 0.963922, 0.958764, 0.95371, 0.948381, 0.943253, 0.937892, 0.932477, 0.927016, 0.921614, 0.916074, 0.91046, 0.904898 }; var marketF = new[] { .0115761, 0.0134633, 0.0145677, 0.015404, 0.016344, 0.0173619, 0.0182408, 0.0188542, 0.0195574, 0.0203891, 0.0212078, 0.0219844, 0.0217523, 0.0223657, 0.0229775, 0.0235635, 0.0231886, 0.0236636, 0.0241312, 0.0245827 }; var hw = new HullWhiteModel("hw1", .00883, .01, marketT, marketP, marketF); var zb = hw.HW_ZBPrice_CF(0, 2, marketF[0]); var zb2 = hw.HW_ZBPrice_SM(0, 2, marketF[0]); Console.WriteLine($"T = 2: c{zb:F10} <> s{zb2:F10} <- m{hw.MarketP(2):F10}"); for (var i = 0.94; i < 0.98; i += 0.002) { var p1 = hw.HW_ZBPut_CF(0, 1, 2, i, marketF[0]); var p2 = hw.HW_ZBPut_SM_Q(0, 1, 2, i, marketF[0], n: 30000, m: 360); var p3 = hw.HW_ZBPut_SM_T(0, 1, 2, i, marketF[0], n: 30000); Console.WriteLine($"x = {i:F3}: c{p1:F10} <> q{p2:F10} <> t{p3:F10}"); } }