void Reporter::printCurrentOrderBook(std::ostream& os) const { StrStream strstream; auto cap = strstream.capacity() - 128; const auto nbBids = bids_.size(); const auto nbAsks = asks_.size(); os << "Full Bids/Asks:\n"; auto i = 0U; while (1) { StrStream strstream_tmp; if (i < nbBids) { Limit bid = bids_[i]; strstream_tmp << i; strstream_tmp.append(6, ' '); strstream_tmp << ": " << getQty(bid) << " @ " << getPrice(bid); strstream_tmp.append(40, ' '); if (i < nbAsks) { Limit ask = asks_[i]; strstream_tmp << getQty(ask) << " @ " << getPrice(ask) << '\n'; } else { strstream_tmp << "empty\n"; } } else { strstream_tmp << i; strstream_tmp.append(6, ' '); strstream_tmp << ": empty"; strstream_tmp.append(40, ' '); if (i < nbAsks) { Limit ask = asks_[i]; strstream_tmp << getQty(ask) << " @ " << getPrice(ask) << '\n'; } else { strstream << strstream_tmp; strstream << "empty\n"; break; } } if (strstream.length() + strstream_tmp.length() > cap) { os.rdbuf()->sputn(strstream.c_str(), strstream.length()); strstream.clear(); } strstream << strstream_tmp; ++i; } os.rdbuf()->sputn(strstream.c_str(), strstream.length()); os.flush(); }
bool Reporter::treatTrade(Trade&& newTrade) { receivedNewTrade_ = true; if (getPrice(newTrade) == getPrice(currentTrade_)) { getQty(currentTrade_) += getQty(newTrade); } else { currentTrade_ = std::forward<Trade>(newTrade); } return true; }
void Reporter::printMidQuotesAndTrades(std::ostream& os, Errors& errors) { StrStream strstream; if (unlikely(bids_.begin() == bids_.end() || asks_.begin() == asks_.end())) { strstream << "NAN" << '\n'; } else if (receivedNewTrade_) { strstream << getQty(currentTrade_) << '@' << getPrice(currentTrade_) << '\n'; receivedNewTrade_ = false; detectCross_ = false; } else if (unlikely(getPrice(*bids_.begin()) >= getPrice(*asks_.begin()))) { if (likely(!detectCross_)) detectCross_ = true; else { strstream << "Cross BID (" << getPrice(*bids_.begin()) << ")/ASK(" << getPrice(*asks_.begin()) << ')' << '\n'; ++errors.bestBidEqualOrUpperThanBestAsk; } } else { Price midQuote = (getPrice(*bids_.begin())+getPrice(*asks_.begin()))/2; strstream << midQuote << '\n'; } os.rdbuf()->sputn(strstream.c_str(), strstream.length()); os.flush(); }
void AddIncomeExpenseDialog::onValuesChanged() { qDebug() << "AddIncomeExpenseDialog::onValuesChanged()"; qlonglong sumVal = Household::multiplyToRoundedInt(Household::qtyIntFromMoneyString(getQty()), Household::valueIntFromMoneyString(getValue())); ui->doubleSpinBox_sum->setValue(Household::stringFromValueInt(sumVal).toDouble()); }