void ForexConnectWrapper::closeMarket(const std::string tradeID, int amount) { IO2GTradeTableRow *trade = getTradeTableRow(tradeID); if (!trade) { std::stringstream ss; ss << "Could not find trade with ID = " << tradeID; log(ss.str()); throw ss.str().c_str(); } IO2GValueMap *valuemap = mRequestFactory->createValueMap(); valuemap->setString(Command, O2G2::Commands::CreateOrder); valuemap->setString(OrderType, O2G2::Orders::TrueMarketClose); valuemap->setString(AccountID, sAccountID.c_str()); valuemap->setString(OfferID, trade->getOfferID()); valuemap->setString(TradeID, tradeID.c_str()); valuemap->setString(BuySell, ( strncmp(trade->getBuySell(), "B", 1) == 0 ? O2G2::Sell : O2G2::Buy ) ); trade->release(); valuemap->setInt(Amount, amount); //valuemap->setString(CustomID, "Custom"); IO2GRequest *request = mRequestFactory->createOrderRequest(valuemap); valuemap->release(); TableListener *tableListener = new TableListener(); tableListener->setRequestID(request->getRequestID()); IO2GTableManager *tableManager = getLoadedTableManager(); subscribeTableListener(tableManager, tableListener); Listener *ll = new Listener(session); IO2GResponse *response = ll->sendRequest(request); request->release(); ll->release(); if (!response) { std::stringstream ss; ss << "Failed to get response to closeMarket request " << tradeID << " " << amount; log(ss.str()); throw ss.str().c_str(); } tableListener->waitForTableUpdate(); response->release(); unsubscribeTableListener(tableManager, tableListener); tableListener->release(); tableManager->release(); }
void ForexConnectWrapper::openMarket(const std::string symbol, const std::string direction, int amount) { if (direction != O2G2::Sell && direction != O2G2::Buy) { log("Direction must be 'B' or 'S'"); throw "Direction must be 'B' or 'S'"; } std::string sOfferID = getOfferID(symbol); IO2GValueMap *valuemap = mRequestFactory->createValueMap(); valuemap->setString(Command, O2G2::Commands::CreateOrder); valuemap->setString(OrderType, O2G2::Orders::TrueMarketOpen); valuemap->setString(AccountID, sAccountID.c_str()); valuemap->setString(OfferID, sOfferID.c_str()); valuemap->setString(BuySell, direction.c_str()); valuemap->setInt(Amount, amount); valuemap->setString(TimeInForce, O2G2::TIF::IOC); IO2GRequest *orderRequest = mRequestFactory->createOrderRequest(valuemap); valuemap->release(); TableListener *tableListener = new TableListener(); tableListener->setRequestID(orderRequest->getRequestID()); IO2GTableManager *tableManager = getLoadedTableManager(); subscribeTableListener(tableManager, tableListener); Listener *ll = new Listener(session); IO2GResponse *response = ll->sendRequest(orderRequest); orderRequest->release(); ll->release(); if (!response) { std::stringstream ss; ss << "Failed to send openMarket request " << symbol << " " << direction << " " << amount; log(ss.str()); throw ss.str().c_str(); } tableListener->waitForTableUpdate(); response->release(); unsubscribeTableListener(tableManager, tableListener); tableListener->release(); tableManager->release(); }