Example #1
0
        public void visit(IborCoupon c)
        {
            IborCouponPricer iborCouponPricer = pricer_ as IborCouponPricer;

            Utils.QL_REQUIRE(iborCouponPricer != null, () => "pricer not compatible with Ibor coupon");
            c.setPricer(iborCouponPricer);
        }
Example #2
0
        public override void initialize(FloatingRateCoupon coupon)
        {
            gearing_       = coupon.gearing();
            spread_        = coupon.spread();
            accrualPeriod_ = coupon.accrualPeriod();
            Utils.QL_REQUIRE(accrualPeriod_.IsNotEqual(0.0), () => "null accrual period");

            index_ = coupon.index() as IborIndex;
            if (index_ == null)
            {
                // check if the coupon was right
                IborCoupon c = coupon as IborCoupon;
                Utils.QL_REQUIRE(c != null, () => "IborCoupon required");
                // coupon was right, index is not
                Utils.QL_FAIL("IborIndex required");
            }

            Handle <YieldTermStructure> rateCurve = index_.forwardingTermStructure();
            Date paymentDate = coupon.date();

            if (paymentDate > rateCurve.link.referenceDate())
            {
                discount_ = rateCurve.link.discount(paymentDate);
            }
            else
            {
                discount_ = 1.0;
            }

            spreadLegValue_ = spread_ * accrualPeriod_ * discount_;

            coupon_ = coupon;
        }
Example #3
0
        public override void setupArguments(IPricingEngineArguments args)
        {
            base.setupArguments(args);

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

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

            List <CashFlow> fixedCoupons = fixedLeg();

            arguments.fixedResetDates = new InitializedList <Date>(fixedCoupons.Count);
            arguments.fixedPayDates   = new InitializedList <Date>(fixedCoupons.Count);
            arguments.fixedCoupons    = new InitializedList <double>(fixedCoupons.Count);

            for (int i = 0; i < fixedCoupons.Count; ++i)
            {
                FixedRateCoupon coupon = (FixedRateCoupon)fixedCoupons[i];

                arguments.fixedPayDates[i]   = coupon.date();
                arguments.fixedResetDates[i] = coupon.accrualStartDate();
                arguments.fixedCoupons[i]    = coupon.amount();
            }

            List <CashFlow> floatingCoupons = floatingLeg();

            arguments.floatingResetDates   = new InitializedList <Date>(floatingCoupons.Count);
            arguments.floatingPayDates     = new InitializedList <Date>(floatingCoupons.Count);
            arguments.floatingFixingDates  = new InitializedList <Date>(floatingCoupons.Count);
            arguments.floatingAccrualTimes = new InitializedList <double>(floatingCoupons.Count);
            arguments.floatingSpreads      = new InitializedList <double>(floatingCoupons.Count);
            arguments.floatingCoupons      = new InitializedList <double>(floatingCoupons.Count);
            for (int i = 0; i < floatingCoupons.Count; ++i)
            {
                IborCoupon coupon = (IborCoupon)floatingCoupons[i];

                arguments.floatingResetDates[i] = coupon.accrualStartDate();
                arguments.floatingPayDates[i]   = coupon.date();

                arguments.floatingFixingDates[i]  = coupon.fixingDate();
                arguments.floatingAccrualTimes[i] = coupon.accrualPeriod();
                arguments.floatingSpreads[i]      = coupon.spread();
                try
                {
                    arguments.floatingCoupons[i] = coupon.amount();
                }
                catch
                {
                    arguments.floatingCoupons[i] = default(double);
                }
            }
        }
Example #4
0
        public void visit(IborCoupon c)
        {
            IborCouponPricer pricer = pricer_ as IborCouponPricer;

            if (pricer == null)
            {
                throw new ApplicationException("pricer not compatible with Ibor coupon");
            }
            c.setPricer(pricer);
        }
Example #5
0
 public DigitalIborCoupon(IborCoupon underlying, 
     double? callStrike = null,
     Position.Type callPosition = Position.Type.Long,
     bool isCallATMIncluded = false,
     double? callDigitalPayoff = null,
     double? putStrike = null,
     Position.Type putPosition = Position.Type.Long,
     bool isPutATMIncluded = false,
     double? putDigitalPayoff = null,
     DigitalReplication replication = null)
     : base(underlying, callStrike, callPosition, isCallATMIncluded, callDigitalPayoff, putStrike, putPosition, isPutATMIncluded, putDigitalPayoff, replication)
 {
 }
Example #6
0
 public DigitalIborCoupon(IborCoupon underlying,
                          double?callStrike              = null,
                          Position.Type callPosition     = Position.Type.Long,
                          bool isCallATMIncluded         = false,
                          double?callDigitalPayoff       = null,
                          double?putStrike               = null,
                          Position.Type putPosition      = Position.Type.Long,
                          bool isPutATMIncluded          = false,
                          double?putDigitalPayoff        = null,
                          DigitalReplication replication = null)
     : base(underlying, callStrike, callPosition, isCallATMIncluded, callDigitalPayoff, putStrike, putPosition, isPutATMIncluded, putDigitalPayoff, replication)
 {
 }
Example #7
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);

            if (!(size_ == flows.Count))
            {
                throw new ArgumentException("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];

                if (!(coupon.date() == coupon.accrualEndDate()))
                {
                    throw new ArgumentException("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());
            }
        }
Example #8
0
        //===========================================================================//
        //                              BlackIborCouponPricer                        //
        //===========================================================================//
        public override void initialize(FloatingRateCoupon coupon)
        {
            coupon_ = coupon as IborCoupon;
            if (coupon_ == null) throw new ApplicationException("Libor coupon required");
            gearing_ = coupon_.gearing();
            spread_ = coupon_.spread();
            Date paymentDate = coupon_.Date;
            IborIndex index = coupon_.index() as IborIndex;
            Handle<YieldTermStructure> rateCurve = index.forwardingTermStructure();

            if (paymentDate > rateCurve.link.referenceDate())
                discount_ = rateCurve.link.discount(paymentDate);
            else
                discount_ = 1.0;

            spreadLegValue_ = spread_ * coupon_.accrualPeriod() * discount_;
        }
Example #9
0
 public void visit(IborCoupon c)
 {
     IborCouponPricer pricer = pricer_ as IborCouponPricer;
     if (pricer == null)
         throw new ApplicationException("pricer not compatible with Ibor coupon");
     c.setPricer(pricer);
 }
Example #10
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);
                }
            }
        }
Example #11
0
 // Factory - for Leg generators
 public virtual CashFlow factory(IborCoupon underlying, double? callStrike, Position.Type callPosition, bool isCallATMIncluded, double? callDigitalPayoff, double? putStrike, Position.Type putPosition, bool isPutATMIncluded, double? putDigitalPayoff, DigitalReplication replication)
 {
     return new DigitalIborCoupon(underlying, callStrike, callPosition, isCallATMIncluded, callDigitalPayoff, putStrike, putPosition, isPutATMIncluded, putDigitalPayoff, replication);
 }
Example #12
0
 // Factory - for Leg generators
 public virtual CashFlow factory(IborCoupon underlying, double?callStrike, Position.Type callPosition, bool isCallATMIncluded, double?callDigitalPayoff, double?putStrike, Position.Type putPosition, bool isPutATMIncluded, double?putDigitalPayoff, DigitalReplication replication)
 {
     return(new DigitalIborCoupon(underlying, callStrike, callPosition, isCallATMIncluded, callDigitalPayoff, putStrike, putPosition, isPutATMIncluded, putDigitalPayoff, replication));
 }