public static void SetNotionalAmount(PaymentCalculationPeriod paymentCalculationPeriod, decimal notionalAmount)
 {
     foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
     {
         XsdClassesFieldResolver.CalculationPeriodSetNotionalAmount(calculationPeriod, notionalAmount);
     }
 }
        public static int GetNumberOfDays(PaymentCalculationPeriod paymentCalculationPeriod)
        {
            int result = 0;

            foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
            {
                result += int.Parse(calculationPeriod.calculationPeriodNumberOfDays);
            }
            return(result);
        }
        public List <String> GetRequiredCurrencies()
        {
            var result = new List <string>();
            var item   = XsdClassesFieldResolver.CalculationGetNotionalSchedule((Calculation)calculationPeriodAmount.Item);

            if (item != null && item.notionalStepSchedule != null && item.notionalStepSchedule.currency != null)
            {
                result.Add(item.notionalStepSchedule.currency.Value);
            }
            return(result);
        }
Example #4
0
        ///<summary>
        /// Gets all the Forecast curve name.
        ///</summary>
        ///<returns></returns>
        public static string GetRateVolatilityMatrixName(Swap swap)
        {
            AdjustableDate adjustableEffectiveDate   = XsdClassesFieldResolver.CalculationPeriodDatesGetEffectiveDate(swap.swapStream[0].calculationPeriodDates);
            AdjustableDate adjustableTerminationDate = XsdClassesFieldResolver.CalculationPeriodDatesGetTerminationDate(swap.swapStream[0].calculationPeriodDates);
            var            years       = adjustableTerminationDate.unadjustedDate.Value.Year - adjustableEffectiveDate.unadjustedDate.Value.Year;
            var            calculation = (Calculation)swap.swapStream[0].calculationPeriodAmount.Item;
            var            notional    = XsdClassesFieldResolver.CalculationGetNotionalSchedule(calculation);
            var            currency    = notional.notionalStepSchedule.currency.Value;

            return("RateVolatilityMatrix." + currency + "-IRSwap-" + years + "Y");
        }
        public static TermPoint Create(decimal mid, DateTime term)
        {
            var termPoint = new TermPoint();

            termPoint.mid          = mid;
            termPoint.midSpecified = true;
            var timeDimension = new TimeDimension();

            XsdClassesFieldResolver.TimeDimensionSetDate(timeDimension, term);
            termPoint.term = timeDimension;

            return(termPoint);
        }
        /// <summary>
        /// Gets and sets the required pricing structures to value this leg.
        /// </summary>
        public List <String> GetRequiredPricingStructures()
        {
            var result = new List <String>();
            var amount = calculationPeriodAmount.Item as Calculation;

            if (amount != null)
            {
                var currency = XsdClassesFieldResolver.CalculationGetNotionalSchedule(amount);
                if (currency != null && currency.notionalStepSchedule != null)
                {
                    var discountCurve = Helpers.GetDiscountCurveName(currency.notionalStepSchedule.currency);
                    result.Add(discountCurve);
                }
                var floatingRateCalculation = amount.Items[0] as FloatingRateCalculation;
                if (floatingRateCalculation != null)
                {
                    result.Add(Helpers.GetForecastCurveName(floatingRateCalculation.floatingRateIndex, floatingRateCalculation.indexTenor));
                }
            }
            //TODO
            if (stubCalculationPeriodAmount != null)
            {
                if (stubCalculationPeriodAmount.Items != null)
                {
                    foreach (var item in stubCalculationPeriodAmount.Items)
                    {
                        if (item.Items != null)
                        {
                            result.AddRange(from value in item.Items
                                            where value as Money != null
                                            select Helpers.GetDiscountCurveName(((Money)value).currency));
                        }
                    }
                }
                //if (stubCalculationPeriodAmount != null)
                //{
                //    if (stubCalculationPeriodAmount.initialStub != null && stubCalculationPeriodAmount.initialStub.Items != null)
                //    {
                //        result.AddRange(from value in stubCalculationPeriodAmount.initialStub.Items
                //                            where value as Money != null
                //                            select Helpers.GetDiscountCurveName(((Money)value).currency));
                //    }
                //    if (stubCalculationPeriodAmount.finalStub != null && stubCalculationPeriodAmount.finalStub.Items != null)
                //    {
                //        result.AddRange(from value in stubCalculationPeriodAmount.finalStub.Items
                //                            where value as Money != null
                //                            select Helpers.GetDiscountCurveName(((Money)value).currency));
                //    }
            }
            return(result);
        }
        public static decimal GetNotionalAmount(PaymentCalculationPeriod paymentCalculationPeriod)
        {
            decimal result = 0.0m;

            decimal numberOfPeriods = 0.0m;

            foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
            {
                result          += XsdClassesFieldResolver.CalculationPeriodGetNotionalAmount(calculationPeriod);
                numberOfPeriods += 1;
            }

            return(result / numberOfPeriods);
        }
 public static void SetSpread(PaymentCalculationPeriod paymentCalculationPeriod, decimal value)
 {
     foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
     {
         if (XsdClassesFieldResolver.CalculationPeriodHasFloatingRateDefinition(calculationPeriod))
         {
             FloatingRateDefinition floatingRateDefinition = XsdClassesFieldResolver.CalculationPeriodGetFloatingRateDefinition(calculationPeriod);
             floatingRateDefinition.spread          = value;
             floatingRateDefinition.spreadSpecified = true;
         }
         else
         {
             throw new NotImplementedException("PaymentCalculationPeriodHelper.SetSpread cannot be called on a fixed rate cashflow.");
         }
     }
 }
