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()); }