public void SetRequests() { RequiredResults.Clear(); foreach (Request request in ActualRequests) { if (IsMy) { if (request.AuthorID == Storage.User.Id) { Client client = Users.GetInfoAboutUser(request.AuthorID).User; RequiredResults.Add(new Models.RequestModel() { AuthorID = request.AuthorID.ToString(), AuthorName = client.Surname + " " + client.Name, BloodGroup = request.BloodGroup, RFactor = request.RFactor, ExtraBloodData = request.ExtraBloodData, Region = request.Region, Description = request.Descripton }); } } else //If we have no data about user's blood we need to show to him/her all the results if ((request.BloodGroup == Storage.User.BloodGroup || Storage.User.BloodGroup == "") && (request.RFactor == Storage.User.RFactor || Storage.User.RFactor == "") && request.Solved == false) { Client client = Users.GetInfoAboutUser(request.AuthorID).User; RequiredResults.Add(new Models.RequestModel() { AuthorID = request.AuthorID.ToString(), AuthorName = client.Surname + " " + client.Name, BloodGroup = request.BloodGroup, RFactor = request.RFactor, ExtraBloodData = request.ExtraBloodData, Region = request.Region, Description = request.Descripton }); } } if (RequiredResults.Count == 0) { RequiredResults.Add(new Models.RequestModel() { AuthorID = "-1", AuthorName = "Нет данных", BloodGroup = "Нет данных", RFactor = "Нет данных", ExtraBloodData = "Нет данных", Description = "Поиск не дал результатов" }); } NotifList.ItemsSource = RequiredResults; }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); CFListBaseDeal <TCashflowList> deal = (CFListBaseDeal <TCashflowList>)fDeal; fSettlementOffsetHelper.InitialiseHolidayCalendars(factors.CalendarData); deal.Cashflows.SetCashflowRounding(Cashflow_Rounding); }
/// <summary> /// Prepare for valuation anything that will be shared between scenarios. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); CommitmentDeal deal = (CommitmentDeal)Deal; // Add to valuation time grid fT.Add(deal.Effective_Date - 1.0); fT.Add(deal.Effective_Date); for (int i = 0; i < deal.Amortisation.Count; ++i) { fT.AddPayDate(deal.Amortisation[i].Date); } }
private void SearchRequests(object sender, System.EventArgs e) { string text = SearchEntry.Text; if (!string.IsNullOrEmpty(text)) { RequiredResults.Clear(); string[] data = text.Split(); foreach (Request request in ActualRequests) { foreach (string str in data) { if ((str != null) && (request.ToString().ToLower().IndexOf(str.ToLower()) != -1)) { if (IsMy) { if (request.AuthorID == Storage.User.Id) { Client client = Users.GetInfoAboutUser(request.AuthorID).User; RequiredResults.Add(new Models.RequestModel() { AuthorID = request.AuthorID.ToString(), AuthorName = client.Surname + " " + client.Name, BloodGroup = request.BloodGroup, RFactor = request.RFactor, ExtraBloodData = request.ExtraBloodData, Region = request.Region, Description = request.Descripton }); } } else { if ((request.BloodGroup == Storage.User.BloodGroup || Storage.User.BloodGroup == "") && (request.RFactor == Storage.User.RFactor || Storage.User.RFactor == "") && request.Solved == false) { Client client = Users.GetInfoAboutUser(request.AuthorID).User; RequiredResults.Add(new Models.RequestModel() { AuthorID = request.AuthorID.ToString(), AuthorName = client.Surname + " " + client.Name, BloodGroup = request.BloodGroup, RFactor = request.RFactor, ExtraBloodData = request.ExtraBloodData, Region = request.Region, Description = request.Descripton }); } } } break; } } } else { RequiredResults.Clear(); SetRequests(); } if (RequiredResults.Count == 0) { RequiredResults.Add(new Models.RequestModel() { AuthorID = "-1", AuthorName = "Нет данных", BloodGroup = "Нет данных", RFactor = "Нет данных", ExtraBloodData = "Нет данных", Description = "Поиск не дал результатов" }); } NotifList.ItemsSource = RequiredResults; }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); BaseCliquetOption deal = (BaseCliquetOption)fDeal; DateList accrualDates = CashflowGeneration.GenerateStripOfDates(deal.Effective_Date, deal.Maturity_Date, deal.Frequency, deal.GetHolidayCalendar()); fTimes = new double[accrualDates.Count]; for (int i = 0; i < accrualDates.Count; ++i) { fTimes[i] = CalcUtils.DaysToYears(accrualDates[i] - factors.BaseDate); } // Get the asset price from the deal helper var dealHelper = (BaseAssetFxDealHelper)deal.GetDealHelper(); IAssetPrice assetPrice = dealHelper.GetAssetPrice(factors); fKnownPrices = deal.GetKnownPrices(accrualDates, factors, assetPrice); // Add expiry dates to valuation time grid. if (accrualDates.Count > 1) { DateList expiryDates = new DateList(accrualDates); expiryDates.RemoveAt(0); fT.AddPayDates(expiryDates, requiredResults.CashRequired()); } }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); CFFixedInterestListDeal deal = (CFFixedInterestListDeal)Deal; // Set up cashflow list deal.Cashflows.CalculateInterest(factors.BaseDate); // Add to valuation time grid bool payDatesRequired = ValueOnCashflowDates() && requiredResults.CashRequired(); fT.AddPayDates <CFFixedInterest>(deal.Cashflows, payDatesRequired); double baseDate = factors.BaseDate; double settlementDate = deal.Settlement_Date; if (settlementDate >= baseDate) { fT.AddPayDate(settlementDate, payDatesRequired); var accrualCalendar = deal.GetHolidayCalendar(); fAccruedInterest = deal.Cashflows.CalculateAccrual(settlementDate, false, accrualCalendar); fSettlementAmount = deal.Settlement_Amount; if (deal.Settlement_Amount_Is_Clean == YesNo.Yes) { fSettlementAmount += fAccruedInterest; } } // Settlement date takes precedence. if (Use_Settlement_Offset == YesNo.Yes && settlementDate != 0.0) { fCutoffDate = 0.0; } if (deal.Investment_Horizon > 0.0) { fT.AddPayDate(deal.Investment_Horizon, payDatesRequired); } if (Use_Survival_Probability == YesNo.Yes) { fRecoveryList = new CFRecoveryList(); fRecoveryList.PopulateRecoveryCashflowList(baseDate, settlementDate, deal.Cashflows); } }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (IDIOptionDeal)Deal; fStrike = deal.StrikeForValuation(); fBaseDate = factors.BaseDate; }
/// <summary> /// Prepare for valuation anything that will be shared between scenarios. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (BondOptionDeal)Deal; var tExpiry = deal.GetTimeToExpiry(factors.BaseDate); var tMaturity = CalcUtils.DaysToYears(deal.Bond_Maturity_Date - factors.BaseDate); var dateGenerationResults = deal.GetDateGenerationResults(); fPayDates = dateGenerationResults.PayDates; fAccruals = dateGenerationResults.AccrualYearFractions; fPrincipals = dateGenerationResults.Principals; fFinalPrincipal = dateGenerationResults.FinalPrincipal; fStrike = deal.Strike_Price; fStrikeYield = deal.GetStrikeYield(ref fStrike, tExpiry, tMaturity, fPayDates, fAccruals); fT.AddPayDate(deal.Expiry_Date, requiredResults.CashRequired()); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); CFFixedListDeal deal = (CFFixedListDeal)Deal; // Add to valuation time grid fT.AddPayDates <CFFixed>(deal.Cashflows); }
/// <inheritdoc /> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); fItems.PreCloneInitialize(factors, baseTimes, requiredResults); int fixedCount = fFixedCashflowList.Count(); int floatCount = fFloatCashflowList.Count(); fDates = new DateList(); // Get a list of all the relevant dates for the deal. for (int i = 0; i < fixedCount; i++) { var fixedDate = fFixedCashflowList[i].Payment_Date; fDates.Add(fixedDate); } for (int i = 0; i < floatCount; i++) { var payDate = fFloatCashflowList[i].Payment_Date; var startDate = fFloatCashflowList[i].Resets[0].Rate_Start_Date; if (!fDates.Contains(payDate)) { fDates.Add(payDate); } if (!fDates.Contains(startDate)) { fDates.Add(startDate); } } int count = fDates.Count; fFixedCouponWeight = new double[count]; fFixedCouponRate = new double[count]; // Calucate the static parts of the coefficients foreach (var cf in fFixedCashflowList) { int idx = fDates.IndexOf(cf.Payment_Date); fFixedCouponWeight[idx] += cf.Accrual_Year_Fraction * cf.Notional; fFixedCouponRate[idx] = cf.Rate; } fFloatingCouponWeight = new double[count]; foreach (var cf in fFloatCashflowList) { int idx = fDates.IndexOf(cf.Payment_Date); double rateYearFraction = cf.Resets[0].Rate_Year_Fraction; double yearFractionRatio = (rateYearFraction < CalcUtils.TINY) ? 1.0 : cf.Accrual_Year_Fraction / rateYearFraction; fFloatingCouponWeight[idx] += cf.Notional * yearFractionRatio; } }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); var deal = (SwaptionBaseDeal)Deal; // Call HeadNodeInitialize on leg models to create time grid on leg models. fItems.HeadNodeInitialize(factors, baseTimes, requiredResults); SwaptionBaseValuation.SetCashflowLists(null, deal, ref fFixedCashflowList, ref fFloatCashflowList); Debug.Assert(fFloatCashflowList != null && fFixedCashflowList != null, "One or both of the underlying swap legs are null."); // Calculate fixed interest cashflows fFixedCashflowList.CalculateInterest(factors.BaseDate); // Add to valuation time grid bool cashRequired = requiredResults.CashRequired(); fT.Add(deal.Option_Expiry_Date, true); if (deal.Settlement_Style == SettlementType.Physical) { fT.AddPayDates(fFixedCashflowList, cashRequired); fT.AddPayDates(fFloatCashflowList, cashRequired); } else { fT.AddPayDate(deal.Settlement_Date, cashRequired); } }
/// <summary> /// Add required results. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.PreCloneInitialize(factors, baseTimes, resultsRequired); if (resultsRequired.Result <AddOnProfiles>() == null) { var addOnProfiles = new AddOnProfiles(resultsRequired.Result <PVProfiles>().VectorSize); resultsRequired.Add(addOnProfiles); } if (resultsRequired.Result <PositiveMtmProfiles>() == null) { var mtmPositiveProfiles = new PositiveMtmProfiles(resultsRequired.Result <PVProfiles>().VectorSize); resultsRequired.Add(mtmPositiveProfiles); } }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults ResultsRequired) { base.PreCloneInitialize(factors, baseTimes, ResultsRequired); fItems.PreCloneInitialize(factors, baseTimes, ResultsRequired); CallableStructuredDeal deal = (CallableStructuredDeal)fDeal; // Create a list of sorted exercise items with exercise date >= baseDate and exercise date <= deal's end date. fExercises = CreateExerciseList(factors.BaseDate, deal.EndDate(), deal.Exercise_Dates, deal.Principal); AddDatesToValuationGrid(factors.BaseDate, ResultsRequired.CashRequired()); }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.HeadNodeInitialize(factors, baseTimes, resultsRequired); fItems.HeadNodeInitialize(factors, baseTimes, resultsRequired); }
/// <summary> /// Prepare for valuation anything that will be shared between scenarios. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); CFListBaseDeal <TCashflowList> deal = (CFListBaseDeal <TCashflowList>)fDeal; fBuySellSign = deal.Buy_Sell == BuySell.Buy ? +1 : -1; fCutoffDate = fSettlementOffsetHelper.GetCutoffDate(factors.BaseDate); }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); Prepare(factors.BaseDate, factors.RateFixings); fSettlementOffsetHelper.InitialiseHolidayCalendars(factors.CalendarData); }
/// <inheritdoc /> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.PreCloneInitialize(factors, baseTimes, resultsRequired); // Add to valuation time grid fT.AddPayDate(fPaymentDate, resultsRequired.CashRequired()); fCutoffDate = fSettlementOffsetHelper.GetCutoffDate(factors.BaseDate); }
/// <summary> /// Prepare for valuation anything that will be shared between scenarios. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); FixedCashflowDeal deal = (FixedCashflowDeal)fDeal; fAmount = deal.Amount; }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.PreCloneInitialize(factors, baseTimes, resultsRequired); // Set up date lists DateGenerationRequest dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresAccrualDates = true, RequiresYearFractions = true }; DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = fDeal.Effective_Date, MaturityDate = fDeal.Maturity_Date, CouponPeriod = fDeal.Pay_Frequency, AccrualCalendar = fDeal.GetHolidayCalendar(), AccrualDayCount = fDeal.Accrual_Day_Count, }; DateGenerationResults dateGenerationResults = CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams); AccrualDates = dateGenerationResults.AccrualDates; PayDates = dateGenerationResults.PayDates; Accruals = dateGenerationResults.AccrualYearFractions; bool cashRequired = resultsRequired.CashRequired(); fT.AddPayDate(fDeal.Upfront_Date, cashRequired); fT.AddPayDates(PayDates, cashRequired); }
/// <summary> /// Prepare for valuation anything that will be shared between scenarios. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); FixedCashflowBaseDeal deal = (FixedCashflowBaseDeal)fDeal; // Add to valuation time grid fT.AddPayDate(deal.Payment_Date); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (CalendarSpreadOption)Deal; fCallPutSign = deal.Option_Type == OptionType.Call ? 1 : -1; fScale = (deal.Buy_Sell == BuySell.Buy ? +1.0 : -1.0) * deal.Units * deal.Contract_Size; // Add to valuation time grid fT.AddPayDate(deal.Settlement_Date, requiredResults.CashRequired()); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (CFFloatingInterestListDeal)Deal; // Set up cashflow list fCashflows.SetUseConvexityCorrection(Convexity_Correction == YesNo.Yes); fCashflows.SetUseQuantoCorrection(Quanto_Correction == YesNo.Yes); fCashflows.SetFasterAveraging(Faster_Averaging_Valuation == YesNo.Yes); fCashflows.SetOISCashflowGroupSize(OIS_Cashflow_Group_Size); fCashflows.SetConvexityLowRateCutoff(Convexity_Low_Rate_Cutoff); fCashflows.SetOISRateRounding(OIS_Rate_Rounding); double baseDate = factors.BaseDate; fCharacteristics = fCashflows.Analyze(baseDate); if (fCharacteristics.IsOIS) { fCashflows.InitializeFastOISCalculation(baseDate); } if (fCharacteristics.IsVanillaSwap) { fCashflows.CalculateAmounts(baseDate); } // Add to valuation time grid bool payDatesRequired = ValueOnCashflowDates() && requiredResults.CashRequired(); fT.AddPayDates(fCashflows, payDatesRequired); double settlementDate = deal.Settlement_Date; if (settlementDate > 0.0) { fT.AddPayDate(settlementDate, payDatesRequired); } if (Use_Settlement_Offset == YesNo.Yes && settlementDate != 0.0) { fCutoffDate = 0.0; } if (deal.Investment_Horizon > 0.0) { fT.AddPayDate(deal.Investment_Horizon, payDatesRequired); } if (Use_Survival_Probability == YesNo.Yes) { fRecoveryList = new CFRecoveryList(); fRecoveryList.PopulateRecoveryCashflowList(baseDate, settlementDate, fCashflows); } }
/// <summary> /// Clones the cashflow list and applies missing fixings from the fixings file. If /// fixings are applied, the clone is stored in place of the original deal. /// </summary> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); var baseDate = factors.BaseDate; var deal = (CFFloatingInterestListDeal)fDeal; fCashflows = deal.Cashflows; // Apply any missing rate fixings, performing minimal cloning if (fCashflows.HasMissingRates(baseDate)) { fCashflows = CashflowsFixingsHelper.ApplyRateFixings(factors, deal, fCashflows); } }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.HeadNodeInitialize(factors, baseTimes, resultsRequired); var deal = (AverageForwardExplicitDealBase)Deal; fScale = (deal.Buy_Sell == BuySell.Buy ? +1 : -1) * deal.GetUnits(); fSamplingTimes = new double[deal.Sampling_Data.Count]; fSamplingTimesPlusTenor = new double[deal.Sampling_Data.Count]; int index = 0; Term tenorAsTerm = Period.ValueToTerm(deal.Tenor); // Loop over sampling dates and generate relevant sampling times. foreach (SamplingEntryAsset sample in deal.Sampling_Data) { double endDate = DateAdjuster.Add(sample.Date, tenorAsTerm, deal.GetHolidayCalendar()); double sampleTime = CalcUtils.DaysToYears(sample.Date - factors.BaseDate); // Store the start time and the end time. fSamplingTimes[index] = sampleTime; // Discount Factor and Forward Factor times are in Act365. fSamplingTimesPlusTenor[index] = CalcUtils.DaysToYears(endDate - factors.BaseDate); index++; } // Create a deep copy of the sampling data list and replace missing values with data from the rate fixings file var assetPrice = ((BaseAssetFxDealHelper)deal.GetDealHelper()).GetAssetPrice(factors); string assetCurrency = fPayoffType == PayoffType.Compo ? fPayoffCurrency : fCurrency; fSamplingData = deal.Sampling_Data.FillMissingDataFromFixings(factors.RateFixings, factors, assetPrice, assetCurrency, deal, "calculation of asset average"); // Add to valuation time grid fT.AddPayDate(deal.Maturity_Date, resultsRequired.CashRequired()); }
/// <summary> /// Prepare for valuation anything that will be shared between scenarios. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (BondLendingBase)fDeal; DateGenerationRequest dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresYearFractions = true, RequiresPrincipals = true, }; DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = deal.Issue_Date, MaturityDate = deal.Bond_Maturity_Date, CouponPeriod = deal.Coupon_Interval, FirstCouponDate = deal.First_Coupon_Date, PenultimateCouponDate = deal.Penultimate_Coupon_Date, AccrualCalendar = deal.GetHolidayCalendar(), AccrualDayCount = deal.Accrual_Day_Count, Principal = deal.Notional, Amortisation = deal.Amortisation }; DateGenerationResults dateGenerationResults = CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams); fPayDates = dateGenerationResults.PayDates; fAccruals = dateGenerationResults.AccrualYearFractions; fPrincipals = dateGenerationResults.Principals; fFinalPrincipal = dateGenerationResults.FinalPrincipal; }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); // Set up cashflow list fCashflows.SetUseConvexityCorrection(Convexity_Correction == YesNo.Yes); fCashflows.SetUseQuantoCorrection(Quanto_Correction == YesNo.Yes); fCashflows.SetConvexityLowRateCutoff(Convexity_Low_Rate_Cutoff); // Add to valuation time grid fT.AddPayDates(fCashflows); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); CallableBondForward deal = (CallableBondForward)Deal; double firstCallDate = deal.First_Call_Date; double lastCallDate = deal.Last_Call_Date; double baseDate = factors.BaseDate; double issueDate = deal.Issue_Date; double settlementDate = deal.Settlement_Date; double priceDate = Math.Max(baseDate, settlementDate + 1.0); // bond cashflows before priceDate do not contribute to bond price double maturityDate = deal.Bond_Maturity_Date; double couponInterval = deal.Coupon_Interval; double notional = deal.Notional; IHolidayCalendar holidayCalendar = deal.GetHolidayCalendar(); DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = issueDate, MaturityDate = maturityDate, AccrualDayCount = deal.Accrual_Day_Count, FirstCouponDate = deal.First_Coupon_Date, PenultimateCouponDate = deal.Penultimate_Coupon_Date, Amortisation = deal.Amortisation, CouponPeriod = couponInterval, Principal = notional, PrincipalExchange = PrincipalExchange.Start_Maturity, AccrualCalendar = holidayCalendar }; CashflowListDetail detail = CashflowGeneration.GenerateCashflowListDetail(dateGenerationParams); // Collect reset dates as we loop. var resetDates = new DateList(detail.Coupon_Details.Count); // Create cashflow list fCashflowList = new CFFixedInterestList(); fCashflowList.Compounding = YesNo.No; foreach (CouponDetail couponDetail in detail.Coupon_Details) { if (couponDetail.Payment_Date < priceDate) { continue; } foreach (AccrualDetail accrualDetail in couponDetail.Accrual_Details) { resetDates.Add(accrualDetail.Accrual_Start_Date); if (couponDetail.Payment_Date < priceDate) { continue; } var cashflow = new CFFixedInterest { Payment_Date = couponDetail.Payment_Date, Notional = accrualDetail.Notional, Accrual_Start_Date = accrualDetail.Accrual_Start_Date, Accrual_End_Date = accrualDetail.Accrual_End_Date, Accrual_Year_Fraction = accrualDetail.Accrual_Year_Fraction, Rate = deal.Coupon_Rate * Percentage.PercentagePoint, Accrual_Day_Count = deal.Accrual_Day_Count, Discounted = YesNo.No }; fCashflowList.Items.Add(cashflow); } } IRBaseDealSkin.ApplyRateSchedule(fCashflowList.Items, deal.Coupon_Rate_Schedule, Percentage.PercentagePoint, holidayCalendar, DateAdjustmentMethod.Modified_Following); // Calculate fixed interest cashflows. fCashflowList.CalculateInterest(baseDate); fFixedCashflowList = PrincipalCashflows(priceDate, issueDate, maturityDate, PrincipalExchange.Start_Maturity, notional, deal.Amortisation, 1.0); fSettlementAmount = 0.0; fAccrued = 0.0; bool payDatesRequired = requiredResults.CashRequired(); if (settlementDate >= baseDate) { double settlementPrincipal = CFFixedInterestListValuation.GetPrincipal(fCashflowList, settlementDate); fSettlementAmount = settlementPrincipal * deal.Price * Percentage.PercentagePoint; for (int i = 0; i < fCashflowList.Items.Count; ++i) { CFFixedInterest cashflow = fCashflowList[i]; if (cashflow.Accrual_Start_Date >= settlementDate) { break; } if (settlementDate < cashflow.Accrual_End_Date) { fAccrued += cashflow.Interest() * (settlementDate - cashflow.Accrual_Start_Date) / (cashflow.Accrual_End_Date - cashflow.Accrual_Start_Date); } } if (deal.Price_Is_Clean == YesNo.Yes) { fSettlementAmount += fAccrued; // add accrued interest } fT.AddPayDate(settlementDate, payDatesRequired); } // Add the floating and fixed cashflow dates to the time grid. fT.AddPayDates <CFFixedInterest>(fCashflowList, payDatesRequired); fT.AddPayDates <CFFixed>(fFixedCashflowList, payDatesRequired); // We only need an option pricer if callable on or after the settlement date. fSwaptionPricer = null; if (lastCallDate >= settlementDate) { // Snap call dates to grid of reset dates and // ensure that first call date is on or after settlement date int iLast = resetDates.IndexOfNextDate(lastCallDate); lastCallDate = resetDates[iLast]; int iFirst = resetDates.IndexOfNextDate(firstCallDate); while ((iFirst < resetDates.Count - 1) && (resetDates[iFirst] < settlementDate)) { // move first exercise date forward iFirst++; } firstCallDate = resetDates[iFirst]; int paySign = deal.Call_Put == OptionType.Put ? +1 : -1; RateList exerciseFees = new RateList(); foreach (Rate price in deal.Call_Prices) { Rate fee = new Rate(); fee.Value = paySign * (Percentage.OverPercentagePoint - price.Value); fee.Date = price.Date; exerciseFees.Add(fee); } var amortisation = AllocateAmortisationToPaymentDates <CFFixedInterest>(deal.Amortisation, fCashflowList.Items); fSwaptionPricer = new SwaptionPricer(issueDate, maturityDate, couponInterval, couponInterval, deal.Accrual_Day_Count, holidayCalendar, DayCount.ACT_365, holidayCalendar, firstCallDate, lastCallDate, baseDate, paySign, paySign, 0.0, null, notional, amortisation, deal.Coupon_Rate, null, deal.Coupon_Rate_Schedule, exerciseFees, null, OptionStyle2.Bermudan, Max_Nodes, Step_Size, fT, true, requiredResults.CashRequired()); } if (NeedSurvivalProb()) { fRecoveryList = new CFRecoveryList(); fRecoveryList.PopulateRecoveryCashflowList(baseDate, settlementDate, fCashflowList); } }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList Factors, BaseTimeGrid BaseTimes, RequiredResults ResultsRequired) { base.PreCloneInitialize(Factors, BaseTimes, ResultsRequired); DealCreditLinkedNoteBase deal = (DealCreditLinkedNoteBase)fDeal; DateGenerationRequest dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresResetDates = true, RequiresYearFractions = true, }; DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = deal.Effective_Date, MaturityDate = deal.Maturity_Date, CouponPeriod = deal.Coupon_Interval, AccrualCalendar = deal.GetHolidayCalendar(), AccrualDayCount = deal.Accrual_Day_Count, }; DateGenerationResults dateGenerationResults = CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams); PayDates = dateGenerationResults.PayDates; Accruals = dateGenerationResults.AccrualYearFractions; ResetDates = dateGenerationResults.ResetDates; // Add to valuation time grid bool cashRequired = ResultsRequired.CashRequired(); fT.AddPayDate(deal.Effective_Date, cashRequired); fT.AddPayDates(PayDates, cashRequired); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (CFEquityFloatingInterestListDeal)Deal; // Set up cashflow list fCharacteristics = deal.Cashflows.Analyze(factors.BaseDate); // Add to valuation time grid fT.AddPayDates(deal.Cashflows); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); IInflationCashflowListDeal deal = (IInflationCashflowListDeal)Deal; // Set up cashflow list IInflationRate inflationRate = deal.NeedInflationRate() ? factors.GetInterface <IInflationRate>(deal.Index) : null; deal.GetCashflows().PreCloneInitialize(factors.BaseDate, inflationRate, deal.GetHolidayCalendar()); // Add to valuation time grid deal.AddPayDates(fT); if (deal.Investment_Horizon > 0.0) { fT.AddPayDate(deal.Investment_Horizon, requiredResults.CashRequired()); } if (deal.Settlement_Date > 0.0) { fT.AddPayDate(deal.Settlement_Date, requiredResults.CashRequired()); } // Recovery cashflows are created on the fly to respect customized cashflows if (NeedRecoveryCashflows()) { fRecoveryCashflowList = new CFRecoveryInflationList(); fRecoveryCashflowList.PopulateRecoveryCashflowList(factors.BaseDate, deal.Settlement_Date, deal.GetCashflows()); } }