本文整理汇总了C++中TimeGrid类的典型用法代码示例。如果您正苦于以下问题:C++ TimeGrid类的具体用法?C++ TimeGrid怎么用?C++ TimeGrid使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TimeGrid类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: initializeImpl
void SimpleRangeAccrualRateETI::initializeImpl(const TimeGrid& timeGrid,
const boost::shared_ptr<YieldTermStructure>& discountCurve,
const boost::shared_ptr<PathGeneratorFactory>& pathGenFactory)
{
referenceCalculation_->initialize(timeGrid,discountCurve,pathGenFactory);
this->payoffDateInfo_->initialize(timeGrid,discountCurve,pathGenFactory);
this->rangeNum_ = simpleRangeRateList_.size();
this->assetNum_ = pathGenFactory->numAssets();
Date today = Settings::instance().evaluationDate();
DayCounter dayCounter = Actual365Fixed();
double fixingStartTime = dayCounter.yearFraction( today , calculationStartDate_ );
Size fixingStartPosition = timeGrid.closestIndex(fixingStartTime);
double fixingEndTime = dayCounter.yearFraction( today , calculationEndDate_ );
Size fixingEndPosition = timeGrid.closestIndex(fixingEndTime);
Size fixingSize = fixingEndPosition - fixingStartPosition;
this->fixingDatePositions_ = std::valarray<Size>(fixingSize);
for ( Size position = 0 ; fixingSize ; position++ )
{
fixingDatePositions_[position] = fixingStartPosition + position;
}
for ( Size rng = 0 ; this->rangeNum_ ; rng++ )
{
simpleRangeRateList_[rng]->initialize(timeGrid,discountCurve,pathGenFactory);
}
}
示例2: pathGenerator
boost::shared_ptr<path_generator_type> pathGenerator() const {
Size numAssets = processes_->size();
TimeGrid grid = timeGrid();
Calendar calendar = this->arguments_.sp_payoff->calendar();
typename RNG::rsg_type gen =
RNG::make_sequence_generator(numAssets*(grid.size()-1),seed_);
boost::shared_ptr<path_generator_type> pgPtr
= boost::shared_ptr<path_generator_type>(
new path_generator_type(processes_,
grid,
gen));
PathInformation::instance().initialize(pgPtr->multiPath(),calendar);
//history setting here..
//index의 Calendar와 product의 Calendar(calculation Date Calendar)는 따로 가야함
//과거 index fixing은 각각 클래스에서 fixing하는데 그 방법은 pathmanager가 indexHistory를 가지고 있어서 거기에 문의해서,
//따로 클래스 내에 가져와서 fixing 시켜놈. 결과만 저장해서 나중에 함침.
//그러므로 path에 따로 무언가를 붙일 필요는 없음.
//MultiPath Grid는 product calendar로 grid숫자 계산함.
return pgPtr;
}
示例3: pathGenerator
//! Return shared pointer to path generator who generates sample pathes in simulation
virtual boost::shared_ptr<path_generator_type> pathGenerator() const {
Size factors = this->process()->factors();
TimeGrid grid = timeGrid();
Size steps = grid.size() - 1;
typename RNG::rsg_type gen = RNG::make_sequence_generator(factors * steps, seed_);
return boost::make_shared<path_generator_type>(this->process(), grid, gen, false);
}
示例4: QL_REQUIRE
inline
ext::shared_ptr<typename MCDigitalEngine<RNG,S>::path_pricer_type>
MCDigitalEngine<RNG,S>::pathPricer() const {
ext::shared_ptr<CashOrNothingPayoff> payoff =
ext::dynamic_pointer_cast<CashOrNothingPayoff>(
this->arguments_.payoff);
QL_REQUIRE(payoff, "wrong payoff given");
ext::shared_ptr<AmericanExercise> exercise =
ext::dynamic_pointer_cast<AmericanExercise>(
this->arguments_.exercise);
QL_REQUIRE(exercise, "wrong exercise given");
ext::shared_ptr<GeneralizedBlackScholesProcess> process =
ext::dynamic_pointer_cast<GeneralizedBlackScholesProcess>(
this->process_);
QL_REQUIRE(process, "Black-Scholes process required");
TimeGrid grid = this->timeGrid();
PseudoRandom::ursg_type sequenceGen(grid.size()-1,
PseudoRandom::urng_type(76));
return ext::shared_ptr<
typename MCDigitalEngine<RNG,S>::path_pricer_type>(
new DigitalPathPricer(payoff,
exercise,
process->riskFreeRate(),
process,
sequenceGen));
}
示例5: temp
inline void MultiPathGeneratorFixedPath<GSG>::next() const
{
typedef typename GSG::sample_type sequence_type;
const sequence_type& sequence_ = generator_.nextSequence();
Size m = process_->size();
Size n = process_->factors();
MultiPath& path = *nextPtr_;
Array asset = process_->initialValues();
for (Size j=0; j<m; j++)
path[j].front() = asset[j];
Array temp(n);
TimeGrid timeGrid = path[0].timeGrid();
Time t, dt;
for (Size i = 1; i < path.pathSize(); i++) {
Size offset = (i-1)*n;
t = timeGrid[i-1];
dt = timeGrid.dt(i-1);
std::copy(sequence_.value.begin()+offset,
sequence_.value.begin()+offset+n,
temp.begin());
asset = process_->evolve(t, asset, dt, temp,i-1);
for (Size j=0; j<m; j++)
path[j][i] = asset[j];
}
}
示例6: pathGenerator
boost::shared_ptr<path_generator_type> pathGenerator() const {
TimeGrid grid = this->timeGrid();
typename RNG::rsg_type gen =
RNG::make_sequence_generator(grid.size()-1,seed_);
return boost::shared_ptr<path_generator_type>(
new path_generator_type(process_, grid,
gen, brownianBridge_));
}
示例7: pathGenerator
boost::shared_ptr<path_generator_type> pathGenerator() const {
Size dimensions = process_->factors();
TimeGrid grid = this->timeGrid();
typename RNG::rsg_type generator =
RNG::make_sequence_generator(dimensions*(grid.size()-1),seed_);
return boost::shared_ptr<path_generator_type>(
new path_generator_type(process_, grid,
generator, brownianBridge_));
}
示例8: MultiPath
PathGeneratorFactory::PathGeneratorFactory(const boost::shared_ptr<StochasticProcessArray>& processes,
const TimeGrid& timeGrid)
: processes_(processes), grid_(timeGrid)
{
unsigned long myseed = static_cast<unsigned long>(1);
rand_ = std::tr1::mt19937(myseed);
this->numAssets_ = processes->size();
this->pathSize_ = timeGrid.size();
PseudoRandom::rsg_type gen =
PseudoRandom::make_sequence_generator(numAssets_*(timeGrid.size()-1),1);
gen_ = boost::shared_ptr<MultiVariate<PseudoRandom>::path_generator_type>(new MultiVariate<PseudoRandom>::path_generator_type(processes,
timeGrid, gen, false));
this->next_ = MultiPath(numAssets_,this->grid_);
S0_ = std::valarray<double>(numAssets_);
randArrs_ = std::valarray<double>(numAssets_);
//this->testRandom_ = Array(numAssets_ * pathSize_);
previousRand_ = Matrix(numAssets_, pathSize_);
Matrix corr = processes->correlation();
chol_=CholeskyDecomposition(corr);
random_ = MultiPath(numAssets_,timeGrid);
// num - 1
this->muGrid_ = Matrix(numAssets_, timeGrid.size() - 1);
this->volGrid_ = Matrix(numAssets_,timeGrid.size() - 1);
antitheticFlag_ = false;
for (Size asset = 0 ; asset<numAssets_ ;++asset)
{
//초기화 수익률 or 절대값
S0_[asset] = processes->process(asset)->x0() / processes->process(asset)->basePrice();
for (Size t = 0 ; t < pathSize_ - 1 ;++t)
{
double mu_t = processes->process(asset)->drift(timeGrid[t],1.0);
double sigma_t = processes->process(asset)->diffusion(timeGrid[t],1.0);
double dt_t = timeGrid.dt(t);
// exp( ( mu[t] - 0.5 * vol[t] * vol[t] ) * dt[t] )
muGrid_[asset][t] = std::exp( ( mu_t - 0.5 * sigma_t * sigma_t ) * dt_t );
// vol[t] * sqrt(dt[t])
volGrid_[asset][t] = sigma_t * std::sqrt(dt_t);
}
}
}
示例9: pathGenerator
ext::shared_ptr<path_generator_type> pathGenerator() const {
Size numAssets = processes_->size();
TimeGrid grid = timeGrid();
typename RNG::rsg_type gen =
RNG::make_sequence_generator(numAssets*(grid.size()-1),seed_);
return ext::shared_ptr<path_generator_type>(
new path_generator_type(processes_,
grid, gen, brownianBridge_));
}
示例10: path_generator_type
inline
boost::shared_ptr<typename
MCLongstaffSchwartzEngine<GenericEngine,MC,RNG,S>::path_generator_type>
MCLongstaffSchwartzEngine<GenericEngine,MC,RNG,S>::pathGenerator() const {
Size dimensions = process_->factors();
TimeGrid grid = this->timeGrid();
typename RNG::rsg_type generator =
RNG::make_sequence_generator(dimensions*(grid.size()-1),seed_);
return boost::shared_ptr<path_generator_type>(
new path_generator_type(process_,
grid, generator, brownianBridge_));
}
示例11:
DiscretizedVanillaOption::DiscretizedVanillaOption(
const VanillaOption::arguments& args,
const StochasticProcess& process,
const TimeGrid& grid)
: arguments_(args) {
stoppingTimes_.resize(args.exercise->dates().size());
for (Size i=0; i<stoppingTimes_.size(); ++i) {
stoppingTimes_[i] =
process.time(args.exercise->date(i));
if (!grid.empty()) {
// adjust to the given grid
stoppingTimes_[i] = grid.closestTime(stoppingTimes_[i]);
}
}
}
示例12: phi
boost::shared_ptr<Lattice>
BlackKarasinski::tree(const TimeGrid& grid) const {
TermStructureFittingParameter phi(termStructure());
boost::shared_ptr<ShortRateDynamics> numericDynamics(
new Dynamics(phi, a(), sigma()));
boost::shared_ptr<TrinomialTree> trinomial(
new TrinomialTree(numericDynamics->process(), grid));
boost::shared_ptr<ShortRateTree> numericTree(
new ShortRateTree(trinomial, numericDynamics, grid));
typedef TermStructureFittingParameter::NumericalImpl NumericalImpl;
boost::shared_ptr<NumericalImpl> impl =
boost::dynamic_pointer_cast<NumericalImpl>(phi.implementation());
impl->reset();
Real value = 1.0;
Real vMin = -50.0;
Real vMax = 50.0;
for (Size i=0; i<(grid.size() - 1); i++) {
Real discountBond = termStructure()->discount(grid[i+1]);
Real xMin = trinomial->underlying(i, 0);
Real dx = trinomial->dx(i);
Helper finder(i, xMin, dx, discountBond, numericTree);
Brent s1d;
s1d.setMaxEvaluations(1000);
value = s1d.solve(finder, 1e-7, value, vMin, vMax);
impl->set(grid[i], value);
// vMin = value - 10.0;
// vMax = value + 10.0;
}
return numericTree;
}
示例13: phi
boost::shared_ptr<Lattice> HullWhite::tree(const TimeGrid& grid) const {
TermStructureFittingParameter phi(termStructure());
boost::shared_ptr<ShortRateDynamics> numericDynamics(
new Dynamics(phi, a(), sigma()));
boost::shared_ptr<TrinomialTree> trinomial(
new TrinomialTree(numericDynamics->process(), grid));
boost::shared_ptr<ShortRateTree> numericTree(
new ShortRateTree(trinomial, numericDynamics, grid));
typedef TermStructureFittingParameter::NumericalImpl NumericalImpl;
boost::shared_ptr<NumericalImpl> impl =
boost::dynamic_pointer_cast<NumericalImpl>(phi.implementation());
impl->reset();
for (Size i=0; i<(grid.size() - 1); i++) {
Real discountBond = termStructure()->discount(grid[i+1]);
const Array& statePrices = numericTree->statePrices(i);
Size size = numericTree->size(i);
Time dt = numericTree->timeGrid().dt(i);
Real dx = trinomial->dx(i);
Real x = trinomial->underlying(i,0);
Real value = 0.0;
for (Size j=0; j<size; j++) {
value += statePrices[j]*std::exp(-x*dt);
x += dx;
}
value = std::log(value/discountBond)/dt;
impl->set(grid[i], value);
}
return numericTree;
}
示例14: QL_REQUIRE
inline boost::shared_ptr<LongstaffSchwartzMultiPathPricer>
MCAmericanPathEngine<RNG>::lsmPathPricer() const {
boost::shared_ptr<StochasticProcessArray> processArray =
boost::dynamic_pointer_cast<StochasticProcessArray>(this->process_);
QL_REQUIRE(processArray && processArray->size()>0,
"Stochastic process array required");
boost::shared_ptr<GeneralizedBlackScholesProcess> process =
boost::dynamic_pointer_cast<GeneralizedBlackScholesProcess>(
processArray->process(0));
QL_REQUIRE(process, "generalized Black-Scholes process required");
const TimeGrid theTimeGrid = this->timeGrid();
const std::vector<Time> & times = theTimeGrid.mandatoryTimes();
const Size numberOfTimes = times.size();
const std::vector<Date> & fixings = this->arguments_.fixingDates;
QL_REQUIRE(fixings.size() == numberOfTimes, "Invalid dates/times");
std::vector<Size> timePositions(numberOfTimes);
Array discountFactors(numberOfTimes);
std::vector<Handle<YieldTermStructure> > forwardTermStructures(numberOfTimes);
const Handle<YieldTermStructure> & riskFreeRate = process->riskFreeRate();
for (Size i = 0; i < numberOfTimes; ++i) {
timePositions[i] = theTimeGrid.index(times[i]);
discountFactors[i] = riskFreeRate->discount(times[i]);
forwardTermStructures[i] = Handle<YieldTermStructure>(
boost::make_shared<ImpliedTermStructure>(riskFreeRate,
fixings[i]));
}
const Size polynomialOrder = 2;
const LsmBasisSystem::PolynomType polynomType = LsmBasisSystem::Monomial;
return boost::shared_ptr<LongstaffSchwartzMultiPathPricer> (
new LongstaffSchwartzMultiPathPricer(this->arguments_.payoff,
timePositions,
forwardTermStructures,
discountFactors,
polynomialOrder,
polynomType));
}
示例15:
template <class PathType> inline
LongstaffSchwartzPathPricer<PathType>::LongstaffSchwartzPathPricer(
const TimeGrid& times,
const boost::shared_ptr<EarlyExercisePathPricer<PathType> >&
pathPricer,
const boost::shared_ptr<YieldTermStructure>& termStructure)
: calibrationPhase_(true),
pathPricer_(pathPricer),
coeff_ (new Array[times.size()-1]),
dF_ (new DiscountFactor[times.size()-1]),
v_ (pathPricer_->basisSystem()) {
for (Size i=0; i<times.size()-1; ++i) {
dF_[i] = termStructure->discount(times[i+1])
/ termStructure->discount(times[i]);
}
}