public async Task <List <CompanyQuotesModel> > FindCompaniesForJob(FindCompaniesForJobRequest request)
        {
            using (var scope = _container.BeginLifetimeScope())
            {
                var repository = scope.Resolve <ICompanyRepository>();
                var companies  = await repository.FindCompaniesForJobAsync(request.JobId, request.MaxRecordCount, request.SectorId, request.SP500, request.IsIndex);

                return(companies);
            }
        }
        public void Start()
        {
            var log = new Logger();

            try
            {
                var indicators = _indicatorService.GetGlobalIndicators();


                var findRequest = new FindCompaniesForJobRequest()
                {
                    JobId          = Guid.NewGuid().ToString(),
                    MaxRecordCount = 10,
                    SectorId       = 0
                };

                var companies    = _companyService.FindCompaniesForJob(findRequest);
                var sectorResult = new GlobalIndicatorResults(0);

                while (companies != null && companies.Any())
                {
                    foreach (var company in companies)
                    {
                        foreach (var indicator in indicators)
                        {
                            var result = CalculateIndicators(company, indicator);

                            sectorResult.Add(result, indicator, company.Ticker);
                        }

                        log.Info($"Processed {company.Ticker}");
                    }

                    _companyService.CompleteJob(new CompleteJobRequest
                    {
                        JobId   = findRequest.JobId,
                        Tickers = companies.Select(c => c.Ticker).ToList()
                    });

                    companies = null; // _companyService.FindCompaniesForJob(findRequest);
                }

                var indicatorResults = sectorResult.IndicatorResults.Select(i => i.Value).ToList();
                if (indicatorResults.Any())
                {
                    var tickers = indicatorResults.First().Select(r => r.Ticker).ToList();

                    foreach (var indicatorResult in indicatorResults)
                    {
                        var calculator = _processorFactory.Create(indicatorResult.Indicator);
                        var result     = calculator.Merge(indicatorResult);


                        _globalIndicatorService.Save(new GlobalIndicator
                        {
                            SectorId             = 0, //sector.SectorId,
                            IndicatorId          = indicatorResult.Indicator.IndicatorId,
                            Values               = result,
                            StartDate            = result.Last().Date,
                            EndDate              = result.First().Date,
                            CalculatedSuccessful = true,
                            CompanyCount         = tickers.Count,
                            LastCalculated       = DateTime.UtcNow
                        }).GetAwaiter().GetResult();
                    }
                }
            }

            catch (Exception ex)
            {
                log.Error("FindCompaniesForJob", ex);
            }
        }