Пример #1
0
        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);
        }