Ejemplo n.º 1
0
        public LiborForwardModelProcess(int size, IborIndex index, IDiscretization disc)
            : base(disc)
        {
            size_              = size;
            index_             = index;
            initialValues_     = new InitializedList <double>(size_);
            fixingTimes_       = new InitializedList <double>(size);
            fixingDates_       = new InitializedList <Date>(size_);
            accrualStartTimes_ = new InitializedList <double>(size);
            accrualEndTimes_   = new InitializedList <double>(size);
            accrualPeriod_     = new InitializedList <double>(size_);
            m1 = new Vector(size_);
            m2 = new Vector(size_);
            DayCounter       dayCounter = index.dayCounter();
            IList <CashFlow> flows      = cashFlows(1);

            Utils.QL_REQUIRE(size_ == flows.Count, () => "wrong number of cashflows");

            Date       settlement = index_.forwardingTermStructure().link.referenceDate();
            Date       startDate;
            IborCoupon iborcoupon = (IborCoupon)flows[0];

            startDate = iborcoupon.fixingDate();

            for (int i = 0; i < size_; ++i)
            {
                IborCoupon coupon = (IborCoupon)flows[i];

                Utils.QL_REQUIRE(coupon.date() == coupon.accrualEndDate(), () => "irregular coupon types are not suppported");

                initialValues_[i] = coupon.rate();
                accrualPeriod_[i] = coupon.accrualPeriod();

                fixingDates_[i]       = coupon.fixingDate();
                fixingTimes_[i]       = dayCounter.yearFraction(startDate, coupon.fixingDate());
                accrualStartTimes_[i] = dayCounter.yearFraction(settlement, coupon.accrualStartDate());
                accrualEndTimes_[i]   = dayCounter.yearFraction(settlement, coupon.accrualEndDate());
            }
        }
Ejemplo n.º 2
0
        public override void setupArguments(IPricingEngineArguments args)
        {
            base.setupArguments(args);

            BasisSwap.Arguments arguments = args as BasisSwap.Arguments;
            if (arguments == null) // it's a swap engine...
            {
                return;
            }

            arguments.type    = type_;
            arguments.nominal = nominal_;


            List <CashFlow> floating1Coupons = floating1Leg();

            arguments.floating1ResetDates   = new InitializedList <Date>(floating1Coupons.Count);
            arguments.floating1PayDates     = new InitializedList <Date>(floating1Coupons.Count);
            arguments.floating1FixingDates  = new InitializedList <Date>(floating1Coupons.Count);
            arguments.floating1AccrualTimes = new InitializedList <double>(floating1Coupons.Count);
            arguments.floating1Spreads      = new InitializedList <double>(floating1Coupons.Count);
            arguments.floating1Coupons      = new InitializedList <double>(floating1Coupons.Count);
            for (int i = 0; i < floating1Coupons.Count; ++i)
            {
                IborCoupon coupon = (IborCoupon)floating1Coupons[i];

                arguments.floating1ResetDates[i] = coupon.accrualStartDate();
                arguments.floating1PayDates[i]   = coupon.date();

                arguments.floating1FixingDates[i]  = coupon.fixingDate();
                arguments.floating1AccrualTimes[i] = coupon.accrualPeriod();
                arguments.floating1Spreads[i]      = coupon.spread();
                try
                {
                    arguments.floating1Coupons[i] = coupon.amount();
                }
                catch
                {
                    arguments.floating1Coupons[i] = default(double);
                }
            }

            List <CashFlow> floating2Coupons = floating2Leg();

            arguments.floating2ResetDates   = new InitializedList <Date>(floating2Coupons.Count);
            arguments.floating2PayDates     = new InitializedList <Date>(floating2Coupons.Count);
            arguments.floating2FixingDates  = new InitializedList <Date>(floating2Coupons.Count);
            arguments.floating2AccrualTimes = new InitializedList <double>(floating2Coupons.Count);
            arguments.floating2Spreads      = new InitializedList <double>(floating2Coupons.Count);
            arguments.floating2Coupons      = new InitializedList <double>(floating2Coupons.Count);
            for (int i = 0; i < floating2Coupons.Count; ++i)
            {
                IborCoupon coupon = (IborCoupon)floating2Coupons[i];

                arguments.floating2ResetDates[i] = coupon.accrualStartDate();
                arguments.floating2PayDates[i]   = coupon.date();

                arguments.floating2FixingDates[i]  = coupon.fixingDate();
                arguments.floating2AccrualTimes[i] = coupon.accrualPeriod();
                arguments.floating2Spreads[i]      = coupon.spread();
                try
                {
                    arguments.floating2Coupons[i] = coupon.amount();
                }
                catch
                {
                    arguments.floating2Coupons[i] = default(double);
                }
            }
        }