Example #9
0
        public static Swaption Create(Swap swap, Payment[] premium, EuropeanExercise exercise, bool automaticExercise)
        {
            var swaption = new Swaption {
                swap = swap, premium = premium
            };
            var europeanExercise = exercise;

            swaption.exerciseProcedure = new ExerciseProcedure();
            if (automaticExercise)
            {
                XsdClassesFieldResolver.ExerciseProcedureSetAutomaticExercise(swaption.exerciseProcedure, new AutomaticExercise());
            }
            else//manual exercise
            {
                XsdClassesFieldResolver.ExerciseProcedureSetManualExercise(swaption.exerciseProcedure, new ManualExercise());
            }
            XsdClassesFieldResolver.SwaptionSetEuropeanExercise(swaption, europeanExercise);
            return(swaption);
        }
 public static void SetRate(PaymentCalculationPeriod paymentCalculationPeriod, decimal rate)
 {
     foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
     {
         if (XsdClassesFieldResolver.CalculationPeriodHasFixedRate(calculationPeriod))
         {
             XsdClassesFieldResolver.SetCalculationPeriodFixedRate(calculationPeriod, rate);
         }
         else if (XsdClassesFieldResolver.CalculationPeriodHasFloatingRateDefinition(calculationPeriod))
         {
             throw new NotImplementedException("Cannot modify floating rate, PaymentCalculationPeriodHelper.SetRate");
             //XsdClassesFieldResolver.CalculationPeriod_GetFloatingRateDefinition(calculationPeriod).calculatedRate;
         }
         else
         {
             throw new NotImplementedException("PaymentCalculationPeriodHelper.SetRate");
         }
     }
 }
        public static decimal GetSpread(PaymentCalculationPeriod paymentCalculationPeriod)
        {
            decimal result          = 0.0m;
            decimal numberOfPeriods = 0.0m;

            foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
            {
                if (XsdClassesFieldResolver.CalculationPeriodHasFloatingRateDefinition(calculationPeriod))
                {
                    FloatingRateDefinition floatingRateDefinition = XsdClassesFieldResolver.CalculationPeriodGetFloatingRateDefinition(calculationPeriod);
                    result += floatingRateDefinition.spread;
                }
                else
                {
                    throw new NotImplementedException("PaymentCalculationPeriodHelper.GetSpread cannot be called on fixed rate cashflow.");
                }
                numberOfPeriods += 1;
            }
            return(result / numberOfPeriods);
        }
 public static void ReplaceFloatingRateWithFixedRate(PaymentCalculationPeriod paymentCalculationPeriod, decimal fixedRate)
 {
     foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
     {
         if (XsdClassesFieldResolver.CalculationPeriodHasFixedRate(calculationPeriod))
         {
             throw new System.Exception("calculation period already uses a fixed rate.");
         }
         if (XsdClassesFieldResolver.CalculationPeriodHasFloatingRateDefinition(calculationPeriod))
         {
             // Replace FloatingRateDefinition with decimal (fixed rate)
             //
             XsdClassesFieldResolver.SetCalculationPeriodFixedRate(calculationPeriod, fixedRate);
         }
         else
         {
             throw new NotSupportedException("PaymentCalculationPeriodHelper.ReplaceFloatingRateWithFixedRate");
         }
     }
 }
Example #13
0
        public static Swaption Create(Swap swap, decimal premiumAmount, DateTime expirationDate)
        {
            var swaption = new Swaption {
                swap = swap, premium = new[] { new Payment() }
            };

            swaption.premium[0].paymentAmount = MoneyHelper.GetNonNegativeAmount(premiumAmount);
            var europeanExercise = new EuropeanExercise
            {
                expirationDate = new AdjustableOrRelativeDate()
            };
            var adjustableDate = new AdjustableDate
            {
                unadjustedDate = new IdentifiedDate
                {
                    Value = expirationDate
                }
            };

            europeanExercise.expirationDate.Item = adjustableDate;
            XsdClassesFieldResolver.SwaptionSetEuropeanExercise(swaption, europeanExercise);
            return(swaption);
        }
        public static decimal GetRate(PaymentCalculationPeriod paymentCalculationPeriod)
        {
            decimal result          = 0.0m;
            decimal numberOfPeriods = 0.0m;

            foreach (CalculationPeriod calculationPeriod in XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod))
            {
                if (XsdClassesFieldResolver.CalculationPeriodHasFixedRate(calculationPeriod))
                {
                    result += XsdClassesFieldResolver.CalculationPeriodGetFixedRate(calculationPeriod);
                }
                else if (XsdClassesFieldResolver.CalculationPeriodHasFloatingRateDefinition(calculationPeriod))
                {
                    result += XsdClassesFieldResolver.CalculationPeriodGetFloatingRateDefinition(calculationPeriod).calculatedRate;
                }
                else
                {
                    throw new NotImplementedException("PaymentCalculationPeriodHelper.GetRate");
                }
                numberOfPeriods += 1;
            }
            return(result / numberOfPeriods);
        }
