Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
            }
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        /// <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());
            }
        }
Exemplo n.º 6
0
        /// <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);
            }
        }
Exemplo n.º 7
0
        /// <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;
        }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 10
0
        /// <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;
            }
        }
Exemplo n.º 11
0
        /// <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);
            }
        }
Exemplo n.º 13
0
        /// <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());
        }
Exemplo n.º 14
0
 /// <inheritdoc />
 public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired)
 {
     base.HeadNodeInitialize(factors, baseTimes, resultsRequired);
     fItems.HeadNodeInitialize(factors, baseTimes, resultsRequired);
 }
Exemplo n.º 15
0
        /// <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);
        }
Exemplo n.º 16
0
        /// <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);
        }
Exemplo n.º 17
0
        /// <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);
        }
Exemplo n.º 18
0
        /// <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;
        }
Exemplo n.º 19
0
        /// <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);
        }
Exemplo n.º 20
0
        /// <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);
        }
Exemplo n.º 21
0
        /// <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());
        }
Exemplo n.º 22
0
        /// <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);
            }
        }
Exemplo n.º 23
0
        /// <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);
            }
        }
Exemplo n.º 24
0
        /// <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());
        }
Exemplo n.º 25
0
        /// <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);
        }
Exemplo n.º 27
0
        /// <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);
            }
        }
Exemplo n.º 28
0
        /// <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);
        }
Exemplo n.º 29
0
        /// <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());
            }
        }