Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "BondCalculator.h"
- Result BondCalculator::calculate( BondCalculator::Changed ch, double num, const std::string& dateString )
- {
- ql::Date date = ql::DateParser::parse( dateString, "dd/MM/yyyy" );
- switch ( ch ) {
- case Changed::SimpleYield:
- return simpleYieldChanged( num, date );
- case Changed::CompoundedYield:
- return compoundedYieldChanged( num, date );
- case Changed::CleanPrice:
- return cleanPriceChanged( num, date );
- case Changed::DirtyPrice:
- return dirtyPriceChanged( num, date );
- }
- }
- Result BondCalculator::simpleYieldChanged( double num, const ql::Date& date )
- {
- Result res;
- res.simpleyield = num;
- res.cleanPrice = this->m_bond->cleanPrice( num, this->m_params->dayCounter, ql::Compounding::Simple,
- ql::Frequency::Annual,
- date );
- res.dirtyPrice = this->m_bond->dirtyPrice( num, this->m_params->dayCounter, ql::Compounding::Simple,
- ql::Frequency::Annual,
- date );
- res.compoundedYield = this->m_bond->yield( res.cleanPrice, this->m_params->dayCounter, ql::Compounding::Compounded,
- ql::Frequency::Annual,
- date );
- return res;
- }
- Result BondCalculator::compoundedYieldChanged( double num, const ql::Date& date )
- {
- Result res;
- res.compoundedYield = num;
- res.cleanPrice = this->m_bond->cleanPrice( num, this->m_params->dayCounter, ql::Compounding::Compounded,
- ql::Frequency::Annual,
- date );
- res.dirtyPrice = this->m_bond->dirtyPrice( num, this->m_params->dayCounter, ql::Compounding::Compounded,
- ql::Frequency::Annual,
- date );
- res.simpleyield = this->m_bond->yield( res.cleanPrice, this->m_params->dayCounter, ql::Simple, ql::Annual,
- date );
- return res;
- }
- Result BondCalculator::cleanPriceChanged( double num, const ql::Date& date )
- {
- Result res;
- res.cleanPrice = num;
- res.simpleyield = this->m_bond->yield( num, this->m_params->dayCounter, ql::Simple, ql::Annual, date );
- res.compoundedYield = this->m_bond->yield( num, this->m_params->dayCounter, ql::Compounded, ql::Annual,
- date );
- res.dirtyPrice = this->m_bond->dirtyPrice( res.compoundedYield, this->m_params->dayCounter, ql::Compounded, ql::Annual,
- date );
- return res;
- }
- Result BondCalculator::dirtyPriceChanged( double num, const ql::Date& date )
- {
- Result res;
- res.dirtyPrice = num;
- res.cleanPrice = num - this->m_bond->accruedAmount( date );
- res.simpleyield = this->m_bond->yield( res.cleanPrice, this->m_params->dayCounter, ql::Simple, ql::Annual, date );
- res.compoundedYield = this->m_bond->yield( res.cleanPrice, this->m_params->dayCounter, ql::Compounded, ql::Annual,
- date );
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement