public StockIndicator ParseIndicator(JObject jObject)
        {
            var properties = jObject.Children().Select(ch => (JProperty)ch).ToArray();

            var metadataJson  = properties.FirstOrDefault(p => p.Name == TechnicalMetaDataJsonTokens.MetaDataHeader);
            var indicatorJson = properties.FirstOrDefault(p => p.Name.Contains(IndicatorJsonToken.IndicatorHeader));

            if (metadataJson == null || indicatorJson == null)
            {
                throw new StocksParsingException("Unable to parse technical indicators json");
            }

            var result = new StockIndicator();

            EnrichWithMetadata(metadataJson, result);
            result.DataPoints = GetTechnicalIndicatorDataPoints(indicatorJson);

            #region old code
            ////input.Substring(input.IndexOf('.') + 1);
            //var substring = jObject.Substring(jObject.IndexOf(@"""Technical") + 1);
            ////"Technical Analysis: SMA\":
            //substring = substring.Remove(0, 26);
            //substring = substring.Remove(substring.Length - 2);
            //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(substring);
            //var stockInd = obj as Indicators.IndicatorPoint;
            //return stockInd;
            #endregion

            return(result);
        }
        private void EnrichWithMetadata([NotNull] JProperty metadataJson, [NotNull] StockIndicator indicator)
        {
            var metadatas = metadataJson.Children().Single();

            foreach (var metadataItem in metadatas)
            {
                var metadataProperty  = (JProperty)metadataItem;
                var metadataItemName  = metadataProperty.Name;
                var metadataItemValue = metadataProperty.Value.ToString();

                if (metadataItemName.Contains(TechnicalMetaDataJsonTokens.SymbolToken))
                {
                    indicator.MetaData.Symbol = metadataItemValue;
                }
                else if (metadataItemName.Contains(TechnicalMetaDataJsonTokens.IndicatorToken))
                {
                    indicator.MetaData.Indicator = metadataItemValue;
                }
                else if (metadataItemName.Contains(TechnicalMetaDataJsonTokens.RefreshTimeToken))
                {
                    indicator.MetaData.LastRefreshed = DateTime.Parse(metadataItemValue);
                }
                else if (metadataItemName.Contains(TechnicalMetaDataJsonTokens.IntervalToken))
                {
                    indicator.MetaData.Interval = metadataItemValue;
                }
                else if (metadataItemName.Contains(TechnicalMetaDataJsonTokens.PeriodToken))
                {
                    indicator.MetaData.TimePeriod = metadataItemValue;
                }
                else if (metadataItemName.Contains(TechnicalMetaDataJsonTokens.SeriesToken))
                {
                    indicator.MetaData.SeriesType = metadataItemValue;
                }
                else if (metadataItemName.Contains(TechnicalMetaDataJsonTokens.TimeZoneToken))
                {
                    indicator.MetaData.TimeZone = metadataItemValue;
                }
            }
        }