public static List <string> GetMarketData(string mainMarket, Dictionary <string, MarketInfo> marketInfos, PTMagicConfiguration systemConfiguration, LogHelper log) { List <string> result = new List <string>(); string lastMarket = ""; KeyValuePair <string, dynamic> lastTicker = new KeyValuePair <string, dynamic>(); try { string baseUrl = "https://poloniex.com/public?command=returnTicker"; log.DoLogInfo("Poloniex - Getting market data..."); Dictionary <string, dynamic> jsonObject = GetJsonFromURL(baseUrl, log, null); if (jsonObject.Count > 0) { log.DoLogInfo("Poloniex - Market data received for " + jsonObject.Count.ToString() + " currencies"); double mainCurrencyPrice = 1; if (!mainMarket.Equals("USDT", StringComparison.InvariantCultureIgnoreCase)) { mainCurrencyPrice = Poloniex.GetMainCurrencyPrice(mainMarket, systemConfiguration, log); } if (mainCurrencyPrice > 0) { Dictionary <string, Market> markets = new Dictionary <string, Market>(); foreach (KeyValuePair <string, dynamic> currencyTicker in jsonObject) { string marketName = currencyTicker.Key.ToString(); if (marketName.StartsWith(mainMarket, StringComparison.InvariantCultureIgnoreCase)) { // Set last values in case any error occurs lastMarket = marketName; lastTicker = currencyTicker; Market market = new Market(); market.Position = markets.Count + 1; market.Name = marketName; market.Symbol = currencyTicker.Key.ToString(); market.Price = SystemHelper.TextToDouble(currencyTicker.Value["last"].ToString(), 0.0, "en-US"); market.Volume24h = SystemHelper.TextToDouble(currencyTicker.Value["baseVolume"].ToString(), 0.0, "en-US"); market.MainCurrencyPriceUSD = mainCurrencyPrice; markets.Add(market.Name, market); result.Add(market.Name); } } Poloniex.CheckFirstSeenDates(markets, ref marketInfos, systemConfiguration, log); BaseAnalyzer.SaveMarketInfosToFile(marketInfos, systemConfiguration, log); Poloniex.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log); DateTime fileDateTime = DateTime.UtcNow; FileHelper.WriteTextToFile(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, "MarketData_" + fileDateTime.ToString("yyyy-MM-dd_HH.mm") + ".json", JsonConvert.SerializeObject(markets), fileDateTime, fileDateTime); log.DoLogInfo("Poloniex - Market data saved for " + markets.Count.ToString() + " markets with " + mainMarket + "."); FileHelper.CleanupFiles(Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Constants.PTMagicPathData + Path.DirectorySeparatorChar + Constants.PTMagicPathExchange + Path.DirectorySeparatorChar, systemConfiguration.AnalyzerSettings.MarketAnalyzer.StoreDataMaxHours); log.DoLogInfo("Poloniex - Market data cleaned."); } else { log.DoLogError("Poloniex - Failed to get main market price for " + mainMarket + "."); result = null; } } } catch (Exception ex) { log.DoLogCritical("Exception while getting data for '" + lastMarket + "': " + ex.Message, ex); result = null; } return(result); }