示例#1
0
        public async Task UpdatePrices(int stockId, string symbol)
        {
            try
            {
                var dataProvider  = new FMProvider();
                var lastPriceDate = _context.Stocks.Where(s => s.StockId == stockId).Max(d => d.Date).AddDays(1);
                var fmStocks      = await dataProvider.GetHistoricalPrices(symbol, lastPriceDate);

                if (fmStocks != null)
                {
                    foreach (var fmStock in fmStocks)
                    {
                        _context.Add(new Stock()
                        {
                            StockId = stockId,
                            Close   = fmStock.close,
                            Open    = fmStock.open,
                            Low     = fmStock.low,
                            High    = fmStock.high,
                            Volume  = (long)fmStock.volume,
                            Date    = DateTime.Parse(fmStock.date)
                        });
                    }
                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                _logger.LogWarning("ERROR " + ex.Message);
            }
        }
示例#2
0
        public async Task Split(string[] symbols)
        {
            var lastSplitDate = _context.Split.Count() > 0 ? _context.Split.Max(s => s.Date).AddDays(1) : DateTimeOffset.Now.Date;

            var dataProvider = new FMProvider();

            try
            {
                var fmSplits = await dataProvider.GetSplits(lastSplitDate);

                List <Split> newSplits = new List <Split>();

                foreach (var split in fmSplits.Where(s => symbols.Contains(s.symbol)))
                {
                    newSplits.Add(new Split()
                    {
                        StockId     = _companyService.Get(split.symbol).StockId,
                        Date        = DateTime.Parse(split.date),
                        Denominator = split.denominator,
                        Numerator   = split.numerator
                    });
                }
                _context.Split.AddRange(newSplits);
                _context.SaveChanges();

                foreach (var split in newSplits)
                {
                    await _stockService.Split(split.StockId, split.Numerator / split.Denominator);
                }
            }
            catch (Exception ex)
            {
                _logger.LogWarning("ERROR " + ex.Message);
            }
        }
示例#3
0
        public async Task UpdateWithDataProvider(string[] symbols)
        {
            try
            {
                var dataProvider = new FMProvider();
                var fmNews       = await dataProvider.GetNews(symbols);

                var newNews = new List <News>();
                foreach (var fmN in fmNews)
                {
                    newNews.Add(new News()
                    {
                        Symbol        = fmN.symbol,
                        PublishedDate = DateTime.Parse(fmN.publishedDate),
                        Title         = fmN.title,
                        Image         = fmN.image,
                        Site          = fmN.site,
                        Text          = fmN.text,
                        Url           = fmN.url
                    });
                }
                DateTimeOffset minDate = newNews.Min(d => d.PublishedDate);
                var            news    = _context.News.Where(d => d.PublishedDate >= minDate).ToList();
                foreach (var n in newNews)
                {
                    if (news.Where(e => e.Symbol == n.Symbol && e.PublishedDate == n.PublishedDate && e.Title == n.Title).Count() == 0)
                    {
                        Add(n);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogWarning("ERROR " + ex.Message);
            }
        }