IO2GRequest *joinToNewGroupRequest(IO2GSession *session, const char *sAccountID, std::vector<std::string> &orderIDs, int iContingencyType) { O2G2Ptr<IO2GRequestFactory> requestFactory = session->getRequestFactory(); if (!requestFactory) { std::cout << "Cannot create request factory" << std::endl; return NULL; } O2G2Ptr<IO2GValueMap> valuemap = requestFactory->createValueMap(); valuemap->setString(Command, O2G2::Commands::JoinToNewContingencyGroup); valuemap->setInt(ContingencyGroupType, iContingencyType); for (size_t i=0; i < orderIDs.size(); ++i) { O2G2Ptr<IO2GValueMap> valuemapChild = requestFactory->createValueMap(); valuemapChild->setString(OrderID, orderIDs[i].c_str()); valuemapChild->setString(AccountID, sAccountID); valuemap->appendChild(valuemapChild); } O2G2Ptr<IO2GRequest> request = requestFactory->createOrderRequest(valuemap); if (!request) { std::cout << requestFactory->getLastError() << std::endl; return NULL; } return request.Detach(); }
IO2GRequest *createOTORequest(IO2GSession *session, const char *sOfferID, const char *sAccountID, int iAmount, double dRatePrimary, double dRateSecondary) { O2G2Ptr<IO2GRequestFactory> requestFactory = session->getRequestFactory(); if (!requestFactory) { std::cout << "Cannot create request factory" << std::endl; return NULL; } O2G2Ptr<IO2GValueMap> valuemap = requestFactory->createValueMap(); valuemap->setString(Command, O2G2::Commands::CreateOTO); O2G2Ptr<IO2GValueMap> valuemapPrimary = requestFactory->createValueMap(); valuemapPrimary->setString(Command, O2G2::Commands::CreateOrder); valuemapPrimary->setString(OrderType, O2G2::Orders::StopEntry); valuemapPrimary->setString(AccountID, sAccountID); valuemapPrimary->setString(OfferID, sOfferID); valuemapPrimary->setString(BuySell, O2G2::Sell); valuemapPrimary->setInt(Amount, iAmount); valuemapPrimary->setDouble(Rate, dRatePrimary); valuemap->appendChild(valuemapPrimary); O2G2Ptr<IO2GValueMap> valuemapSecondary = requestFactory->createValueMap(); valuemapSecondary->setString(Command, O2G2::Commands::CreateOrder); valuemapSecondary->setString(OrderType, O2G2::Orders::StopEntry); valuemapSecondary->setString(AccountID, sAccountID); valuemapSecondary->setString(OfferID, sOfferID); valuemapSecondary->setString(BuySell, O2G2::Buy); valuemapSecondary->setInt(Amount, iAmount); valuemapSecondary->setDouble(Rate, dRateSecondary); valuemap->appendChild(valuemapSecondary); O2G2Ptr<IO2GRequest> request = requestFactory->createOrderRequest(valuemap); if (!request) { std::cout << requestFactory->getLastError() << std::endl; return NULL; } return request.Detach(); }
IO2GRequest *createCloseMarketNettingOrderRequest(IO2GSession *session, CloseOrderData *closeOrdersData) { O2G2Ptr<IO2GRequestFactory> requestFactory = session->getRequestFactory(); O2G2Ptr<IO2GValueMap> batchValuemap = requestFactory->createValueMap(); batchValuemap->setString(Command, O2G2::Commands::CreateOrder); std::string sOfferID = closeOrdersData->offerID; std::string sAccountID = closeOrdersData->account; OrderSide side = closeOrdersData->side; std::string sOrderType = O2G2::Orders::TrueMarketClose; switch (side) { case Buy: { O2G2Ptr<IO2GValueMap> childValuemap = requestFactory->createValueMap(); childValuemap->setString(Command, O2G2::Commands::CreateOrder); childValuemap->setString(NetQuantity, "Y"); childValuemap->setString(OrderType, sOrderType.c_str()); childValuemap->setString(AccountID, sAccountID.c_str()); childValuemap->setString(OfferID, sOfferID.c_str()); childValuemap->setString(BuySell, O2G2::Buy); batchValuemap->appendChild(childValuemap); } break; case Sell: { O2G2Ptr<IO2GValueMap> childValuemap = requestFactory->createValueMap(); childValuemap->setString(Command, O2G2::Commands::CreateOrder); childValuemap->setString(NetQuantity, "Y"); childValuemap->setString(OrderType, sOrderType.c_str()); childValuemap->setString(AccountID, sAccountID.c_str()); childValuemap->setString(OfferID, sOfferID.c_str()); childValuemap->setString(BuySell, O2G2::Sell); batchValuemap->appendChild(childValuemap); } break; case Both: { O2G2Ptr<IO2GValueMap> buyValuemap = requestFactory->createValueMap(); buyValuemap->setString(Command, O2G2::Commands::CreateOrder); buyValuemap->setString(NetQuantity, "Y"); buyValuemap->setString(OrderType, sOrderType.c_str()); buyValuemap->setString(AccountID, sAccountID.c_str()); buyValuemap->setString(OfferID, sOfferID.c_str()); buyValuemap->setString(BuySell, O2G2::Buy); batchValuemap->appendChild(buyValuemap); O2G2Ptr<IO2GValueMap> sellValuemap = requestFactory->createValueMap(); sellValuemap->setString(Command, O2G2::Commands::CreateOrder); sellValuemap->setString(NetQuantity, "Y"); sellValuemap->setString(OrderType, sOrderType.c_str()); sellValuemap->setString(AccountID, sAccountID.c_str()); sellValuemap->setString(OfferID, sOfferID.c_str()); sellValuemap->setString(BuySell, O2G2::Sell); batchValuemap->appendChild(sellValuemap); } break; } IO2GRequest *request = requestFactory->createOrderRequest(batchValuemap); if (!request) { std::cout << requestFactory->getLastError() << std::endl; return NULL; } return request; }
IO2GRequest *createOTOCORequest(IO2GSession *session, const char *sOfferID, const char *sAccountID, int iAmount, double dRatePrimary, double dRateOcoFirst, double dRateOcoSecond) { O2G2Ptr<IO2GRequestFactory> requestFactory = session->getRequestFactory(); if (requestFactory) { // Create OTO command O2G2Ptr<IO2GValueMap> valuemapMain = requestFactory->createValueMap(); valuemapMain->setString(Command, O2G2::Commands::CreateOTO); // Create Entry order O2G2Ptr<IO2GValueMap> valuemapPrimary = requestFactory->createValueMap(); valuemapPrimary->setString(Command, O2G2::Commands::CreateOrder); valuemapPrimary->setString(OrderType, O2G2::Orders::StopEntry); valuemapPrimary->setString(AccountID, sAccountID); valuemapPrimary->setString(OfferID, sOfferID); valuemapPrimary->setString(BuySell, O2G2::Sell); valuemapPrimary->setInt(Amount, iAmount); valuemapPrimary->setDouble(Rate, dRatePrimary); // Create OCO group of orders O2G2Ptr<IO2GValueMap> valuemapOCO = requestFactory->createValueMap(); valuemapOCO->setString(Command, O2G2::Commands::CreateOCO); // Create Entry orders to OCO O2G2Ptr<IO2GValueMap> valuemapOCOFirst = requestFactory->createValueMap(); valuemapOCOFirst->setString(Command, O2G2::Commands::CreateOrder); valuemapOCOFirst->setString(OrderType, O2G2::Orders::StopEntry); valuemapOCOFirst->setString(AccountID, sAccountID); valuemapOCOFirst->setString(OfferID, sOfferID); valuemapOCOFirst->setString(BuySell, O2G2::Buy); valuemapOCOFirst->setInt(Amount, iAmount); valuemapOCOFirst->setDouble(Rate, dRateOcoFirst); O2G2Ptr<IO2GValueMap> valuemapOCOSecond = requestFactory->createValueMap(); valuemapOCOSecond->setString(Command, O2G2::Commands::CreateOrder); valuemapOCOSecond->setString(OrderType, O2G2::Orders::StopEntry); valuemapOCOSecond->setString(AccountID, sAccountID); valuemapOCOSecond->setString(OfferID, sOfferID); valuemapOCOSecond->setString(BuySell, O2G2::Buy); valuemapOCOSecond->setInt(Amount, iAmount); valuemapOCOSecond->setDouble(Rate, dRateOcoSecond); // Fill the created groups. Please note, first you should add an entry order to OTO order and then OCO group of orders valuemapMain->appendChild(valuemapPrimary);; valuemapOCO->appendChild(valuemapOCOFirst); valuemapOCO->appendChild(valuemapOCOSecond); valuemapMain->appendChild(valuemapOCO); O2G2Ptr<IO2GRequest> request = requestFactory->createOrderRequest(valuemapMain); if (!request) { std::cout << requestFactory->getLastError() << std::endl; return NULL; } return request.Detach(); } else { std::cout << "Cannot create request factory" << std::endl; return NULL; } }