コード例 #1
0
ファイル: Program.cs プロジェクト: ganik/IexClient
        static void TestDividendRequest()
        {
            var dividendRequest = new DividendRequest("AAPL", Range.OneYear);
            var response        = dividendRequest.SendRequestAsync().GetAwaiter().GetResult();

            Console.WriteLine("Dividend for the past year: {0}", response.Sum(a => a.amount));
        }
コード例 #2
0
ファイル: DividendsBroker.cs プロジェクト: remydawson/QDMS
        private async Task <List <Dividend> > FillLocalRequest(DividendRequest request)
        {
            using (var context = new MyDBContext())
            {
                var queryableData = context.Dividends
                                    .Where(x =>
                                           x.ExDate >= request.FromDate &&
                                           x.ExDate <= request.ToDate);

                if (request.Symbol != null && request.Symbol.Count > 0)
                {
                    queryableData = queryableData.BuildContainsExpression(request.Symbol, x => x.Symbol);
                }

                try
                {
                    var result = await queryableData.ToListAsync().ConfigureAwait(false);

                    _logger.Info($"DivB returning {result.Count} items from the local db");
                    return(result);
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "DivB: error when querying database - " + ex.Message);
                    return(new List <Dividend>());
                }
            }
        }
コード例 #3
0
ファイル: DividendsBroker.cs プロジェクト: remydawson/QDMS
 /// <summary>
 /// Returns the appropriate external datasource for the give request
 /// </summary>
 /// <param name="request"></param>
 /// <returns></returns>
 private IDividendDataSource GetClient(DividendRequest request)
 {
     if (!string.IsNullOrEmpty(request.DataSource))
     {
         return(DataSources.ContainsKey(request.DataSource) ? DataSources[request.DataSource] : null);
     }
     else
     {
         return(DataSources[_defaultDataSource]);
     }
 }
コード例 #4
0
ファイル: DividendsBroker.cs プロジェクト: karlcc/qdms
        public async Task <List <Dividend> > RequestDividends(DividendRequest request)
        {
            _logger.Info($"DivB: filling request from {request.FromDate:yyyyMMdd} to {request.ToDate:yyyyMMdd} {request.Symbol} from {request.DataSource ?? "default"} ({request.DataLocation})");

            if (request.DataLocation == DataLocation.LocalOnly)
            {
                return(await FillLocalRequest(request).ConfigureAwait(false));
            }

            //What if it's DataLocation.Both? Doesn't really make sense to grab half and half
            //old data is updated with the "actual" value of the release, so we just re-grab everything externally

            //get data externally
            return(await FillExternalRequest(request).ConfigureAwait(false));
        }
コード例 #5
0
ファイル: DividendsBroker.cs プロジェクト: remydawson/QDMS
        private async Task <List <Dividend> > FillExternalRequest(DividendRequest request)
        {
            var client = GetClient(request);

            if (client == null)
            {
                _logger.Error($"DivB: Could not find specified data source {request.DataSource}");
                RaiseEvent(Error, this, new ErrorArgs(-1, $"DivB: Could not find specified data source {request.DataSource}"));
                throw new Exception("Could not find specified data source {request.DataSource}");
            }

            var data = await client.RequestData(request).ConfigureAwait(false);

            //save the data we got
            try
            {
                using (var context = new MyDBContext())
                {
                    var dbSet = context.Set <Dividend>();
                    foreach (var dividend in data)
                    {
                        //the data we get might be a duplicate and we want the latest values of everything, so we can't just insert
                        dbSet.AddOrUpdate(x => new { x.ExDate, x.Symbol }, dividend);
                    }
                    context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "DivB: Could not save data");
            }

            _logger.Info($"DivB returning {data?.Count} items from {client.Name}");

            return(data);
        }
コード例 #6
0
ファイル: QDMSClient.Http.cs プロジェクト: karlcc/qdms
 /// <summary>
 /// Get dividends
 /// </summary>
 public async Task <ApiResponse <List <Dividend> > > GetDividends(DividendRequest req) =>
 await _apiClient.GetAsync <List <Dividend> >("/dividends", req).ConfigureAwait(false);