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); }
private IbkrDataProviderRequest FormatNewRequest(RefDataProviderRequest request) { // Convert generic request into IBKR formatted request var ret = IbkrDataProviderRequest.GetRequest(request); switch (request.RequestType) { case DataProviderRequestType.SecurityContractData: ret.AddRequestType(IbkrDataProviderRequestType.SecurityExchangeName); break; case DataProviderRequestType.SecurityPriceData: case DataProviderRequestType.SecurityVolumeData: if (ret.Security.Exchange == "UNK") { ret.AddRequestType(IbkrDataProviderRequestType.SecurityExchangeName); } if (ret.PriceDataRequestRange.start == DateTime.MinValue) { ret.AddRequestType(IbkrDataProviderRequestType.SecurityFirstAvailableDate); } ret.AddRequestType(IbkrDataProviderRequestType.SecurityHistoricalData); break; } return(ret); }