Example #1
0
        public static async Task <object> GetOrCreateAnalyticWithTickProviderAsync(this Equity equity, Type analyticType, ITickProvider provider, params object[] parameters)
        {
            if (!typeof(IAnalyzable).IsAssignableFrom(analyticType))
            {
                throw new ArgumentException($"{analyticType.Name} is not a valid object to create");
            }

            string key = $"{equity.GetHashCode()}#{analyticType.Name}#{string.Join("|", parameters)}#{provider.GetHashCode()}";

            if (!_cache.TryGetValue(key, out object output))
            {
                var paramsList = new List <object>();
                paramsList.Add(equity);
                paramsList.AddRange(parameters);
                var instance = (IAnalyzable)Activator.CreateInstance(analyticType, paramsList.ToArray());
                await instance.InitWithTickProviderAsync(provider);

                output = _cache.Set(key, instance, _policy);
            }
            return(output);
        }