shared_ptr<Order> Book::placeOrderAtLevel(unsigned int level, int size) { if (level >= depth) throw runtime_error("Level undefined in book."); float p = getPrice(level); return placeOrder(p, size); }
void PosixIBClient::onTest() { qDebug() << "Placing order ...."; placeOrder(); //qDebug() << "Requesting market data ...."; //onReqMktData(); }
// MAIN PROCESSING LOOP void PosixTestClient::processMessages() { fd_set readSet, writeSet, errorSet; struct timeval tval; tval.tv_usec = 0; tval.tv_sec = 0; time_t now = time(NULL); switch (m_state) { case ST_STARTMONITOR: startMonitor(); break; case ST_PLACEORDER: placeOrder(); break; case ST_PLACEORDER_ACK: break; case ST_CANCELORDER: cancelOrder(); break; case ST_CANCELORDER_ACK: break; case ST_CHECKALGO: algoSweep(); break; case ST_CHECKALGO_ACK: break; case ST_PING: reqCurrentTime(); break; case ST_PING_ACK: if( m_sleepDeadline < now) { disconnect(); return; } break; case ST_IDLE: if (m_algoSweepTrigger < now) { m_state = ST_CHECKALGO; return; } if( m_sleepDeadline < now) { m_state = ST_PING; return; } break; } if( m_sleepDeadline > 0) { // initialize timeout with m_sleepDeadline - now tval.tv_sec = m_sleepDeadline - now; } if( m_pClient->fd() >= 0 ) { FD_ZERO( &readSet); errorSet = writeSet = readSet; FD_SET( m_pClient->fd(), &readSet); if( !m_pClient->isOutBufferEmpty()) FD_SET( m_pClient->fd(), &writeSet); FD_CLR( m_pClient->fd(), &errorSet); int ret = select( m_pClient->fd() + 1, &readSet, &writeSet, &errorSet, &tval); if( ret == 0) { // timeout return; } if( ret < 0) { // error disconnect(); return; } if( m_pClient->fd() < 0) return; if( FD_ISSET( m_pClient->fd(), &errorSet)) { // error on socket m_pClient->onError(); } if( m_pClient->fd() < 0) return; if( FD_ISSET( m_pClient->fd(), &writeSet)) { // socket is ready for writing m_pClient->onSend(); } if( m_pClient->fd() < 0) return; if( FD_ISSET( m_pClient->fd(), &readSet)) { // socket is ready for reading m_pClient->onReceive(); } } }
void TwsClient::processMessages() { fd_set readSet, writeSet, errorSet; struct timeval tval; tval.tv_usec = 0; tval.tv_sec = 0; time_t now = time(NULL); //std::cout<<"m_state "<<m_state<<std::endl; switch (m_state) { case ST_PLACEORDER: placeOrder(); break; case ST_PLACEORDER_ACK: break; case ST_CANCELORDER: cancelOrder(); break; case ST_CANCELORDER_ACK: break; case ST_PING: reqCurrentTime(); break; case ST_PING_ACK: if( m_sleepDeadline < now) { disconnect(); return; } break; case ST_IDLE: if( m_sleepDeadline < now) { m_state = ST_PING; return; } break; case ST_MKT_DATA: reqMktData(); } if( m_sleepDeadline > 0) { // initialize timeout with m_sleepDeadline - now tval.tv_sec = m_sleepDeadline - now; } if( m_pClient->fd() >= 0 ) { FD_ZERO( &readSet); errorSet = writeSet = readSet; FD_SET( m_pClient->fd(), &readSet); if( !m_pClient->isOutBufferEmpty()) FD_SET( m_pClient->fd(), &writeSet); FD_CLR( m_pClient->fd(), &errorSet); int ret = select( m_pClient->fd() + 1, &readSet, &writeSet, &errorSet, &tval); if( ret == 0) { // timeout return; } if( ret < 0) { // error disconnect(); return; } if( m_pClient->fd() < 0) return; if( FD_ISSET( m_pClient->fd(), &errorSet)) { // error on socket m_pClient->onError(); } if( m_pClient->fd() < 0) return; if( FD_ISSET( m_pClient->fd(), &writeSet)) { // socket is ready for writing m_pClient->onSend(); } if( m_pClient->fd() < 0) return; if( FD_ISSET( m_pClient->fd(), &readSet)) { // socket is ready for reading m_pClient->onReceive(); } } }