订阅和取消订阅商品报价

From FxCodeBaseWiki

Jump to: navigation, search

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 • Русский • 中文 • ‪中文(繁體)‬
Personal tools