예제 #1
0
        public static object CreateFixingDictionary(
            [ExcelArgument(Description = "Object name")] string ObjectName,
            [ExcelArgument(Description = "Asset Id")] string AssetId,
            [ExcelArgument(Description = "Fixings array, 1st column dates / 2nd column fixings")] object[,] Fixings,
            [ExcelArgument(Description = "Type, Asset or FX - default Asset")] object FixingType,
            [ExcelArgument(Description = "Fx pair (optional)")] string FxPair)
        {
            return(ExcelHelper.Execute(_logger, () =>
            {
                var fixTypeStr = FixingType.OptionalExcel("Asset");
                if (!Enum.TryParse <FixingDictionaryType>(fixTypeStr, out var fixType))
                {
                    throw new Exception($"Unknown fixing dictionary type {fixTypeStr}");
                }
                var dict = new FixingDictionary
                {
                    Name = AssetId,
                    AssetId = AssetId,
                    FixingDictionaryType = fixType,
                    FxPair = FxPair
                };

                var dictData = Fixings.RangeToDictionary <DateTime, double>();
                foreach (var kv in dictData)
                {
                    dict.Add(kv.Key, kv.Value);
                }

                return ExcelHelper.PushToCache <IFixingDictionary>(dict, ObjectName);
            }));
        }
예제 #2
0
        public static object CreateFixingDictionaryForRollingFuture(
            [ExcelArgument(Description = "Object name")] string ObjectName,
            [ExcelArgument(Description = "Asset Id")] string AssetId,
            [ExcelArgument(Description = "Futures code, e.g. QS or CO")] string FuturesCode,
            [ExcelArgument(Description = "1st month fixings array, 1st column dates / 2nd column fixings")] object[,] Fixings1m,
            [ExcelArgument(Description = "2nd month fixings array, 1st column dates / 2nd column fixings")] object[,] Fixings2m)
        {
            return(ExcelHelper.Execute(_logger, () =>
            {
                var dict = new FixingDictionary
                {
                    Name = AssetId,
                    AssetId = AssetId,
                    FixingDictionaryType = FixingDictionaryType.Asset
                };
                var futuresProvider = ContainerStores.SessionContainer.GetRequiredService <IFutureSettingsProvider>();
                var dictData1m = Fixings1m.RangeToDictionary <DateTime, double>();
                var dictData2m = Fixings2m.RangeToDictionary <DateTime, double>();
                var fc = new FutureCode(FuturesCode, futuresProvider);
                fc.YearBeforeWhich2DigitDatesAreUsed = DateTime.Today.Year - 2;

                foreach (var kv in dictData1m)
                {
                    var currentFM = fc.GetFrontMonth(kv.Key, true);
                    var cfm = new FutureCode(currentFM, DateTime.Today.Year - 2, futuresProvider);
                    if (kv.Key <= cfm.GetRollDate())
                    {
                        dict.Add(kv.Key, kv.Value);
                    }
                    else
                    {
                        dict.Add(kv.Key, dictData2m[kv.Key]);
                    }
                }
                return ExcelHelper.PushToCache <IFixingDictionary>(dict, ObjectName);
            }));
        }
예제 #3
0
        public static object CreateFixingDictionaryFromVectors(
            [ExcelArgument(Description = "Object name")] string ObjectName,
            [ExcelArgument(Description = "Asset Id")] string AssetId,
            [ExcelArgument(Description = "Fixings dates")] double[] FixingDates,
            [ExcelArgument(Description = "Fixings dates")] double[] Fixings,
            [ExcelArgument(Description = "Type, Asset or FX - default Asset")] object FixingType,
            [ExcelArgument(Description = "Fx pair (optional)")] string FxPair)
        {
            return(ExcelHelper.Execute(_logger, () =>
            {
                if (FixingDates.Length != Fixings.Length)
                {
                    throw new Exception("Fixings and FixingDates must be of same length");
                }

                var fixTypeStr = FixingType.OptionalExcel("Asset");
                if (!Enum.TryParse <FixingDictionaryType>(fixTypeStr, out var fixType))
                {
                    throw new Exception($"Unknown fixing dictionary type {fixTypeStr}");
                }

                var dict = new FixingDictionary
                {
                    Name = AssetId,
                    AssetId = AssetId,
                    FixingDictionaryType = fixType,
                    FxPair = FxPair
                };
                for (var i = 0; i < FixingDates.Length; i++)
                {
                    if (FixingDates[i] != 0)
                    {
                        dict.Add(DateTime.FromOADate(FixingDates[i]), Fixings[i]);
                    }
                }

                return ExcelHelper.PushToCache <IFixingDictionary>(dict, ObjectName);
            }));
        }