예제 #1
0
        public Decimal GetTrendByMarket(string currency, string marketId)
        {
            var            tm             = AmountHelper.DateTimeToUnixTimestamp(DateTime.UtcNow);
            var            exchange_stats = _dtoMain.mainDb.GetCollection <ExchangeTicker>("aaexchanges_real_twodays");
            DateTimeOffset dateTimeDaily  = new DateTimeOffset(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 0, 0, 0,
                                                               new TimeSpan(0, 0, 0)).AddDays(-1);
            long unixTimeDaily = AmountHelper.DateTimeToUnixTimestamp(dateTimeDaily.UtcDateTime);

            var     exchangeStats = exchange_stats.Find(m => m.InCurrency == currency && m.OutCurrency == "BTC" && m.MarketID == marketId && m.Time >= unixTimeDaily).ToList();
            Decimal dict24Prev = 0.0m;
            Decimal dict24Now = 0.0m;
            int     a = 0, b = 0, i = 0;

            foreach (var ex in exchangeStats)
            {
                if (i == 0)
                {
                    dict24Prev += ex.Last;
                    a++;
                }
                else
                {
                    dict24Now += ex.Last;
                    b++;
                }
                i++;
            }
            if (a == 0 || b == 0 || dict24Prev == 0)
            {
                return(0.0m);
            }
            Decimal trend = (dict24Now / b) * 100 / (dict24Prev / a) - 100;

            return(trend);
        }
예제 #2
0
        public Dictionary <string, Decimal> GetTrendByMarkets(string currency)
        {
            Dictionary <string, Decimal> markets = new Dictionary <string, Decimal>();
            var            tm             = AmountHelper.DateTimeToUnixTimestamp(DateTime.UtcNow);
            var            exchange_stats = _dtoMain.mainDb.GetCollection <ExchangeTicker>("aaexchanges_real_twodays");
            DateTimeOffset dateTimeDaily  = new DateTimeOffset(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 0, 0, 0,
                                                               new TimeSpan(0, 0, 0)).AddDays(-1);
            long unixTimeDaily = AmountHelper.DateTimeToUnixTimestamp(dateTimeDaily.UtcDateTime);

            var exchangeStats = exchange_stats.Find(m => m.InCurrency == currency && m.OutCurrency == "BTC" && m.Time >= unixTimeDaily).ToList();

            Dictionary <string, List <ExchangeTicker> > marketsList = new Dictionary <string, List <ExchangeTicker> >();

            foreach (var mrkt in exchangeStats)
            {
                if (!marketsList.ContainsKey(mrkt.MarketID))
                {
                    marketsList.Add(mrkt.MarketID, new List <ExchangeTicker>());
                    marketsList[mrkt.MarketID].Add(mrkt);
                }
                else
                {
                    marketsList[mrkt.MarketID].Add(mrkt);
                }
            }
            foreach (KeyValuePair <string, List <ExchangeTicker> > kv in marketsList)
            {
                Decimal dict24Prev = 0.0m;
                Decimal dict24Now = 0.0m;
                int     a = 0, b = 0, i = 0;
                foreach (var ex in kv.Value)
                {
                    if (i == 0)
                    {
                        dict24Prev += ex.Last;
                        a++;
                    }
                    else
                    {
                        dict24Now += ex.Last;
                        b++;
                    }
                    i++;
                }
                if (a == 0 || b == 0 || dict24Prev == 0)
                {
                    markets.Add(kv.Key, 0.0m);
                    continue;
                }
                Decimal trend = (dict24Now / b) * 100 / (dict24Prev / a) - 100;
                markets.Add(kv.Key, trend);
            }
            return(markets);
        }
