Ejemplo n.º 1
0
ProxyGreekEngine::ProxyGreekEngine(
    const boost::shared_ptr<MarketModelEvolver>& evolver,
    const std::vector<
    std::vector<boost::shared_ptr<ConstrainedEvolver> > >&
    constrainedEvolvers,
    const std::vector<std::vector<std::vector<Real> > >& diffWeights,
    const std::vector<Size>& startIndexOfConstraint,
    const std::vector<Size>& endIndexOfConstraint,
    const Clone<MarketModelMultiProduct>& product,
    Real initialNumeraireValue)
    : originalEvolver_(evolver), constrainedEvolvers_(constrainedEvolvers),
      diffWeights_(diffWeights),
      startIndexOfConstraint_(startIndexOfConstraint),
      endIndexOfConstraint_(endIndexOfConstraint),
      product_(product),
      initialNumeraireValue_(initialNumeraireValue),
      numberProducts_(product->numberOfProducts()),
      numerairesHeld_(product->numberOfProducts()),
      numberCashFlowsThisStep_(product->numberOfProducts()),
      cashFlowsGenerated_(product->numberOfProducts()) {
    for (Size i=0; i<numberProducts_; ++i)
        cashFlowsGenerated_[i].resize(
            product_->maxNumberOfCashFlowsPerProductPerStep());

    const std::vector<Time>& cashFlowTimes =
        product_->possibleCashFlowTimes();
    const std::vector<Rate>& rateTimes = product_->evolution().rateTimes();
    Size n = cashFlowTimes.size();
    discounters_.reserve(n);
    for (Size j=0; j<n; ++j)
        discounters_.push_back(MarketModelDiscounter(cashFlowTimes[j],
                               rateTimes));
    const std::vector<Rate>& evolutionTimes =
        product_->evolution().evolutionTimes();
    constraints_.resize(evolutionTimes.size());
    constraintsActive_.resize(evolutionTimes.size());
}