public void testInitialisation() { //"Testing caplet LMM process initialisation..." //SavedSettings backup; DayCounter dayCounter = new Actual360(); RelinkableHandle <YieldTermStructure> termStructure = new RelinkableHandle <YieldTermStructure>();; termStructure.linkTo(Utilities.flatRate(Date.Today, 0.04, dayCounter)); IborIndex index = new Euribor6M(termStructure); OptionletVolatilityStructure capletVol = new ConstantOptionletVolatility( termStructure.currentLink().referenceDate(), termStructure.currentLink().calendar(), BusinessDayConvention.Following, 0.2, termStructure.currentLink().dayCounter()); Calendar calendar = index.fixingCalendar(); for (int daysOffset = 0; daysOffset < 1825 /* 5 year*/; daysOffset += 8) { Date todaysDate = calendar.adjust(Date.Today + daysOffset); Settings.setEvaluationDate(todaysDate); Date settlementDate = calendar.advance(todaysDate, index.fixingDays(), TimeUnit.Days); termStructure.linkTo(Utilities.flatRate(settlementDate, 0.04, dayCounter)); LiborForwardModelProcess process = new LiborForwardModelProcess(60, index); List <double> fixings = process.fixingTimes(); for (int i = 1; i < fixings.Count - 1; ++i) { int ileft = process.nextIndexReset(fixings[i] - 0.000001); int iright = process.nextIndexReset(fixings[i] + 0.000001); int ii = process.nextIndexReset(fixings[i]); if ((ileft != i) || (iright != i + 1) || (ii != i + 1)) { Assert.Fail("Failed to next index resets"); } } } }
IborIndex makeIndex(List <Date> dates, List <double> rates) { DayCounter dayCounter = new Actual360(); RelinkableHandle <YieldTermStructure> termStructure = new RelinkableHandle <YieldTermStructure>(); IborIndex index = new Euribor6M(termStructure); Date todaysDate = index.fixingCalendar().adjust(new Date(4, 9, 2005)); Settings.setEvaluationDate(todaysDate); dates[0] = index.fixingCalendar().advance(todaysDate, index.fixingDays(), TimeUnit.Days); Linear Interpolator = new Linear(); termStructure.linkTo(new InterpolatedZeroCurve <Linear>(dates, rates, dayCounter, Interpolator)); return(index); }
// setup public CommonVars() { // data calendar = new TARGET(); settlementDays = 2; today = calendar.adjust(Date.Today); Settings.setEvaluationDate(today); settlement = calendar.advance(today, settlementDays, TimeUnit.Days); fixedLegConvention = BusinessDayConvention.Unadjusted; fixedLegFrequency = Frequency.Annual; fixedLegDayCounter = new Thirty360(Thirty360.Thirty360Convention.European); bondSettlementDays = 3; bondDayCounter = new ActualActual(); bondConvention = BusinessDayConvention.Following; bondRedemption = 100.0; bmaFrequency = Frequency.Quarterly; bmaConvention = BusinessDayConvention.Following; bmaDayCounter = new ActualActual(); deposits = depositData.Length; fras = fraData.Length; swaps = swapData.Length; bonds = bondData.Length; bmas = bmaData.Length; // market elements rates = new List <SimpleQuote>(deposits + swaps); fraRates = new List <SimpleQuote>(fras); prices = new List <SimpleQuote>(bonds); fractions = new List <SimpleQuote>(bmas); for (int i = 0; i < deposits; i++) { rates.Add(new SimpleQuote(depositData[i].rate / 100)); } for (int i = 0; i < swaps; i++) { rates.Add(new SimpleQuote(swapData[i].rate / 100)); } for (int i = 0; i < fras; i++) { fraRates.Add(new SimpleQuote(fraData[i].rate / 100)); } for (int i = 0; i < bonds; i++) { prices.Add(new SimpleQuote(bondData[i].price)); } for (int i = 0; i < bmas; i++) { fractions.Add(new SimpleQuote(bmaData[i].rate / 100)); } // rate helpers instruments = new List <RateHelper>(deposits + swaps); fraHelpers = new List <RateHelper>(fras); bondHelpers = new List <RateHelper>(bonds); schedules = new List <Schedule>(bonds); bmaHelpers = new List <RateHelper>(bmas); IborIndex euribor6m = new Euribor6M(); for (int i = 0; i < deposits; i++) { Handle <Quote> r = new Handle <Quote>(rates[i]); instruments.Add(new DepositRateHelper(r, new Period(depositData[i].n, depositData[i].units), euribor6m.fixingDays(), calendar, euribor6m.businessDayConvention(), euribor6m.endOfMonth(), euribor6m.dayCounter())); } for (int i = 0; i < swaps; i++) { Handle <Quote> r = new Handle <Quote>(rates[i + deposits]); instruments.Add(new SwapRateHelper(r, new Period(swapData[i].n, swapData[i].units), calendar, fixedLegFrequency, fixedLegConvention, fixedLegDayCounter, euribor6m)); } Euribor3M euribor3m = new Euribor3M(); for (int i = 0; i < fras; i++) { Handle <Quote> r = new Handle <Quote>(fraRates[i]); fraHelpers.Add(new FraRateHelper(r, fraData[i].n, fraData[i].n + 3, euribor3m.fixingDays(), euribor3m.fixingCalendar(), euribor3m.businessDayConvention(), euribor3m.endOfMonth(), euribor3m.dayCounter())); } for (int i = 0; i < bonds; i++) { Handle <Quote> p = new Handle <Quote>(prices[i]); Date maturity = calendar.advance(today, bondData[i].n, bondData[i].units); Date issue = calendar.advance(maturity, -bondData[i].length, TimeUnit.Years); List <double> coupons = new List <double>() { bondData[i].coupon / 100.0 }; schedules.Add(new Schedule(issue, maturity, new Period(bondData[i].frequency), calendar, bondConvention, bondConvention, DateGeneration.Rule.Backward, false)); bondHelpers.Add(new FixedRateBondHelper(p, bondSettlementDays, bondRedemption, schedules[i], coupons, bondDayCounter, bondConvention, bondRedemption, issue)); } }