Пример #1
0
        private void GetTicks(SortedDictionary <DateTime, Tick> ticks, Symbol symbol,
                              DateTime date, O2GSession session, ResponseListener responseListener)
        {
            var requestFactory = session.getRequestFactory();

            var timeframe = requestFactory.Timeframes["t1"];

            if (timeframe == null)
            {
                throw new Exception($"The \"t1\" timeframe is invalid!");
            }

            var request = requestFactory.createMarketDataSnapshotRequestInstrument(
                symbol.ToInstrument(), timeframe, 300);

            var from = date.ToUtcFromEst();

            var until = date.AddDays(1).AddMilliseconds(-1).ToUtcFromEst();

            DateTime first = until;

            int blockId = 0;

            do
            {
                requestFactory.fillMarketDataSnapshotRequestTime(
                    request, from, first, false);

                responseListener.SetRequestID(request.RequestID);

                session.sendRequest(request);

                if (!responseListener.WaitEvents())
                {
                    throw new TimeoutException("The ResponseListener timeout expired!");
                }

                var response = responseListener.GetResponse();

                if ((response != null) && (response.Type == O2GResponseType.MarketDataSnapshot))
                {
                    var readerFactory = session.getResponseReaderFactory();

                    if (readerFactory != null)
                    {
                        var reader = readerFactory.createMarketDataSnapshotReader(response);

                        if (reader.Count > 0)
                        {
                            if (DateTime.Compare(first, reader.getDate(0)) != 0)
                            {
                                first = reader.getDate(0);
                            }
                            else
                            {
                                break;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }

                    var block = ReadTicks(session, response, symbol, blockId++);

                    OnProgress?.Invoke(this, new ProgressArgs(blockId, block));

                    foreach (var tick in block)
                    {
                        if (ticks.ContainsKey(tick.TickOn))
                        {
                            ticks[tick.TickOn] = tick;
                        }
                        else
                        {
                            ticks.Add(tick.TickOn, tick);
                        }
                    }
                }
                else
                {
                    break;
                }
            }while (first.IgnoreMilliseconds() > from.IgnoreMilliseconds());
        }