public static List <string> GetMarketData(string mainMarket, Dictionary <string, MarketInfo> marketInfos, PTMagicConfiguration systemConfiguration, LogHelper log) { List <string> result = new List <string>(); string lastMarket = ""; Newtonsoft.Json.Linq.JObject lastTicker = null; try { string baseUrl = "https://api.binance.us/api/v1/ticker/24hr"; log.DoLogInfo("BinanceUS - Getting market data..."); Newtonsoft.Json.Linq.JArray jsonArray = GetSimpleJsonArrayFromURL(baseUrl, log); if (jsonArray.Count > 0) { double mainCurrencyPrice = 1; if (!mainMarket.Equals("USDT", StringComparison.InvariantCultureIgnoreCase) && !mainMarket.Equals("USD", StringComparison.InvariantCultureIgnoreCase)) { mainCurrencyPrice = BinanceUS.GetMainCurrencyPrice(mainMarket, systemConfiguration, log); } log.DoLogInfo("BinanceUS - Market data received for " + jsonArray.Count.ToString() + " currencies"); if (mainCurrencyPrice > 0) { Dictionary <string, Market> markets = new Dictionary <string, Market>(); foreach (Newtonsoft.Json.Linq.JObject currencyTicker in jsonArray) { string marketName = currencyTicker["symbol"].ToString(); //New variables for filtering out bad markets float marketLastPrice = currencyTicker["lastPrice"].ToObject <float>(); float marketVolume = currencyTicker["volume"].ToObject <float>(); if (marketName.EndsWith(mainMarket, StringComparison.InvariantCultureIgnoreCase)) { if (marketLastPrice > 0 && marketVolume > 0) { // 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["symbol"].ToString(); market.Price = SystemHelper.TextToDouble(currencyTicker["lastPrice"].ToString(), 0, "en-US"); market.Volume24h = SystemHelper.TextToDouble(currencyTicker["quoteVolume"].ToString(), 0, "en-US"); market.MainCurrencyPriceUSD = mainCurrencyPrice; markets.Add(market.Name, market); result.Add(market.Name); } else { //Let the user know that the problem market was ignored. log.DoLogInfo("BinanceUS - Ignoring bad market data for " + marketName); } } } BinanceUS.CheckFirstSeenDates(markets, ref marketInfos, systemConfiguration, log); BaseAnalyzer.SaveMarketInfosToFile(marketInfos, systemConfiguration, log); BinanceUS.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("BinanceUS - 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("BinanceUS - Market data cleaned."); } else { log.DoLogError("BinanceUS - Failed to get main market price for " + mainMarket + "."); result = null; } } } catch (WebException ex) { if (ex.Response != null) { using (HttpWebResponse errorResponse = (HttpWebResponse)ex.Response) { using (StreamReader reader = new StreamReader(errorResponse.GetResponseStream())) { Dictionary <string, string> errorData = JsonConvert.DeserializeObject <Dictionary <string, string> >(reader.ReadToEnd()); if (errorData != null) { string errorMessage = "Unable to get data from BinanceUS with URL '" + errorResponse.ResponseUri + "'!"; if (errorData.ContainsKey("code")) { errorMessage += " - Code: " + errorData["code"]; } if (errorData.ContainsKey("msg")) { errorMessage += " - Message: " + errorData["msg"]; } log.DoLogError(errorMessage); } } } } result = null; } catch (Exception ex) { log.DoLogCritical("Exception while getting data for '" + lastMarket + "': " + ex.Message, ex); result = null; } return(result); }
public static List <string> GetMarketData(string mainMarket, Dictionary <string, MarketInfo> marketInfos, PTMagicConfiguration systemConfiguration, LogHelper log) { List <string> result = new List <string>(); string lastMarket = ""; Newtonsoft.Json.Linq.JObject lastTicker = null; try { string baseUrl = "https://bittrex.com/api/v2.0/pub/markets/GetMarketSummaries"; log.DoLogInfo("Bittrex - Getting market data..."); Dictionary <string, dynamic> jsonObject = GetJsonFromURL(baseUrl, log); if (jsonObject.Count > 0) { if (jsonObject["success"]) { log.DoLogInfo("Bittrex - Market data received for " + jsonObject["result"].Count.ToString() + " currencies"); double mainCurrencyPrice = 1; if (!mainMarket.Equals("USDT", StringComparison.InvariantCultureIgnoreCase)) { mainCurrencyPrice = Bittrex.GetMainCurrencyPrice(mainMarket, systemConfiguration, log); } if (mainCurrencyPrice > 0) { Dictionary <string, Market> markets = new Dictionary <string, Market>(); foreach (Newtonsoft.Json.Linq.JObject currencyTicker in jsonObject["result"]) { string marketName = currencyTicker["Summary"]["MarketName"].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["Summary"]["MarketName"].ToString(); if (currencyTicker["Summary"]["Last"].Type == Newtonsoft.Json.Linq.JTokenType.Float) { market.Price = (double)currencyTicker["Summary"]["Last"]; } if (currencyTicker["Summary"]["BaseVolume"].Type == Newtonsoft.Json.Linq.JTokenType.Float) { market.Volume24h = (double)currencyTicker["Summary"]["BaseVolume"]; } market.MainCurrencyPriceUSD = mainCurrencyPrice; markets.Add(market.Name, market); result.Add(market.Name); // Save market info MarketInfo marketInfo = null; if (marketInfos.ContainsKey(marketName)) { marketInfo = marketInfos[marketName]; } if (marketInfo == null) { marketInfo = new MarketInfo(); marketInfo.Name = marketName; marketInfos.Add(marketName, marketInfo); } if (currencyTicker["Summary"]["Created"].Type == Newtonsoft.Json.Linq.JTokenType.Date) { marketInfo.FirstSeen = (DateTime)currencyTicker["Summary"]["Created"]; } marketInfo.LastSeen = DateTime.Now.ToUniversalTime(); } } BaseAnalyzer.SaveMarketInfosToFile(marketInfos, systemConfiguration, log); Bittrex.CheckForMarketDataRecreation(mainMarket, markets, systemConfiguration, log); DateTime fileDateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0).ToUniversalTime(); 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("Bittrex - 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("Bittrex - Market data cleaned."); } else { log.DoLogError("Bittrex - 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); }
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); }