private (IbkrDataProviderRequest yearsRequest, IbkrDataProviderRequest daysRequest) PartitionLargeRequest(IbkrDataProviderRequest request) { /* * IBKR requests greater than 1 year must be split into 2 requests - one for the years and one for the remainder days */ Log(new LogMessage(ToString(), $"Partitioning request [{request.RequestID}] for {request.Security.Ticker}", LogMessageType.Debug)); request.Requests.Insert(0, IbkrDataProviderRequestType.SecurityHistoricalData); IbkrDataProviderRequest yearsRequest = request.Copy(); yearsRequest.PartitionedRequest = true; IbkrDataProviderRequest daysRequest = request.Copy(); daysRequest.PartitionedRequest = true; var partitions = request.PriceDataRequestSpan.ToIbkrPartition(); // Modify the Years request date range to request from the original End to End-Years yearsRequest.PriceDataRequestRange = (request.PriceDataRequestRange.end.AddYears(-partitions.wholeYears), request.PriceDataRequestRange.end); // Modify the Days request date range to request fron the original Start to Start+Days (plus buffer) daysRequest.PriceDataRequestRange = (request.PriceDataRequestRange.start, request.PriceDataRequestRange.start.AddDays(partitions.daysRemainder + 14)); yearsRequest.MarkPending(); daysRequest.MarkPending(); return(yearsRequest, daysRequest); }