public ForwardRateAgreement(DateTime startDate, double parRate, FloatRateIndex rateIndex, SwapPayReceiveType payRec, FraDiscountingType fraType, string forecastCurve, string discountCurve) { StartDate = startDate; ResetDate = StartDate.AddPeriod(RollType.P, rateIndex.HolidayCalendars, rateIndex.FixingOffset); EndDate = new TenorDateRelative(rateIndex.ResetTenor); RateIndex = rateIndex; ParRate = parRate; Basis = rateIndex.DayCountBasis; PayRec = payRec; FraLeg = new GenericSwapLeg(StartDate, EndDate.Date(StartDate, rateIndex.RollConvention, rateIndex.HolidayCalendars), rateIndex.HolidayCalendars, rateIndex.Currency, rateIndex.ResetTenor, Basis) { FixedRateOrMargin = (decimal)ParRate }; FlowScheduleFra = FraLeg.GenerateSchedule(); FraLeg.FixedRateOrMargin = (decimal)ParRate; FraLeg.LegType = SwapLegType.Fra; FlowScheduleFra.Flows[0].SettleDate = StartDate; ForecastCurve = forecastCurve; DiscountCurve = discountCurve; FraType = fraType; PillarDate = FlowScheduleFra.Flows[0].AccrualPeriodEnd; }
public IrSwap(DateTime startDate, Frequency swapTenor, FloatRateIndex rateIndex, double parRate, SwapPayReceiveType swapType, string forecastCurve, string discountCurve) { SwapTenor = swapTenor; ResetFrequency = rateIndex.ResetTenor; StartDate = startDate; EndDate = StartDate.AddPeriod(rateIndex.RollConvention, rateIndex.HolidayCalendars, SwapTenor); ParRate = parRate; BasisFloat = rateIndex.DayCountBasis; BasisFixed = rateIndex.DayCountBasisFixed; SwapType = swapType; FixedLeg = new GenericSwapLeg(StartDate, swapTenor, rateIndex.HolidayCalendars, rateIndex.Currency, ResetFrequency, BasisFixed) { FixedRateOrMargin = (decimal)parRate, LegType = SwapLegType.Fixed, Nominal = 1e6M * (swapType == SwapPayReceiveType.Payer ? -1.0M : 1.0M) }; FloatLeg = new GenericSwapLeg(StartDate, swapTenor, rateIndex.HolidayCalendars, rateIndex.Currency, ResetFrequency, BasisFloat) { FixedRateOrMargin = 0.0M, LegType = SwapLegType.Float, Nominal = 1e6M * (swapType == SwapPayReceiveType.Payer ? 1.0M : -1.0M) }; FlowScheduleFixed = FixedLeg.GenerateSchedule(); FlowScheduleFloat = FloatLeg.GenerateSchedule(); ResetDates = FlowScheduleFloat.Flows.Select(x => x.FixingDateStart).ToArray(); ForecastCurve = forecastCurve; DiscountCurve = discountCurve; }
public ForwardRateAgreement(DateTime valDate, string fraCode, double parRate, FloatRateIndex rateIndex, SwapPayReceiveType payRec, FraDiscountingType fraType, string forecastCurve, string discountCurve) { var code = fraCode.ToUpper().Split('X'); StartDate = valDate.AddPeriod(rateIndex.RollConvention, rateIndex.HolidayCalendars, new Frequency(code[0] + "M")); ResetDate = StartDate.AddPeriod(RollType.P, rateIndex.HolidayCalendars, rateIndex.FixingOffset); EndDate = new TenorDateRelative(rateIndex.ResetTenor); ParRate = parRate; Basis = rateIndex.DayCountBasis; PayRec = payRec; FraLeg = new GenericSwapLeg(StartDate, EndDate.Date(StartDate, rateIndex.RollConvention, rateIndex.HolidayCalendars), rateIndex.HolidayCalendars, rateIndex.Currency, rateIndex.ResetTenor, Basis) { FixedRateOrMargin = (decimal)ParRate }; FlowScheduleFra = FraLeg.GenerateSchedule(); FraLeg.FixedRateOrMargin = (decimal)ParRate; FraLeg.LegType = SwapLegType.Fra; FlowScheduleFra.Flows[0].SettleDate = StartDate; ForecastCurve = forecastCurve; DiscountCurve = discountCurve; FraType = fraType; }