public void SparsePriceCurveFact() { var origin = new DateTime(2019, 05, 28); var pillars = new[] { new DateTime(2019, 12, 31), new DateTime(2020, 12, 31), new DateTime(2021, 12, 31) }; var prices = new[] { 100.0, 90.0, 85.0 }; var z = new SparsePriceCurve(origin, pillars, prices, SparsePriceCurveType.Coal, TestProviderHelper.CurrencyProvider, new[] { "A", "B", "C" }); Assert.Throws <NotImplementedException>(() => z.CurveType); Assert.Same(pillars, z.PillarDates); Assert.Equal(pillars.Length, z.NumberOfPillars); Assert.True(z.UnderlyingsAreForwards); Assert.Equal(100, z.GetPriceForDate(pillars[0].AddDays(-10))); Assert.Equal(100, z.GetPriceForFixingDate(pillars[0].AddDays(-10))); var ds = z.GetDeltaScenarios(0.1, null); Assert.True(ds.ContainsKey("A")); Assert.True(ds.ContainsKey("B")); Assert.True(ds.ContainsKey("C")); Assert.Equal(pillars[1], z.PillarDatesForLabel("B")); var zr = z.RebaseDate(origin.AddDays(1)); Assert.Equal(100, zr.GetPriceForDate(pillars[0].AddDays(-10))); zr = z.RebaseDate(pillars[0].AddDays(1)); Assert.Equal(90, zr.GetPriceForDate(pillars[0].AddDays(-10))); }
public static object CreateSparsePriceCurve( [ExcelArgument(Description = "Object name")] string ObjectName, [ExcelArgument(Description = "Asset Id")] string AssetId, [ExcelArgument(Description = "Build date")] DateTime BuildDate, [ExcelArgument(Description = "Array of pillar dates")] double[] Pillars, [ExcelArgument(Description = "Array of prices values")] double[] Prices, [ExcelArgument(Description = "Type of curve, e.g. Coal etc")] object CurveType) { return(ExcelHelper.Execute(_logger, () => { var curveTypeStr = CurveType.OptionalExcel <string>("Coal"); if (!Enum.TryParse(curveTypeStr, out SparsePriceCurveType cType)) { return $"Could not parse price curve type - {curveTypeStr}"; } var pDates = Pillars.ToDateTimeArray(); var cObj = new SparsePriceCurve(BuildDate, pDates, Prices, cType, ContainerStores.GlobalContainer.GetRequiredService <ICurrencyProvider>()) { Name = AssetId ?? ObjectName, AssetId = AssetId ?? ObjectName }; return ExcelHelper.PushToCache <IPriceCurve>(cObj, ObjectName); })); }