Ejemplo n.º 1
0
        public static Dictionary <string, List <MarketTrendChange> > BuildMarketTrends(string platform, string mainMarket, List <string> marketList, string sortBy, bool isGlobal, Dictionary <string, List <MarketTrendChange> > output, PTMagicConfiguration systemConfiguration, LogHelper log)
        {
            try {
                List <MarketTrend> marketTrends = systemConfiguration.AnalyzerSettings.MarketAnalyzer.MarketTrends.FindAll(mt => mt.Platform.Equals(platform, StringComparison.InvariantCultureIgnoreCase));
                if (marketTrends.Count > 0)
                {
                    Dictionary <string, Market> recentMarkets = BaseAnalyzer.GetMarketDataFromFile(systemConfiguration, log, platform, DateTime.Now.ToUniversalTime(), "Recent");

                    foreach (MarketTrend marketTrend in marketTrends)
                    {
                        if (platform.Equals("Exchange", StringComparison.InvariantCultureIgnoreCase))
                        {
                            log.DoLogInfo(platform + " - Building market trend changes for '" + marketTrend.Name + "' on main market '" + mainMarket + "' with " + marketList.Count.ToString() + " markets...");
                        }
                        else
                        {
                            log.DoLogInfo(platform + " - Building market trend changes for '" + marketTrend.Name + "'...");
                        }

                        Dictionary <string, Market> trendMarkets = BaseAnalyzer.GetMarketDataFromFile(systemConfiguration, log, platform, DateTime.Now.ToUniversalTime().AddMinutes(-marketTrend.TrendMinutes), marketTrend.Name);

                        List <MarketTrendChange> marketTrendChanges = BaseAnalyzer.GetMarketTrendChanges(platform, mainMarket, marketTrend, marketList, recentMarkets, trendMarkets, sortBy, isGlobal, systemConfiguration, log);

                        output.Add(marketTrend.Name, marketTrendChanges);

                        log.DoLogInfo(platform + " - " + marketTrendChanges.Count.ToString() + " Market trend changes built for '" + marketTrend.Name + "'.");
                    }
                }
            } catch (Exception ex) {
                log.DoLogCritical(ex.Message, ex);
            }

            return(output);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
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);
        }