|
From: Francois B. <ig...@gm...> - 2022-07-31 17:15:14
|
Hi all,
I'm doing some fixed rate bond forward calculations and I'm trying to
understand the forward value.
In forward.cpp, the code is:
Real Forward::forwardValue() const {
calculate();
return (underlyingSpotValue_ - underlyingIncome_ )/
discountCurve_->discount(maturityDate_);
}
and in bondforward.cpp, the fields are set as:
underlyingSpotValue_ = spotValue();
underlyingIncome_ = spotIncome(incomeDiscountCurve_);
and
Real BondForward::spotValue() const {
return bond_->dirtyPrice();
}
So underlyingSpotValue_ is hence the bond dirty price (per 100 nominal) and
underlyingIncome_ is the value of the bond coupons, but not per 100
nominal, but rather per the actual nominal of the bond.
This looks like an unintended discrepancy in notional amounts and would
explain why the forward price and NPV for the bond forwards aren't close to
what I expect.
There are however unit tests (e.g. testFuturesPriceReplication()) that
explicitly test this.
Looking forward to an expert opinion here.
thanks
Francois Botha
|