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()); } }
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()); } }
protected StochasticProcess(IDiscretization disc) { discretization_ = disc; }
protected ForwardMeasureProcess(IDiscretization disc) : base(disc) { }