示例#1
0
        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);
        }
示例#2
0
        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);
        }