public static double zSpread(Bond bond, double cleanPrice, YieldTermStructure discount, DayCounter dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = null, double accuracy = 1.0e-10, int maxIterations = 100, double guess = 0.0) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")", QLNetExceptionEnum.NotTradableException); double dirtyPrice = cleanPrice + bond.accruedAmount(settlementDate); dirtyPrice /= 100.0 / bond.notional(settlementDate); return(CashFlows.zSpread(bond.cashflows(), discount, dirtyPrice, dayCounter, compounding, frequency, false, settlementDate, settlementDate, accuracy, maxIterations, guess)); }
protected override void performCalculations() { Utils.QL_REQUIRE(!bondHelpers_.empty(), () => "no bondHelpers given"); maxDate_ = Date.minDate(); Date refDate = referenceDate(); // double check bond quotes still valid and/or instruments not expired for (int i = 0; i < bondHelpers_.Count; ++i) { Bond bond = bondHelpers_[i].bond(); Utils.QL_REQUIRE(bondHelpers_[i].quote().link.isValid(), () => (i + 1) + " bond (maturity: " + bond.maturityDate() + ") has an invalid price quote"); Date bondSettlement = bond.settlementDate(); Utils.QL_REQUIRE(bondSettlement >= refDate, () => (i + 1) + " bond settlemente date (" + bondSettlement + ") before curve reference date (" + refDate + ")"); Utils.QL_REQUIRE(BondFunctions.isTradable(bond, bondSettlement), () => (i + 1) + " bond non tradable at " + bondSettlement + " settlement date (maturity" + " being " + bond.maturityDate() + ")", QLNetExceptionEnum.NotTradableException); maxDate_ = Date.Max(maxDate_, bondHelpers_[i].pillarDate()); bondHelpers_[i].setTermStructure(this); } fittingMethod_.init(); fittingMethod_.calculate(); }
public static double convexity(Bond bond, InterestRate yield, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); return(CashFlows.convexity(bond.cashflows(), yield, false, settlementDate)); }
public static double bps(Bond bond, YieldTermStructure discountCurve, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); return(CashFlows.bps(bond.cashflows(), discountCurve, false, settlementDate) * 100.0 / bond.notional(settlementDate)); }
public static double accruedAmount(Bond bond, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); return(CashFlows.accruedAmount(bond.cashflows(), false, settlementDate) * 100.0 / bond.notional(settlementDate)); }
public static Date referencePeriodEnd(Bond bond, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); return(CashFlows.referencePeriodEnd(bond.cashflows(), false, settlementDate)); }
public static int accrualDays(Bond bond, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); return(CashFlows.accrualDays(bond.cashflows(), false, settlementDate)); }
public static double accruedDays(Bond bond, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")", QLNetExceptionEnum.NotTradableException); return(CashFlows.accruedDays(bond.cashflows(), false, settlementDate)); }
public static double duration(Bond bond, InterestRate yield, Duration.Type type = Duration.Type.Modified, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); return(CashFlows.duration(bond.cashflows(), yield, type, false, settlementDate)); }
public static double yieldValueBasisPoint(Bond bond, InterestRate yield, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")", QLNetExceptionEnum.NotTradableException); return(CashFlows.yieldValueBasisPoint(bond.cashflows(), yield, false, settlementDate)); }
public static double dirtyPrice(Bond bond, InterestRate yield, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); double dirtyPrice = CashFlows.npv(bond.cashflows(), yield, false, settlementDate) * 100.0 / bond.notional(settlementDate); return(dirtyPrice); }
public static double cleanPrice(Bond bond, YieldTermStructure discount, double zSpread, DayCounter dayCounter, Compounding compounding, Frequency frequency, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); double dirtyPrice = CashFlows.npv(bond.cashflows(), discount, zSpread, dayCounter, compounding, frequency, false, settlementDate) * 100.0 / bond.notional(settlementDate); return(dirtyPrice - bond.accruedAmount(settlementDate)); }
public static double atmRate(Bond bond, YieldTermStructure discountCurve, Date settlementDate = null, double?cleanPrice = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " (maturity being " + bond.maturityDate() + ")"); double?dirtyPrice = cleanPrice == null ? null : cleanPrice + bond.accruedAmount(settlementDate); double currentNotional = bond.notional(settlementDate); double?npv = dirtyPrice / 100.0 * currentNotional; return(CashFlows.atmRate(bond.cashflows(), discountCurve, false, settlementDate, settlementDate, npv)); }
public static double cleanPrice(Bond bond, YieldTermStructure discountCurve, Date settlementDate = null) { if (settlementDate == null) { settlementDate = bond.settlementDate(); } Utils.QL_REQUIRE(BondFunctions.isTradable(bond, settlementDate), () => "non tradable at " + settlementDate + " settlementDate date (maturity being " + bond.maturityDate() + ")"); double dirtyPrice = CashFlows.npv(bond.cashflows(), discountCurve, false, settlementDate) * 100.0 / bond.notional(settlementDate); return(dirtyPrice - bond.accruedAmount(settlementDate)); }
public bool isTradable(Date d = null) { return(BondFunctions.isTradable(this, d)); }