Esempio n. 1
0
        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)));
        }
Esempio n. 2
0
        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);
            }));
        }