예제 #1
0
 def test_MartingalePropertyTimeDependentParameters(self):
     d = 2
     times = np.array([2.0, 4.0])
     sigmaT = np.zeros([2, 2, 2])
     sigmaT[0, :, :] = np.array([[0.10, 0.15], [0.20, 0.25]])
     sigmaT[1, :, :] = np.array([[0.15, 0.20], [0.25, 0.30]])
     chi = np.array([0.1, 0.2])
     #
     model0 = MarkovFutureModel(None, d, times, sigmaT, chi)
     #
     times = np.linspace(0.0, 5.0, 6)
     nPaths = 2**10
     seed = 314159265359
     sim = McSimulation(model0,
                        times,
                        nPaths,
                        seed,
                        False,
                        showProgress=False)
     dT = np.linspace(0.0, 5.0, 3)
     for k, t_ in enumerate(times):
         for dT_ in dT:
             F = np.array([
                 model0.futurePrice(t_, t_ + dT_, X, None)
                 for X in sim.X[:, k, :]
             ])
             #print(np.abs(np.mean(F) - 1.0))
             self.assertLess(np.abs(np.mean(F) - 1.0), 0.07)
예제 #2
0
 def test_CompareWithMarkovModel(self):
     kappa       = 1.35
     sigma_0     = 0.50
     sigma_infty = 0.17
     rho_infty   = 0.50
     model0 = AndersenFutureModel(None,kappa,sigma_0,sigma_infty,rho_infty)
     #
     def sigmaT(sigma_0, sigma_infty, rho_infty):
         h1 = -sigma_infty + rho_infty * sigma_0
         h2 = sigma_0 * np.sqrt(1.0 - rho_infty**2)
         hi = sigma_infty
         return np.array([ [h1, h2], [hi, 0.0] ])
     #
     def chi(kappa):
         return np.array([ kappa, 0.0 ])
     #
     sigmaT_ = sigmaT(sigma_0,sigma_infty,rho_infty)
     chi_    = chi(kappa)
     #
     d = 2
     times = np.array([0.0])
     model1 = MarkovFutureModel(None,d,times,np.array([ sigmaT_ ]),chi_)
     #
     times = np.linspace(0.0, 5.0, 3)
     nPaths = 2**3
     seed = 14159265359
     #
     sim0 = McSimulation(model0,times,nPaths,seed,False,showProgress=False)
     sim1 = McSimulation(model1,times,nPaths,seed,False,showProgress=False)
     #
     for idx in range(1,times.shape[0]):
         t = times[idx]
         for dT in [ 0.0, 1.0, 2.0, 5.0, 10.0]:
             T = t + dT
             F0 = np.array([ model0.futurePrice(t,T,X,None) for X in sim0.X[:,idx,:] ])
             F1 = np.array([ model1.futurePrice(t,T,X,None) for X in sim1.X[:,idx,:] ])
             # print(F0-F1)
             self.assertLess(np.max(np.abs(F0-F1)),3.0e-16)