コード例 #1
0
        private async System.Threading.Tasks.Task DeleteWrongEntries()
        {
            // delete entries for which companies weren't actually listed on GPW on the given date
            // (caused by incorrect data loaded from GPW site, spooq doesn't return those dates)
            var toDelete = _priceRepository.GetQueryable()
                           .Where(PriceValidationHelper.IsInvalidExpression());

            logger.Info($"Found {toDelete.Count()} records to delete");
            if (toDelete.Any())
            {
                await _priceRepository.RemoveRange(toDelete);

                await _priceRepository.Save();
            }
            logger.Info("Deleted successfully\n");
        }
コード例 #2
0
        /// <inheritdoc />
        public async System.Threading.Tasks.Task Sync(DateTime date)
        {
            Logger.Debug("Syncing historical data started");

            var             dateString     = date.ToString(Consts.Formats.DateGpwFormat);
            IList <Company> companies      = _companyRepository.GetQueryable().ToList();
            IList <Price>   prices         = _priceRepository.GetQueryable().Where(item => item.Date == date).ToList();
            var             pricesToInsert = new List <Price>();

            string[,] data;
            try
            {
                data = LoadData(dateString);
            }
            catch (Exception ex)
            {
                Logger.Debug(date.ToString(CultureInfo.InvariantCulture) + ": " + ex.Message);
                return;
            }
            for (var i = 1; i < data.GetLength(0); ++i)
            {
                var day     = DateTime.Parse(data[i, 0]);
                var name    = data[i, 1].Trim();
                var open    = decimal.Parse(data[i, 4].Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
                var max     = decimal.Parse(data[i, 5].Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
                var min     = decimal.Parse(data[i, 6].Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
                var close   = decimal.Parse(data[i, 7].Replace(",", "."), NumberStyles.Any, CultureInfo.InvariantCulture);
                var volumen = int.Parse(data[i, 9]);
                if (companies.All(item => item.Code != name))
                {
                    _companyRepository.Insert(new Company
                    {
                        Code = name,
                        Name = ""
                    });
                    await _companyRepository.Save();

                    companies = _companyRepository.GetQueryable().ToList();
                }
                var company = companies.First(item => item.Code == name);
                if (prices.Any(item => item.CompanyId == company.Id))
                {
                    continue;
                }
                var price = new Price
                {
                    Date       = day,
                    ClosePrice = close,
                    CompanyId  = company.Id,
                    HighPrice  = max,
                    LowPrice   = min,
                    OpenPrice  = open,
                    Volume     = volumen
                };
                if (!PriceValidationHelper.IsInvalid(price))
                {
                    pricesToInsert.Add(price);
                }
            }
            _priceRepository.BulkInsert(pricesToInsert);
            await _priceRepository.Save();

            await _cache.Flush();

            Logger.Debug("Syncing historical data ended.");
        }