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); })); }
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); }