Example #1
0
        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");
                    }
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
            // 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));
                }
            }