Files
Work/analytic/ZBOND.CPP
2024-08-07 09:12:07 -04:00

61 lines
1.0 KiB
C++

#include <analytic/zbond.hpp>
#include <common/math.hpp>
ZeroCouponBond::ZeroCouponBond(void)
{
type(Instrument::ZeroCouponBond);
}
ZeroCouponBond::ZeroCouponBond(const ZeroCouponBond &zeroCouponBond)
{
*this=zeroCouponBond;
}
ZeroCouponBond::ZeroCouponBond(double par,const Coupon &coupon,int ytm)
: Bond(par,coupon,ytm)
{
type(Instrument::ZeroCouponBond);
}
ZeroCouponBond::~ZeroCouponBond()
{
}
ZeroCouponBond &ZeroCouponBond::operator=(const ZeroCouponBond &zeroCouponBond)
{
(Bond&)*this=(Bond&)zeroCouponBond;
return *this;
}
BOOL ZeroCouponBond::operator==(const ZeroCouponBond &zeroCouponBond)const
{
return (Bond&)*this==(Bond&)zeroCouponBond;
}
// virtuals
double ZeroCouponBond::discount(Rate /*yield*/)
{
return discount();
}
double ZeroCouponBond::discount(void)
{
Coupon coupon(coupon());
double bondPrice;
int periods;
coupon.makeSemiAnnual();
periods=coupon.frequency()*ytm();
bondPrice=par()/::pow(1.00+coupon.decimalRate(),periods);
price(bondPrice);
return price();
}