Example #15
0
        public static Swaption Create(Swap swap, NonNegativeMoney premium, string premiumPayer, string premiumReceiver,
                                      AdjustableOrAdjustedDate paymentDate,
                                      AdjustableDate expirationDate,
                                      DateTime earliestExerciseTime, DateTime expirationTime, bool automaticExercise)
        {
            var swaption = new Swaption
            {
                swap                 = swap,
                premium              = new[] { new Payment() },
                buyerPartyReference  = PartyReferenceHelper.Parse(premiumPayer),
                sellerPartyReference = PartyReferenceHelper.Parse(premiumReceiver)
            };

            swaption.premium[0].paymentAmount          = premium;
            swaption.premium[0].paymentDate            = paymentDate;
            swaption.premium[0].payerPartyReference    = PartyReferenceHelper.Parse(premiumPayer);
            swaption.premium[0].receiverPartyReference = PartyReferenceHelper.Parse(premiumReceiver);
            var europeanExercise = new EuropeanExercise
            {
                expirationDate       = new AdjustableOrRelativeDate(),
                earliestExerciseTime = BusinessCenterTimeHelper.Create(earliestExerciseTime),
                expirationTime       = BusinessCenterTimeHelper.Create(expirationTime)
            };

            europeanExercise.expirationDate.Item = expirationDate;
            swaption.exerciseProcedure           = new ExerciseProcedure();
            if (automaticExercise)
            {
                XsdClassesFieldResolver.ExerciseProcedureSetAutomaticExercise(swaption.exerciseProcedure, new AutomaticExercise());
            }
            else//manual exercise
            {
                XsdClassesFieldResolver.ExerciseProcedureSetManualExercise(swaption.exerciseProcedure, new ManualExercise());
            }
            XsdClassesFieldResolver.SwaptionSetEuropeanExercise(swaption, europeanExercise);
            return(swaption);
        }
Example #16
0
 public List <DateTime> GetListTermDates()
 {
     return(point.Select(eachPoint => XsdClassesFieldResolver.TimeDimensionGetDate(eachPoint.term)).ToList());
 }
Example #17
0
        public static DateTime GetDate(TermPoint termPoint)
        {
            DateTime date = XsdClassesFieldResolver.TimeDimensionGetDate(termPoint.term);

            return(date);
        }
 public static void SetCalculationPeriodEndDate(PaymentCalculationPeriod paymentCalculationPeriod, DateTime endDate)
 {
     CalculationPeriod[] calculationPeriodArray = XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod);
     calculationPeriodArray[calculationPeriodArray.Length - 1].adjustedEndDate          = endDate;
     calculationPeriodArray[calculationPeriodArray.Length - 1].adjustedEndDateSpecified = true;
 }
 public static DateTime GetCalculationPeriodEndDate(PaymentCalculationPeriod paymentCalculationPeriod)
 {
     CalculationPeriod[] calculationPeriodArray = XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod);
     return(calculationPeriodArray[calculationPeriodArray.Length - 1].adjustedEndDate);
 }
 public static void SetCalculationPeriodStartDate(PaymentCalculationPeriod paymentCalculationPeriod, DateTime startDate)
 {
     CalculationPeriod[] calculationPeriodArray = XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod);
     calculationPeriodArray[0].adjustedStartDate          = startDate;
     calculationPeriodArray[0].adjustedStartDateSpecified = true;
 }
 public static DateTime GetCalculationPeriodStartDate(PaymentCalculationPeriod paymentCalculationPeriod)
 {
     CalculationPeriod[] calculationPeriodArray = XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod);
     return(calculationPeriodArray[0].adjustedStartDate);
 }
 public static CalculationPeriod GetFirstCalculationPeriod(PaymentCalculationPeriod paymentCalculationPeriod)
 {
     return(XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod)[0]);
 }
 public static CalculationPeriod[] GetCalculationPeriods(PaymentCalculationPeriod paymentCalculationPeriod)
 {
     return(XsdClassesFieldResolver.GetPaymentCalculationPeriodCalculationPeriodArray(paymentCalculationPeriod));
 }