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)
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)