Ejemplo n.º 1
0
        public async Task GetStockPrices(int dividend, long marketCapMoreThan, DateTime from, DateTime to, string sector, long volumeMoreThan)
        {
            await _stocksRepository.DeleteAllStockPriceHistoricEntities();

            var sortedStocks = await _stockListService.GetSortedStocks(new DCFRequest()
            {
                DividendMoreThan  = dividend,
                MarketCapMoreThan = marketCapMoreThan,
                Sector            = sector,
                VolumeMoreThan    = volumeMoreThan
            });

            var splitList = ListExtensions.Split(sortedStocks, 5);

            foreach (var stockItem in splitList)
            {
                var dbEntities     = new List <StockPriceHistoricEntity>();
                var stockSymbols   = StringExtensions.GetSymbolsString(stockItem.Select(x => x.Symbol).ToArray());
                var historicPrices = await _stockPriceService.GetHistoricPrices(stockSymbols, from, to);

                if (historicPrices.HistoricalStockList != null)
                {
                    foreach (var historicPrice in historicPrices.HistoricalStockList)
                    {
                        var stockEntities = _mapper.Map <List <StockPriceHistoricEntity> >(historicPrice.Historical);
                        foreach (var stockEntity in stockEntities)
                        {
                            stockEntity.Symbol = historicPrice.Symbol;
                        }
                        dbEntities.AddRange(stockEntities);
                    }
                }
                await _stocksRepository.SaveStockPriceHistoricEntities(dbEntities);
            }

            var spyPrice = await _stockPriceService.GetHistoricPrices($"SPY?from={from.ToString("yyyy-MM-dd")}&to={to.ToString("yyyy-MM-dd")}");

            var spyEntities = _mapper.Map <List <StockPriceHistoricEntity> >(spyPrice.Historical);

            foreach (var stockEntity in spyEntities)
            {
                stockEntity.Symbol = spyPrice.Symbol;
            }
            spyEntities.AddRange(spyEntities);

            await _stocksRepository.SaveStockPriceHistoricEntities(spyEntities);
        }