Here are my reference prices for the market data you gave in your last post. I do not have an implementation of the SVJJ model.========== HESTON ==========strike = 700.00, price = 625.00006285strike = 800.00, price = 525.00127652strike = 900.00, price = 425.01690315strike = 1000.00, price = 325.15803885strike = 1100.00, price = 226.09963212strike = 1200.00, price = 130.88148726strike = 1300.00, price = 49.52000571strike = 1400.00, price = 3.95622021strike = 1500.00, price = 0.00010744strike = 1600.00, price = 0.00000000strike = 1700.00, price = 0.00000000strike = 1800.00, price = 0.00000000========== BATES ==========strike = 700.00, price = 625.00508218strike = 800.00, price = 525.03419568strike = 900.00, price = 425.14944325strike = 1000.00, price = 325.47426246strike = 1100.00, price = 226.37022768strike = 1200.00, price = 129.94017030strike = 1300.00, price = 46.33601615strike = 1400.00, price = 2.34053324strike = 1500.00, price = 0.17161033strike = 1600.00, price = 0.07947204strike = 1700.00, price = 0.03531019strike = 1800.00, price = 0.01516107 Here are some more reference Heston prices that I generated with QuantLib. Its C++ but should be self explanatory. Also, see this post for additional ones:
http://wilmott.com/messageview.cfm?cati ... adid=90957.// test cases { maturity, strike, isCall, rate, dividend, initialVariance, kappa, theta, xi, rho, price }auto testCases = std::vector<std::tuple<double, double, bool, double, double, double, double, double, double, double, double>>{ // strongy negative correlation std::make_tuple(1.0, 60.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 3.5375112542450324e01), std::make_tuple(1.0, 70.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 2.7427325387430948e01), std::make_tuple(1.0, 80.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 2.0240629774258657e01), std::make_tuple(1.0, 90.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 1.4001324665222874e01), std::make_tuple(1.0, 100.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 8.8824387466328574e00), std::make_tuple(1.0, 110.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 5.0081726737803436e00), std::make_tuple(1.0, 120.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 2.4009298734285949e00), std::make_tuple(1.0, 130.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 9.2400724820119429e-01), std::make_tuple(1.0, 140.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.9, 2.6936627355936693e-01), // moderate negative correlation std::make_tuple(1.0, 60.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 3.5074765499806006e01), std::make_tuple(1.0, 70.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 2.7134445847690039e01), std::make_tuple(1.0, 80.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 2.0093382375018251e01), std::make_tuple(1.0, 90.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 1.4167852267017899e01), std::make_tuple(1.0, 100.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 9.49176656236898e00), std::make_tuple(1.0, 110.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 6.0614501839125658e00), std::make_tuple(1.0, 120.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 3.7246253098818336e00), std::make_tuple(1.0, 130.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 2.2329225618621162e00), std::make_tuple(1.0, 140.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, -0.5, 1.3252129408205953e00), // zero correlation std::make_tuple(1.0, 60.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 3.4607845802556248e01), std::make_tuple(1.0, 70.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 2.662745409784813e01), std::make_tuple(1.0, 80.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 1.9766651117073778e01), std::make_tuple(1.0, 90.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 1.4255054713881307e01), std::make_tuple(1.0, 100.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 1.0103607357588899e01), std::make_tuple(1.0, 110.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 7.1263163282706969e00), std::make_tuple(1.0, 120.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 5.0515627035382913e00), std::make_tuple(1.0, 130.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 3.6212086227054741e00), std::make_tuple(1.0, 140.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.0, 2.6333395887436311e00), // moderate positive correlation std::make_tuple(1.0, 60.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 3.4015315311571072e01), std::make_tuple(1.0, 70.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 2.5883423769908831e01), std::make_tuple(1.0, 80.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 1.9220977121174926e01), std::make_tuple(1.0, 90.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 1.4198119835298456e01), std::make_tuple(1.0, 100.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 1.0582242152205726e01), std::make_tuple(1.0, 110.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 8.0126610520760728e00), std::make_tuple(1.0, 120.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 6.1754756291903377e00), std::make_tuple(1.0, 130.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 4.8427616388360146e00), std::make_tuple(1.0, 140.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.5, 3.8591360834472148e00), // very positive correlation std::make_tuple(1.0, 60.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 3.3483238000382251e01), std::make_tuple(1.0, 70.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 2.4955398530654449e01), std::make_tuple(1.0, 80.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 1.851182250295102e01), std::make_tuple(1.0, 90.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 1.4012573586875746e01), std::make_tuple(1.0, 100.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 1.0869784621291856e01), std::make_tuple(1.0, 110.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 8.6242390525055299e00), std::make_tuple(1.0, 120.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 6.9778002853202032e00), std::make_tuple(1.0, 130.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 5.7411815322366913e00), std::make_tuple(1.0, 140.0, true, 0.05, 0.1, 0.04, 3.0, 0.16, 1.0, 0.9, 4.7923089769902418e00)};double spot = 100.0;