package examples; import java.util.ArrayList; import org.quantlib.Actual360; import org.quantlib.Actual365Fixed; import org.quantlib.ActualActual; import org.quantlib.BlackIborCouponPricer; import org.quantlib.BusinessDayConvention; import org.quantlib.Calendar; import org.quantlib.ConstantOptionletVolatility; import org.quantlib.Date; import org.quantlib.DateGeneration; import org.quantlib.DayCounter; import org.quantlib.DepositRateHelper; import org.quantlib.DiscountingBondEngine; import org.quantlib.DoubleVector; import org.quantlib.Euribor6M; import org.quantlib.FixedRateBond; import org.quantlib.FixedRateBondHelper; import org.quantlib.FloatingRateBond; import org.quantlib.FloatingRateCouponPricer; import org.quantlib.Frequency; import org.quantlib.IborCouponPricer; import org.quantlib.IborIndex; import org.quantlib.Month; import org.quantlib.OptionletVolatilityStructureHandle; import org.quantlib.Period; import org.quantlib.PiecewiseFlatForward; import org.quantlib.PricingEngine; import org.quantlib.QuantLib; import org.quantlib.QuantLibJNI; import org.quantlib.QuoteHandle; import org.quantlib.QuoteVector; import org.quantlib.RateHelper; import org.quantlib.RateHelperVector; import org.quantlib.RelinkableQuoteHandleVector; import org.quantlib.RelinkableYieldTermStructureHandle; import org.quantlib.Schedule; import org.quantlib.SimpleQuote; import org.quantlib.SwapRateHelper; import org.quantlib.TARGET; import org.quantlib.Thirty360; import org.quantlib.TimeUnit; import org.quantlib.USDLibor; import org.quantlib.UnitedStates; import org.quantlib.YieldTermStructure; import org.quantlib.ZeroCouponBond; public class Bonds { static { try { System.loadLibrary("QuantLibJNI"); } catch (RuntimeException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { // MARKET DATA Calendar cal = new TARGET(); Date settlementDate = new Date(18, Month.September, 2008); //must be a business day settlementDate = cal.adjust(settlementDate); int fixingDays = 3; int settlementdays = 3; Period period = new Period(-fixingDays, TimeUnit.Days); Date todayDate = cal.advance(settlementDate, period); System.out.println("Today: " + todayDate.weekday() + ", " + todayDate); System.out.println("Settlement date: " + settlementDate.weekday() + ", " + settlementDate); // Building of the bonds discounting yield curve // RATE HELPERS // RateHelpers are built from the above quotes together with // other instrument dependant infos. Quotes are passed in relinkable handles // which could be relinked to some other data source later. // Common data // ZC rates for the short end QuoteHandle zc3mRate = new QuoteHandle(new SimpleQuote(0.0096)); QuoteHandle zc6mRate = new QuoteHandle(new SimpleQuote(0.0145)); QuoteHandle zc1yRate = new QuoteHandle(new SimpleQuote(0.0194)); //QuoteHandle rate, Period tenor, long fixingDays, Calendar calendar, //BusinessDayConvention convention, boolean endOfMonth, DayCounter dayCounter DayCounter zcBondsDayCounter = new Actual365Fixed(); Period tenor = new Period(3, TimeUnit.Months); DepositRateHelper zc3m = new DepositRateHelper(zc3mRate, tenor, fixingDays, cal, BusinessDayConvention.ModifiedFollowing, true, zcBondsDayCounter); DepositRateHelper zc6m = new DepositRateHelper(zc6mRate, tenor, fixingDays, cal, BusinessDayConvention.ModifiedFollowing, true, zcBondsDayCounter); DepositRateHelper zc1y = new DepositRateHelper(zc1yRate, tenor, fixingDays, cal, BusinessDayConvention.ModifiedFollowing, true, zcBondsDayCounter); // setup bonds double redemption = 100.0; final int numberOfBonds = 5; Date issueDates[] = { new Date(15, Month.March, 2005), new Date(15, Month.June, 2005), new Date(30, Month.June, 2006), new Date(15, Month.November, 2002), new Date(15, Month.May, 1987), }; Date maturities[] = { new Date(31, Month.August, 2010), new Date(31, Month.August, 2011), new Date(31, Month.August, 2013), new Date(15, Month.August, 2018), new Date(15, Month.May, 2038), }; double couponRates[] = { 0.02375, 0.04625, 0.03125, 0.04000, 0.04500 }; double marketQuotes[] = { 100.390625, 106.21875, 100.59375, 101.6875, 102.140625 }; QuoteVector quote = new QuoteVector(); for (int i=0; i bondHelpers = new ArrayList(); // Definition of the rate helpers for (int i=0; i