TT CORE SDK

Receiving Only Specific Solicited Order / Fill Events

Receiving Only Specific Solicited Order / Fill Events

To receive specific solicited order / fill events, you need to:

  • Create a class that is derived from ttsdk::IOrderEventHandler and provide implementations for the following methods.

    • virtual void OnExecutionReport(OrderPtr order, ExecutionReportPtr execRpt) = 0;

      • Callback fired when delivering execution report messages
    • virtual void OnReject(OrderPtr order, RejectResponsePtr rejResp) = 0;
      • Callback fired when delivering order reject messages
    • virtual void OnSendFailed(OrderPtr order, const OrderProfile& profile, const SendCode code) = 0;
      • Callback fired when a request delivery surpasses the timeout threshold
    • virtual void OnUnsubscribed(const char* orderId) = 0;
      • Callback fired when the unsubscribe request is complete and it is safe to destroy the handler object
  • Call the Subscribe() method of the OrderPtr instance passing an instance of the class that defines your ttsdk::IOrderEventHandler event handler.

A sample implementation of class derived from ttsdk::IOrderEventHandler is demonstrated in the following code snippet.


  
  class OrderObserver : public ttsdk::IOrderEventHandler
  {
    public:
        OrderObserver() {}
  
        virtual void OnExecutionReport(ttsdk::OrderPtr order, 
                ttsdk::ExecutionReportPtr execRpt) override
        {
                switch(execRpt->GetExecType())
                {
                      case ttsdk::ExecType::New :
                        std::cout << "Order successfully entered in market. RequestId=" 
                              << execRpt->GetRequestId() 
                              << " OrderStatus=" 
                              << ttsdk::ToString(execRpt->GetOrderStatus()) << std::endl;
                        break;
                      case ttsdk::ExecType::Canceled :
                        std::cout << "Order successfully cancelled. RequestId=" 
                              << execRpt->GetRequestId() 
                              << " OrderStatus=" 
                              << ttsdk::ToString(execRpt->GetOrderStatus()) 
                              << " [external=" << execRpt->IsExternalAction() 
                              << "]" << std::endl;
                        break;
                      case ttsdk::ExecType::Replaced :
                        std::cout << "Order replaced. RequestId=" 
                              << execRpt->GetRequestId() 
                              << " TTOrderId=" << order->GetOrderId() 
                              << " OrderStatus=" 
                              << ttsdk::ToString(execRpt->GetOrderStatus()) 
                              << " [external=" << execRpt->IsExternalAction() 
                              << "]" << std::endl;
                        break;
                      case ttsdk::ExecType::Trade :
                        std::cout << "Order filled. RequestId=" 
                              << execRpt->GetRequestId() 
                              << " TTOrderId=" << order->GetOrderId() 
                              << " OrderStatus=" 
                              << ttsdk::ToString(execRpt->GetOrderStatus()) << std::endl;
                        break;
                      case ttsdk::ExecType::Rejected :
                        std::cout << "Order filled. RequestId=" << execRpt->GetRequestId() 
                              << " TTOrderId=" << order->GetOrderId() 
                              << " OrderStatus=" 
                              << ttsdk::ToString(execRpt->GetOrderStatus()) << std::endl;
                        break;
                      default:
                        std::cout << "Unhandled event. RequestId=" 
                              << execRpt->GetRequestId() << " TTOrderId=" 
                              << order->GetOrderId() << " OrderStatus=" 
                              << ttsdk::ToString(execRpt->GetOrderStatus()) 
                              << " ExecutionType=" 
                              << ttsdk::ToString(execRpt->GetExecType()) << std::endl;
                }
        }
  
        virtual void OnReject(ttsdk::OrderPtr order, ttsdk::RejectResponsePtr rejResp) override
        {
                std::cout << "OnReject event. RequestId=" << rejResp->GetRequestId() 
                      << " TTOrderId=" << order->GetOrderId() << " RejectReason=" 
                      << ttsdk::ToString(rejResp->GetRejectReason()) 
                      << " Text=" << rejResp->GetText() << std::endl;
                order_.reset();
        }
  
        virtual void OnSendFailed(ttsdk::OrderPtr order, const ttsdk::OrderProfile& profile, 
                const ttsdk::IOrderEventHandler::SendCode code) override
        {
              std::cout << "Order send failed. RequestId=" << profile.request_id
                    << " TTOrderId=" << order->GetOrderId() << " SendCode=" 
                    << (int)code << std::endl;
        }
  
        virtual void OnUnsubscribed(const char* orderId) override
        {
              std::cout << "Order observer for orderId=" << orderId 
                    << " has been successfully unsubscribed." << std::endl;
        }  
  };