Example #1
0
        public static object CreateCDS(
            [ExcelArgument(Description = "Object name")] string ObjectName,
            [ExcelArgument(Description = "Tenor rate")] string Tenor,
            [ExcelArgument(Description = "Spread")] double Spread,
            [ExcelArgument(Description = "Origin date")] DateTime OriginDate,
            [ExcelArgument(Description = "Currency")] string Currency,
            [ExcelArgument(Description = "Notional, default 1,000,000")] object Notional,
            [ExcelArgument(Description = "Schedule type, default Basic")] object ScheduleType,
            [ExcelArgument(Description = "Basis, default Act365F")] object Basis)
        {
            return(ExcelHelper.Execute(_logger, () =>
            {
                var basis = Basis.OptionalExcel("Act365F");
                var scheduleType = ScheduleType.OptionalExcel("Basic");
                var notional = Notional.OptionalExcel(1.0e6);
                if (!Enum.TryParse(basis, out DayCountBasis dayCountBasis))
                {
                    throw new Exception($"Could not parse basis type - {basis}");
                }
                if (!Enum.TryParse(scheduleType, out CdsScheduleType shed))
                {
                    throw new Exception($"Could not parse cds schedule type - {scheduleType}");
                }
                var ccy = ContainerStores.CurrencyProvider.GetCurrency(Currency);

                var cdsObj = new CDS()
                {
                    Basis = dayCountBasis,
                    Currency = ccy,
                    Notional = notional,
                    Tenor = new Frequency(Tenor),
                    OriginDate = OriginDate,
                    Spread = Spread,
                    ScheduleType = shed
                };

                cdsObj.Init();

                return ExcelHelper.PushToCache(cdsObj, ObjectName);
            }));
        }
Example #2
0
        public void CDSBasicFacts_LinearApprox()
        {
            var origin = new DateTime(2020, 06, 15);
            var hzi    = new ConstantHazzardInterpolator(0.0);
            var hz     = new HazzardCurve(origin, DayCountBasis.ACT365F, hzi);
            var usd    = TestProviderHelper.CurrencyProvider.GetCurrency("USD");
            var df     = new ConstantRateIrCurve(0.00, origin, "LIBOR", usd);

            var sut = new CDS()
            {
                Basis      = DayCountBasis.ACT365F,
                Currency   = usd,
                OriginDate = origin,
                Tenor      = new Frequency("1y"),
                Spread     = 0.01,
                Notional   = 1e6
            };

            sut.Init();

            var pv = sut.PV_LinearApprox(hz, df, 0.4, false);

            Assert.Equal(-sut.Notional * sut.Spread, pv);
        }