예제 #3
0
        public List <ExchangesCurrency> GetExchangePrice(string currency, List <Exchanges> extList = null)
        {
            List <Exchanges> exchanges = extList;

            if (exchanges == null)
            {
                exchanges = GetExchanges();
            }
            var tm             = AmountHelper.DateTimeToUnixTimestamp(DateTime.UtcNow);
            var exchange_stats = _dtoMain.mainDb.GetCollection <ExchangeTicker>("aaexchanges_real");
            var exchangeStats  = exchange_stats.Find(m => m.InCurrency == currency && m.OutCurrency == "BTC").SortByDescending(s => s.Volume).ToList();
            var lst            = new List <ExchangesCurrency>();

            if (exchangeStats.Count == 0)
            {
                return(lst);
            }
            var trends = GetTrendByMarkets(currency);

            foreach (var ex in exchangeStats)
            {
                var exchange = exchanges.FirstOrDefault(m => m.MarketId == ex.MarketID);
                if (exchange == null)
                {
                    continue;
                }
                string exchangeUrlCoin = currency;
                if (exchange.ExchangeDirectUrlParam == "lower")
                {
                    exchangeUrlCoin = exchangeUrlCoin.ToLower();
                }
                var directUrl = string.Format(exchange.ExchangeDirectUrl, exchangeUrlCoin);
                lst.Add(new ExchangesCurrency()
                {
                    Buy               = ex.Buy,
                    Sell              = ex.Sell,
                    Last              = ex.Last,
                    Volume            = ex.Volume,
                    Change            = trends.ContainsKey(ex.MarketID) ? trends[ex.MarketID] : 0.0m,
                    Exchange          = exchange.Exchange,
                    ExchangeUrl       = exchange.ExchangeUrl,
                    ExchangeDirectUrl = directUrl,
                    Time              = ex.Time,
                    MarketID          = ex.MarketID
                });
            }
            return(lst);
        }
예제 #4
0
        public List <ExchangeHistory> GetHistory(string currency, int days)
        {
            int            addDays = 0;
            var            tm      = AmountHelper.DateTimeToUnixTimestamp(DateTime.UtcNow);
            DateTimeOffset tmCheck = new DateTimeOffset(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 3, 0, 0,
                                                        new TimeSpan(0, 0, 0));
            long tmChekDate = ExchangeHelper.DateTimeToUnixTimestamp(tmCheck.UtcDateTime);

            if (tmChekDate + 60 * 60 < tmChekDate)
            {
                addDays = -1;
            }

            var            exchange_stats    = _dtoMain.mainDb.GetCollection <ExchangeTicker>("aaexchanges_real_each");
            DateTimeOffset dateTimeYesterday = new DateTimeOffset(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 0, 0, 0,
                                                                  new TimeSpan(0, 0, 0)).AddDays(-days + 1 + addDays);
            long unixTimeHistory = AmountHelper.DateTimeToUnixTimestamp(dateTimeYesterday.UtcDateTime);

            var exchangeStats = exchange_stats.Find(m => m.InCurrency == currency && m.OutCurrency == "BTC" && m.Time >= unixTimeHistory).ToList();
            var history       = new List <ExchangeHistory>();
            var tmp           = new Dictionary <long, List <Decimal> >();
            var tmpVolume     = new Dictionary <long, Decimal>();

            foreach (var ex in exchangeStats)
            {
                if (!tmpVolume.ContainsKey(ex.Time))
                {
                    tmpVolume.Add(ex.Time, 0.0m);
                }
                tmpVolume[ex.Time] += ex.Volume;
            }
            foreach (var ex in exchangeStats)
            {
                if (tmpVolume.ContainsKey(ex.Time) && tmpVolume[ex.Time] > 0 && ex.Volume * 100 / tmpVolume[ex.Time] < 3)
                {
                    continue;
                }
                if (!tmp.ContainsKey(ex.Time))
                {
                    tmp.Add(ex.Time, new List <decimal>());
                }
                tmp[ex.Time].Add(ex.Last);
            }
            int i = 1;

            foreach (var ex in tmp)
            {
                if (i > days)
                {
                    break;
                }
                var date    = UnixTimeStampToDateTime(ex.Key);
                var dateStr = date.Day + "-" + date.Month + "-" + date.Year;
                history.Add(new ExchangeHistory()
                {
                    Date  = dateStr,
                    Price = ex.Value.Average()
                });
                i++;
            }
            return(history);
        }