void printPrices(IO2GSession *session, IO2GResponse *response) { if (response != 0) { if (response->getType() == MarketDataSnapshot) { std::cout << "Request with RequestID='" << response->getRequestID() << "' is completed:" << std::endl; O2G2Ptr<IO2GResponseReaderFactory> factory = session->getResponseReaderFactory(); if (factory) { O2G2Ptr<IO2GMarketDataSnapshotResponseReader> reader = factory->createMarketDataSnapshotReader(response); if (reader) { char sTime[20]; for (int ii = reader->size() - 1; ii >= 0; ii--) { DATE dt = reader->getDate(ii); formatDate(dt, sTime); if (reader->isBar()) { printf("DateTime=%s, BidOpen=%f, BidHigh=%f, BidLow=%f, BidClose=%f, AskOpen=%f, AskHigh=%f, AskLow=%f, AskClose=%f, Volume=%i\n", sTime, reader->getBidOpen(ii), reader->getBidHigh(ii), reader->getBidLow(ii), reader->getBidClose(ii), reader->getAskOpen(ii), reader->getAskHigh(ii), reader->getAskLow(ii), reader->getAskClose(ii), reader->getVolume(ii)); } else { printf("DateTime=%s, Bid=%f, Ask=%f\n", sTime, reader->getBid(ii), reader->getAsk(ii)); } } } } } } }
bool getHistoryPrices(IO2GSession *session, const char *sInstrument, const char *sTimeframe, DATE dtFrom, DATE dtTo, ResponseListener *responseListener) { O2G2Ptr<IO2GRequestFactory> factory = session->getRequestFactory(); if (!factory) { std::cout << "Cannot create request factory" << std::endl; return false; } //find timeframe by identifier O2G2Ptr<IO2GTimeframeCollection> timeframeCollection = factory->getTimeFrameCollection(); O2G2Ptr<IO2GTimeframe> timeframe = timeframeCollection->get(sTimeframe); if (!timeframe) { std::cout << "Timeframe '" << sTimeframe << "' is incorrect!" << std::endl; return false; } O2G2Ptr<IO2GRequest> request = factory->createMarketDataSnapshotRequestInstrument(sInstrument, timeframe, timeframe->getQueryDepth()); DATE dtFirst = dtTo; // there is limit for returned candles amount do { factory->fillMarketDataSnapshotRequestTime(request, dtFrom, dtFirst, false); responseListener->setRequestID(request->getRequestID()); session->sendRequest(request); if (!responseListener->waitEvents()) { std::cout << "Response waiting timeout expired" << std::endl; return false; } // shift "to" bound to oldest datetime of returned data O2G2Ptr<IO2GResponse> response = responseListener->getResponse(); if (response && response->getType() == MarketDataSnapshot) { O2G2Ptr<IO2GResponseReaderFactory> readerFactory = session->getResponseReaderFactory(); if (readerFactory) { O2G2Ptr<IO2GMarketDataSnapshotResponseReader> reader = readerFactory->createMarketDataSnapshotReader(response); if (reader->size() > 0) { if (abs(dtFirst - reader->getDate(0)) > 0.0001) dtFirst = reader->getDate(0); // earliest datetime of returned data else break; } else { std::cout << "0 rows received" << std::endl; break; } } printPrices(session, response); } else { break; } } while (dtFirst - dtFrom > 0.0001); return true; }