/** * Sample demonstrating the calculation of the bond's full EOD measures from price, TSY spread, or * yield * * <p>USE WITH CARE: This sample ignores errors and does not handle exceptions. */ public static final void BondEODSample() { JulianDate dtEOD = JulianDate.CreateFromYMD(2012, 1, 13); String strISIN = "US78490FUS63"; // Short dated floater 9/15/2012 // String strISIN = "US78442GGV23"; // Long dated floater // String strISIN = "US44180Y2046"; // Plain old fixed coupon Map<String, Double> mapPriceMeasures = FI.BondEODMeasuresFromPrice(strISIN, dtEOD, 1.); System.out.println("\n--------------\nPrice Measures\n--------------"); for (Map.Entry<String, Double> me : mapPriceMeasures.entrySet()) System.out.println(me.getKey() + "=" + me.getValue()); Map<String, Double> mapTSYSpreadMeasures = FI.BondEODMeasuresFromTSYSpread(strISIN, dtEOD, 0.0486); System.out.println("\n---------------\nSpread Measures\n---------------"); for (Map.Entry<String, Double> me : mapTSYSpreadMeasures.entrySet()) System.out.println(me.getKey() + "=" + me.getValue()); Map<String, Double> mapYieldMeasures = FI.BondEODMeasuresFromYield(strISIN, dtEOD, 0.0749); System.out.println("\n--------------\nYield Measures\n--------------"); for (Map.Entry<String, Double> me : mapYieldMeasures.entrySet()) System.out.println(me.getKey() + "=" + me.getValue()); }
/** * Sample demonstrating the calculation of analytics for the set of bonds associated with the * ticker * * <p>USE WITH CARE: This sample ignores errors and does not handle exceptions. */ public static final void BondTickerAPISample() throws Exception { int iNumBonds = 0; String strTicker = "SLMA"; JulianDate dtToday = JulianDate.Today(); DiscountCurve dc = DiscountCurve.CreateFromFlatRate(dtToday, "USD", 0.05); DiscountCurve dcTSY = DiscountCurve.CreateFromFlatRate(dtToday, "USD", 0.04); CreditCurve cc = CreditCurve.FromFlatHazard(dtToday.getJulian(), "CC", 0.02, 0.4); ComponentMarketParams cmp = ComponentMarketParams.MakeCreditCMP(dc, cc); List<String> lsstrISIN = FI.GetISINsForTicker(strTicker); System.out.println( "Dumping: ISIN, FLOAT/FIXED, Bond, Yield, Z Spread, Opt Adj Spread, TSY Spread, Credit Basis, Credit Price"); System.out.println( "---------------------------------------------------------------------------------------------------------"); for (String strISIN : lsstrISIN) { Bond bond = FI.GetBond(strISIN); if (null != bond && !bond.hasVariableCoupon() && !bond.hasBeenExercised() && !bond.hasDefaulted() && bond.getMaturityDate().getJulian() > dtToday.getJulian()) { double dblZSpreadFromPrice = Double.NaN; double dblOASpreadFromPrice = Double.NaN; double dblYieldFromPrice = FI.BondYieldFromPrice(strISIN, dtToday, dc, 1.); if (!FI.IsBondFloater(strISIN)) { dblZSpreadFromPrice = FI.BondZSpreadFromPrice(strISIN, dtToday, dc, 1.); dblOASpreadFromPrice = FI.BondOASFromPrice(strISIN, dtToday, dc, 1.); } double dblTSYSpreadFromPrice = FI.BondTSYSpreadFromPrice(strISIN, dtToday, dc, dcTSY, 1.); double dblCreditBasisFromPrice = FI.BondCreditBasisFromPrice(strISIN, dtToday, dc, cc, 1.); double dblBondCreditPrice = FI.BondCreditPrice(strISIN, dtToday, dc, cc); ++iNumBonds; System.out.println( strISIN + FIELD_SEPARATOR + (bond.isFloater() ? "FLOAT " : "FIXED ") + bond.getTicker() + FIELD_SEPARATOR + FIGen.FormatPrice(bond.getCoupon(dtToday.getJulian(), cmp, null)) + FIELD_SEPARATOR + bond.getMaturityDate() + FIELD_SEPARATOR + FIGen.FormatPrice(dblYieldFromPrice) + FIELD_SEPARATOR + FIGen.FormatSpread(dblZSpreadFromPrice) + FIELD_SEPARATOR + FIGen.FormatSpread(dblOASpreadFromPrice) + FIELD_SEPARATOR + FIGen.FormatSpread(dblTSYSpreadFromPrice) + FIELD_SEPARATOR + FIGen.FormatSpread(dblCreditBasisFromPrice) + FIELD_SEPARATOR + FIGen.FormatPrice(dblBondCreditPrice)); } } System.out.println("Processed " + iNumBonds + " " + strTicker + " bonds!"); for (String strISIN : lsstrISIN) { Bond bond = FI.GetBond(strISIN); System.out.println( strISIN + FIELD_SEPARATOR + bond.getTicker() + FIELD_SEPARATOR + FIGen.FormatPrice(bond.getCoupon(JulianDate.Today().getJulian(), null, null)) + FIELD_SEPARATOR + bond.getMaturityDate() + FIELD_SEPARATOR + FIGen.FormatPrice(FI.GetBondDoubleField(strISIN, "OutstandingAmount"), 10, 0, 1.)); } /* * Calculate the bucketed outstanding notional for all the bonds of this ticker */ JulianDate[] adtAscending = new JulianDate[5]; adtAscending[0] = dtToday.addYears(3); adtAscending[1] = dtToday.addYears(5); adtAscending[2] = dtToday.addYears(10); adtAscending[3] = dtToday.addYears(30); adtAscending[4] = dtToday.addYears(60); Map<JulianDate, Double> mapOutstandingNotional = FI.GetIssuerAggregateOutstandingNotional(dtToday, strTicker, adtAscending); for (Map.Entry<JulianDate, Double> me : mapOutstandingNotional.entrySet()) System.out.println("[" + JulianDate.Today() + "=>" + me.getKey() + "] = " + me.getValue()); }