void processMessage(Message &msg) { Element data = msg.getElement(BAR_DATA).getElement(BAR_TICK_DATA); int numBars = data.numValues(); std::cout <<"Response contains " << numBars << " bars" << std::endl; std::cout <<"Datetime\t\tOpen\t\tHigh\t\tLow\t\tClose" << "\t\tNumEvents\tVolume" << std::endl; for (int i = 0; i < numBars; ++i) { Element bar = data.getValueAsElement(i); Datetime time = bar.getElementAsDatetime(TIME); assert(time.hasParts(DatetimeParts::DATE | DatetimeParts::HOURS | DatetimeParts::MINUTES)); double open = bar.getElementAsFloat64(OPEN); double high = bar.getElementAsFloat64(HIGH); double low = bar.getElementAsFloat64(LOW); double close = bar.getElementAsFloat64(CLOSE); int numEvents = bar.getElementAsInt32(NUM_EVENTS); long long volume = bar.getElementAsInt64(VOLUME); std::cout.setf(std::ios::fixed, std::ios::floatfield); std::cout << time.month() << '/' << time.day() << '/' << time.year() << " " << time.hours() << ":" << time.minutes() << "\t\t" << std::showpoint << std::setprecision(3) << open << "\t\t" << high << "\t\t" << low << "\t\t" << close << "\t\t" << numEvents << "\t\t" << std::noshowpoint << volume << std::endl; } }
const double bbgDatetimeToPOSIX(const Datetime& dt) { boost::gregorian::date bbg_boost_date(dt.year(),dt.month(),dt.day()); boost::posix_time::time_duration td = boost::posix_time::hours(dt.hours()) + boost::posix_time::minutes(dt.minutes()) + boost::posix_time::seconds(dt.seconds()) + boost::posix_time::milliseconds(dt.milliseconds()); boost::posix_time::ptime bbg_ptime(bbg_boost_date,td); struct tm tm_time(to_tm(bbg_ptime)); return static_cast<double>(mktime(&tm_time)); }