Skip to content

Commit

Permalink
Remove fields from engine arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
w31ha0 committed Nov 2, 2021
1 parent 23f5928 commit 7c3518a
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 26 deletions.
13 changes: 1 addition & 12 deletions ql/experimental/convertiblebonds/binomialconvertibleengine.hpp
Expand Up @@ -124,18 +124,7 @@ namespace QuantLib {
ext::shared_ptr<Lattice> lattice(new TsiveriotisFernandesLattice<T>(
tree, riskFreeRate, maturity, timeSteps_, creditSpread, v, q));

// Setup arguments for convertible
arguments_.dividends.clear();
arguments_.dividendDates.clear();
for (const auto& dividend : dividends_) {
if (!dividend->hasOccurred(arguments_.settlementDate, false)) {
arguments_.dividends.push_back(dividend);
arguments_.dividendDates.push_back(dividend->date());
}
}
arguments_.creditSpread = creditSpread_;

DiscretizedConvertible convertible(arguments_, bs, TimeGrid(maturity, timeSteps_));
DiscretizedConvertible convertible(arguments_, bs, dividends_, creditSpread_, TimeGrid(maturity, timeSteps_));

convertible.initialize(lattice, maturity);
convertible.rollback(0.0);
Expand Down
3 changes: 0 additions & 3 deletions ql/experimental/convertiblebonds/convertiblebond.hpp
Expand Up @@ -178,9 +178,6 @@ namespace QuantLib {
}

Real conversionRatio;
Handle<Quote> creditSpread; //Not being used for calculations in binomailconvertibleengine
DividendSchedule dividends; //Not being used for calculations in binomailconvertibleengine
std::vector<Date> dividendDates;
std::vector<Date> callabilityDates;
std::vector<Callability::Type> callabilityTypes;
std::vector<Real> callabilityPrices;
Expand Down
31 changes: 20 additions & 11 deletions ql/experimental/convertiblebonds/discretizedconvertible.cpp
Expand Up @@ -28,18 +28,27 @@ namespace QuantLib {
DiscretizedConvertible::DiscretizedConvertible(
ConvertibleBond::option::arguments args,
ext::shared_ptr<GeneralizedBlackScholesProcess> process,
DividendSchedule dividends,
Handle<Quote> creditSpread,
const TimeGrid& grid)
: arguments_(std::move(args)), process_(std::move(process)) {
: arguments_(std::move(args)), process_(std::move(process)), creditSpread_(creditSpread) {

dividendValues_ = Array(arguments_.dividends.size(), 0.0);
for (const auto& dividend : dividends) {
if (!dividend->hasOccurred(arguments_.settlementDate, false)) {
dividends_.push_back(dividend);
dividendDates_.push_back(dividend->date());
}
}

dividendValues_ = Array(dividends_.size(), 0.0);

Date settlementDate = process_->riskFreeRate()->referenceDate();
for (Size i=0; i<arguments_.dividends.size(); i++) {
if (arguments_.dividends[i]->date() >= settlementDate) {
for (Size i=0; i<dividends.size(); i++) {
if (dividends[i]->date() >= settlementDate) {
dividendValues_[i] =
arguments_.dividends[i]->amount() *
dividends[i]->amount() *
process_->riskFreeRate()->discount(
arguments_.dividends[i]->date());
dividends[i]->date());
}
}

Expand All @@ -64,11 +73,11 @@ namespace QuantLib {
dayCounter.yearFraction(bondSettlement,
arguments_.couponDates[i]);

dividendTimes_.resize(arguments_.dividendDates.size());
dividendTimes_.resize(dividendDates_.size());
for (Size i=0; i<dividendTimes_.size(); ++i)
dividendTimes_[i] =
dayCounter.yearFraction(bondSettlement,
arguments_.dividendDates[i]);
dividendDates_[i]);

if (!grid.empty()) {
// adjust times to grid
Expand Down Expand Up @@ -99,7 +108,7 @@ namespace QuantLib {
// this takes care of convertibility and conversion probabilities
adjustValues();

Real creditSpread = arguments_.creditSpread->value();
Real creditSpread = creditSpread_->value();

Date exercise = arguments_.exercise->lastDate();

Expand Down Expand Up @@ -217,10 +226,10 @@ namespace QuantLib {
Time t = time();
Array grid = method()->grid(t);
// add back all dividend amounts in the future
for (Size i=0; i<arguments_.dividends.size(); i++) {
for (Size i=0; i<dividends_.size(); i++) {
Time dividendTime = dividendTimes_[i];
if (dividendTime >= t || close(dividendTime,t)) {
const ext::shared_ptr<Dividend>& d = arguments_.dividends[i];
const ext::shared_ptr<Dividend>& d = dividends_[i];
DiscountFactor dividendDiscount =
process_->riskFreeRate()->discount(dividendTime) /
process_->riskFreeRate()->discount(t);
Expand Down
5 changes: 5 additions & 0 deletions ql/experimental/convertiblebonds/discretizedconvertible.hpp
Expand Up @@ -35,6 +35,8 @@ namespace QuantLib {
public:
DiscretizedConvertible(ConvertibleBond::option::arguments,
ext::shared_ptr<GeneralizedBlackScholesProcess> process,
DividendSchedule dividends,
Handle<Quote> creditSpread,
const TimeGrid& grid = TimeGrid());

void reset(Size size) override;
Expand Down Expand Up @@ -76,6 +78,9 @@ namespace QuantLib {
std::vector<Time> callabilityTimes_;
std::vector<Time> couponTimes_;
std::vector<Time> dividendTimes_;
Handle<Quote> creditSpread_;
DividendSchedule dividends_;
std::vector<Date> dividendDates_;
};

}
Expand Down

0 comments on commit 7c3518a

Please sign in to comment.