示例#1
0
        private IEnumerable <Bar> getHistoricalData(string symbol, Resolution resolution, DateTime startDateTime, DateTime endDateTime)
        {
            GetHistoricalDataResponseListener responseListener = new GetHistoricalDataResponseListener(session);

            session.subscribeResponse(responseListener);
            List <FxBar> barList = new List <FxBar>();

            for (int i = 0; i < 100; i++)
            {
                var bars = getHistoryPrices(session, symbol, resolution, startDateTime, endDateTime, 1000, responseListener);

                if (barList.Count() > 0 && bars.Count() > 0 && bars.Last().DateTime == barList.First().DateTime)
                {
                    bars.RemoveAt(bars.Count() - 1);
                }

                if (bars.Count() == 0)
                {
                    break;
                }

                barList.InsertRange(0, bars);

                endDateTime = barList.First().DateTime;
            }

            if (resolution.TimeFrame == TimeFrame.Quarterly)
            {
                return(normalizeToQuarterlyTimeFrame(barList));
            }

            session.unsubscribeResponse(responseListener);

            return(barList);
        }
示例#2
0
        private List <FxBar> getHistoryPrices(O2GSession session, string instrument, Resolution resolution, DateTime startDateTime, DateTime endDateTime, int maxBars, GetHistoricalDataResponseListener responseListener)
        {
            O2GRequestFactory factory = session.getRequestFactory();
            var          tf           = convert_Resolution_To_string(resolution);
            O2GTimeframe timeframe    = factory.Timeframes[tf];

            if (timeframe == null)
            {
                throw new TimeframeNotFoundException($"Timeframe '{resolution.TimeFrame}:{resolution.Size}' is incorrect!");
            }

            O2GRequest request = factory.createMarketDataSnapshotRequestInstrument(instrument, timeframe, maxBars);

            factory.fillMarketDataSnapshotRequestTime(request, startDateTime, endDateTime, false);

            responseListener.SetRequestID(request.RequestID);
            session.sendRequest(request);

            if (!responseListener.WaitEvents())
            {
                throw new Exception($"{responseListener.Error}");
            }

            O2GResponse response = responseListener.GetResponse();

            List <FxBar> barList = new List <FxBar>();

            if (response != null && response.Type == O2GResponseType.MarketDataSnapshot)
            {
                O2GResponseReaderFactory readerFactory = session.getResponseReaderFactory();
                if (readerFactory != null)
                {
                    O2GMarketDataSnapshotResponseReader reader = readerFactory.createMarketDataSnapshotReader(response);
                    if (reader.Count > 0)
                    {
                        for (int i = 0; i < reader.Count; i++)
                        {
                            barList.Add(new FxBar
                            {
                                Open     = reader.getBidOpen(i),
                                High     = reader.getBidHigh(i),
                                Low      = reader.getBidLow(i),
                                Close    = reader.getBidClose(i),
                                Volume   = reader.getVolume(i),
                                DateTime = reader.getDate(i)
                            });
                        }
                    }
                }
            }

            return(barList);
        }