// Tutorial2-BondHedging.cpp : Defines the entry point for the console application. // #include #include #include using namespace std; class Bond { private: string ISIN; string Maturity; double Price; double DV01; double Coupon; public: void setPrice(double p) { Price = p; } void setDV01(double d) { DV01 = d; } double getPrice() { return Price; } double getDV01() { return DV01; } }; class Position { private: vector Notionals; Bond Bnd; public: Position(vector n, Bond b):Notionals(n), Bnd(b) {} void addNotional(double n){ Notionals.push_back(n); } vector getNotionals() { return Notionals; } Bond getBond() { return Bnd; } double getRisk() { double result = 0.0; for (double n : Notionals) { result += n * Bnd.getDV01(); } return result; } }; class BondFuture : public Bond { private: string SettlementDate; public: BondFuture(string sd) :Bond(), SettlementDate(sd) {} }; double computeNumberofcontracts(Position p, BondFuture bf) { double result = 0.0; for (double n : p.getNotionals()) { result += n * p.getBond().getDV01() / bf.getDV01(); } return result; } int main() { Bond bond1; bond1.setPrice(100.0); bond1.setDV01(5.0); BondFuture BF("3m"); BF.setPrice(120.0); BF.setDV01(4.0); cout << "DV01 of the bond is equal to " << bond1.getDV01() << endl; vector notionals; notionals.push_back(1); notionals.push_back(5); notionals.push_back(-3); Position pos(notionals, bond1); cout << "The risk of the whole position is now " << pos.getRisk() << endl; cout << "The number of futures computed to hedge the risk in bonds is equal to " << computeNumberofcontracts(pos, BF) << endl; system("pause"); return 0; }