Generalized_HullWhite::Generalized_HullWhite(const Handle<YieldTermStructure>& termStructure,
		std::vector<Date> dates,
		std::vector<Real> sigma,
		Real a,
		Real fxVol,
		Real fxCorr)
		: Vasicek(termStructure->forwardRate(0.0, 0.0, Continuous, NoFrequency), a, 0.0, sigma[0], 0.0), a0_(a),
		TermStructureConsistentModel(termStructure), fxVol_(fxVol), fxCorr_(fxCorr)
	{
		a_ = NullParameter();
		b_ = NullParameter();
		lambda_ = NullParameter();

		DayCounter dc = termStructure->dayCounter();

		//volperiods_.push_back(0.0);
		for (Size i=0; i<dates.size()-1; i++)
			volperiods_.push_back(dc.yearFraction(Settings::instance().evaluationDate(), dates[i]));
		sigma_ = PiecewiseConstantParameter(volperiods_, PositiveConstraint());

		for (Size i=0; i< sigma_.size(); i++)
			sigma_.setParam(i, sigma[i]);


		generateArguments();
		registerWith(termStructure);
	}
示例#2
0
    HullWhite::HullWhite(const Handle<YieldTermStructure>& termStructure,
                         Real a, Real sigma)
    : Vasicek(termStructure->forwardRate(0.0, 0.0, Continuous, NoFrequency),
                                         a, 0.0, sigma, 0.0),
      TermStructureConsistentModel(termStructure) {
        b_ = NullParameter();
        lambda_ = NullParameter();
        generateArguments();

        registerWith(termStructure);
    }
示例#3
0
 void CalibratedModel::setParams(const Array& params) {
     Array::const_iterator p = params.begin();
     for (Size i=0; i<arguments_.size(); ++i) {
         for (Size j=0; j<arguments_[i].size(); ++j, ++p) {
             QL_REQUIRE(p!=params.end(),"parameter array too small");
             arguments_[i].setParam(j, *p);
         }
     }
     QL_REQUIRE(p==params.end(),"parameter array too big!");
     generateArguments();
     notifyObservers();
 }
示例#4
0
    BatesModel::BatesModel(const boost::shared_ptr<BatesProcess> & process)
    : HestonModel(process) {
        arguments_.resize(8);

        arguments_[5] 
                = ConstantParameter(process->nu(),     NoConstraint());
        arguments_[6] 
                = ConstantParameter(process->delta(),  PositiveConstraint());
        arguments_[7] 
                = ConstantParameter(process->lambda(), PositiveConstraint());
        
        generateArguments();
    }
示例#5
0
 void update() {
     generateArguments();
     notifyObservers();
 }