void HestonModelTest::testDAXCalibration() {
BOOST_TEST_MESSAGE(
"Testing Heston model calibration using DAX volatility data...");
SavedSettings backup;
Date settlementDate(5, July, 2002);
Settings::instance().evaluationDate() = settlementDate;
CalibrationMarketData marketData = getDAXCalibrationMarketData();
const Handle<YieldTermStructure> riskFreeTS = marketData.riskFreeTS;
const Handle<YieldTermStructure> dividendTS = marketData.dividendYield;
const Handle<Quote> s0 = marketData.s0;
const std::vector<boost::shared_ptr<CalibrationHelper> > options
= marketData.options;
const Real v0=0.1;
const Real kappa=1.0;
const Real theta=0.1;
const Real sigma=0.5;
const Real rho=-0.5;
boost::shared_ptr<HestonProcess> process(new HestonProcess(
riskFreeTS, dividendTS, s0, v0, kappa, theta, sigma, rho));
boost::shared_ptr<HestonModel> model(new HestonModel(process));
boost::shared_ptr<PricingEngine> engine(
new AnalyticHestonEngine(model, 64));
for (Size i = 0; i < options.size(); ++i)
options[i]->setPricingEngine(engine);
LevenbergMarquardt om(1e-8, 1e-8, 1e-8);
model->calibrate(options, om, EndCriteria(400, 40, 1.0e-8, 1.0e-8, 1.0e-8));