订阅和取消订阅商品报价
From FxCodeBaseWiki
Contents |
必备知识
开始使用
请首先阅读开始在 C++ 项目中使用 ForexConnect,了解如何在 C++ 项目中使用 ForexConnect API。
登录
执行任何命令前,您必须先登录。有关详细信息,请阅读 ForexConnect API SDK 中的How to login。
订阅或取消订阅价格更新
应用范围
默认情况下,用户可能取消订阅了某些商品报价,从而您的程序不会收到这些商品的报价变化。因此您必须订阅您需要的特定商品的价格更新。 当您希望降低网络流量时,可以取消订阅某些您不用的商品的价格更新。
要订阅或取消订阅特定商品的价格更新,请使用 SetSubscriptionStatus 命令。
命令参数
订阅/取消订阅命令有以下参数:
- Command - 命令名称,必须为
O2G2::Commands::SetSubscriptionStatus - SubscriptionStatus - 商品的订阅状态:
- "T" - 订阅报价更新
- "D" - 禁用报价更新订阅
- OfferID - 商品标识符,例如,EUR/USD 商品的标识符为“1”。您可通过“报价”表获取特定商品的“OfferID”。有关如何处理表数据的详细信息,请参阅如何获取交易表数据。
创建 SetSubscriptionStatus 命令
要创建 SetSubscribtionStatus 命令,请执行以下操作:
- 1. 确保
IO2GResponseListener已实现,并且该类已订阅来自IO2GSession对象的通知。由于请求为异步发送,因此您需要此侦听器来接收有关命令执行结果的通知。有关IO2GResponseListener实现和事件驱动架构的详细信息,请参阅 ForexConnect API 使用入门 (C++ Win32/Win64)。 - 2. 创建请求工厂:
IO2GRequestFactory* factory = mSession->getRequestFactory();
- 3. 创建并填充代表订阅命令的值映射:
IO2GValueMap* valueMap = factory->createValueMap(); valueMap->setString(Command, O2G2::Commands::SetSubscriptionStatus); valueMap->setString(SubscriptionStatus, "T"); valueMap->setString(OfferID, "1"); //订阅 EUR/USD
- 4. 为命令创建
IO2GRequest对象:
IO2GRequest* subscriptionRequest = factory->createOrderRequest(valueMap);
- 5. 发送异步请求:
mSession->sendRequest(subscriptionRequest);
- 6. 释放所有不再需要的可用 API 对象:
subscribtionRequest->release(); valueMap->release(); factory->release();
- 7. 使用
IO2GResponseListener::onRequestComplete事件处理程序检查命令的执行结果。您可以根据命令的 RequestID 识别您要检查的命令。该 ID 可通过getRequestID()方法从IO2GRequest对象获取。
完成订阅后,您的程序将能够通过 IO2GResponseListener::onTablesUpdates 事件处理程序的实现接收价格变更通知。
在批处理命令中使用 SetSubscriptionStatus
使用批处理命令,您可以优化对多个商品价格更新的订阅/取消订阅请求。 有关详细信息,请参阅如何使用批处理命令。
以下是使用批处理命令实现订阅的示例:
//订阅 EUR/USD、USD/JPY、GBP/USD 报价 void createSubcriptionBatch() { O2G2Ptr<IO2GRequestFactory> factory = mSession->getRequestFactory(); O2G2Ptr<IO2GValueMap> mainValueMap = factory->createValueMap(); mainValueMap->setString(O2GRequestParamsEnum::Command, "SetSubscriptionStatus"); for (int offerId = 1; offerId < 3; offerId++) //EUR/USD, USD/JPY, GBP/USD { O2G2Ptr<IO2GValueMap> childValueMap = factory->createValueMap(); childValueMap->setString(O2GRequestParamsEnum::Command, "SetSubscriptionStatus"); childValueMap->setString(O2GRequestParamsEnum::SubscriptionStatus, "T"); // "T" - 订阅,"D" - 取消订阅 char szOfferId[2]; sprintf_s(szOfferId, sizeof(szOfferId), "%d", offerId); childValueMap->setString(O2GRequestParamsEnum::OfferID, szOfferId); mainValueMap->appendChild(childValueMap); } O2G2Ptr<IO2GRequest> orderRequest = factory->createOrderRequest(mainValueMap); if (!orderRequest) std::cout << factory->getLastError(); else mSession->sendRequest(orderRequest); }
本文的其他语言版本
| Language: | English • Español • Français • Русский • 中文 • 中文(繁體) |
|---|