예제 #1
0
        private void SendHistoricalRequest(int id, HistoricalDataRequest request)
        {
            Log(LogLevel.Info, string.Format("Sent historical data request to TWS. ID: {0}, Symbol: {1}, {2} back from {3}",
                                             id,
                                             request.Instrument.Symbol,
                                             TWSUtils.TimespanToDurationString((request.EndingDate - request.StartingDate), request.Frequency),
                                             request.EndingDate.ToString("yyyy-MM-dd hh:mm:ss")));

            TimeZoneInfo exchangeTZ = request.Instrument.GetTZInfo();
            //we need to convert time from the exchange TZ to Local...the ib client then converts it to UTC
            var startingDate = TimeZoneInfo.ConvertTime(request.StartingDate, exchangeTZ, TimeZoneInfo.Local);
            var endingDate   = TimeZoneInfo.ConvertTime(request.EndingDate, exchangeTZ, TimeZoneInfo.Local);

            try
            {
                _client.RequestHistoricalData
                (
                    id,
                    TWSUtils.InstrumentToContract(request.Instrument),
                    endingDate,
                    TWSUtils.TimespanToDurationString((endingDate - startingDate), request.Frequency),
                    TWSUtils.BarSizeConverter(request.Frequency),
                    GetDataType(request.Instrument),
                    request.RTHOnly ? 1 : 0
                );
            }
            catch (Exception ex)
            {
                Log(LogLevel.Error, "IB: Could not send historical data request: " + ex.Message);
                RaiseEvent(Error, this, new ErrorArgs(-1, "Could not send historical data request: " + ex.Message, id));
            }
        }
예제 #2
0
        /// <summary>
        /// real time data request
        /// </summary>
        public int RequestRealTimeData(RealTimeDataRequest request)
        {
            lock (_requestIDMapLock)
            {
                _requestCounter++;
                _realTimeDataRequests.Add(_requestCounter, request);
                _requestIDMap.Add(_requestCounter, request.AssignedID);
            }

            try
            {
                Contract contract = TWSUtils.InstrumentToContract(request.Instrument);

                _client.RequestRealTimeBars(
                    _requestCounter,
                    contract,
                    (int)TWSUtils.BarSizeConverter(request.Frequency),
                    RealTimeBarType.Trades, request.RTHOnly);
            }
            catch (Exception ex)
            {
                Log(LogLevel.Error, "IB: Could not send real time data request: " + ex.Message);
                RaiseEvent(Error, this, new ErrorArgs(-1, "Could not send real time data request: " + ex.Message));
            }
            return(_requestCounter);
        }
예제 #3
0
파일: IBTest.cs 프로젝트: zino974/qdms
        public void HistoricalRequestsAreNotSplitIfNotNecessary()
        {
            int[] requestCount = { 0 };

            _ibClientMock.Setup(
                x => x.RequestHistoricalData(
                    It.IsAny <int>(),
                    It.IsAny <Contract>(),
                    It.IsAny <DateTime>(),
                    It.IsAny <string>(),
                    It.IsAny <BarSize>(),
                    It.IsAny <HistoricalDataType>(),
                    It.IsAny <int>(),
                    It.IsAny <List <TagValue> >()))
            .Callback(() => requestCount[0]++);

            var requests = new Dictionary <KeyValuePair <BarSize, int>, int> //left side is barsize/seconds, right side is expected splits
            {
                { new KeyValuePair <BarSize, int>(BarSize.OneDay, 300 * 24 * 3600), 1 },
                { new KeyValuePair <BarSize, int>(BarSize.OneHour, 25 * 24 * 3600), 1 },
                { new KeyValuePair <BarSize, int>(BarSize.ThirtyMinutes, 6 * 24 * 3600), 1 },
                { new KeyValuePair <BarSize, int>(BarSize.OneMinute, 1 * 24 * 3600), 1 },
                { new KeyValuePair <BarSize, int>(BarSize.ThirtySeconds, 21 * 3600), 1 },
                { new KeyValuePair <BarSize, int>(BarSize.FifteenSeconds, 13400), 1 },
                { new KeyValuePair <BarSize, int>(BarSize.FiveSeconds, 6900), 1 },
                { new KeyValuePair <BarSize, int>(BarSize.OneSecond, 1500), 1 }
            };

            var inst = new Instrument();

            foreach (var kvp in requests)
            {
                _ibDatasource.RequestHistoricalData(new HistoricalDataRequest(
                                                        inst,
                                                        TWSUtils.BarSizeConverter(kvp.Key.Key),
                                                        DateTime.Now.AddSeconds(-kvp.Key.Value),
                                                        DateTime.Now,
                                                        dataLocation: DataLocation.ExternalOnly));

                Assert.AreEqual(kvp.Value, requestCount[0], kvp.Key.Key.ToString());
                requestCount[0] = 0;
            }
        }
예제 #4
0
        public void HistoricalRequestsAreSplitToRespectRequestLimits()
        {
            int[] requestCount = { 0 };

            _ibClientMock.Setup(x => x.RequestHistoricalData(
                                    It.IsAny <int>(),
                                    It.IsAny <Contract>(),
                                    It.IsAny <string>(),
                                    It.IsAny <string>(),
                                    It.IsAny <QDMSIBClient.BarSize>(),
                                    It.IsAny <HistoricalDataType>(),
                                    It.IsAny <bool>(),
                                    It.IsAny <bool>(),
                                    It.IsAny <List <TagValue> >()))
            .Callback(() => requestCount[0]++);

            var requests = new Dictionary <KeyValuePair <BarSize, int>, int> //left side is barsize/seconds, right side is expected splits
            {
                { new KeyValuePair <BarSize, int>(BarSize.OneDay, 500 * 24 * 3600), 2 },
                { new KeyValuePair <BarSize, int>(BarSize.OneHour, 75 * 24 * 3600), 3 },
                { new KeyValuePair <BarSize, int>(BarSize.ThirtyMinutes, 22 * 24 * 3600), 4 },
                { new KeyValuePair <BarSize, int>(BarSize.OneMinute, 9 * 24 * 3600), 5 },
                { new KeyValuePair <BarSize, int>(BarSize.ThirtySeconds, 40 * 3600), 2 },
                { new KeyValuePair <BarSize, int>(BarSize.FifteenSeconds, 4 * 14400), 5 },
                { new KeyValuePair <BarSize, int>(BarSize.FiveSeconds, 2 * 7200), 3 },
                { new KeyValuePair <BarSize, int>(BarSize.OneSecond, 10 * 1800), 11 }
            };

            var inst = new Instrument();

            foreach (var kvp in requests)
            {
                _ibDatasource.RequestHistoricalData(new HistoricalDataRequest(
                                                        inst,
                                                        TWSUtils.BarSizeConverter(kvp.Key.Key),
                                                        DateTime.Now.AddSeconds(-kvp.Key.Value),
                                                        DateTime.Now,
                                                        dataLocation: DataLocation.ExternalOnly));

                Assert.AreEqual(kvp.Value, requestCount[0], kvp.Key.Key.ToString());
                requestCount[0] = 0;
            }
        }