Trade Push

Trade Push Subscription

The C++ SDK uses IPushClient to stream asset, position, order-status, and transaction updates.

connect() establishes the connection asynchronously. The connection callback runs after the TLS handshake and authentication frame are sent, but it does not wait for server authentication; each subscription snippet below assumes the connection is usable. Automatic reconnect does not restore subscriptions. Reissue them when the connection callback runs again and confirm their business results through the subscription-result callback.

Initialize Push Client

#include "tigerapi/push_client.h"
#include "tigerapi/client_config.h"

using namespace TIGER_API;

ClientConfig config(false, U("your_config_directory_path"));
auto push_client = IPushClient::create_push_client(config);

push_client->set_connected_callback([]() {
    std::cout << "Connected" << std::endl;
});

push_client->connect();

Subscribe to Asset Updates

unsigned int IPushClient::subscribe_asset(const std::string &account)

Description

Subscribes to account asset updates. A full asset snapshot is pushed every five seconds by default. Live and paper trading accounts use the same interval.

Parameters

ParameterTypeRequiredDescription
accountstringYesAccount ID

Callback Setup

push_client->set_asset_changed_callback([](const tigeropen::push::pb::AssetData& data) {
    std::cout << "Asset changed - Account: " << data.account()
              << std::endl;
});

Example

push_client->subscribe_asset("12345678");  // Replace with your account ID

Callback Data Example

{
    "account": "13810712",
    "currency": "USD",
    "segment": "S",
    "availableFunds": 2285040.55,
    "netLiquidation": 2285529.37,
    "buyingPower": 9140162.19,
    "cashBalance": 2284275.24,
    "grossPositionValue": 1143.04,
    "timestamp": "1669888806020"
}

Unsubscribe from Asset Updates

unsigned int IPushClient::unsubscribe_asset(const std::string &account)

Parameters

ParameterTypeRequiredDescription
accountstringYesAccount ID

Subscribe to Position Updates

unsigned int IPushClient::subscribe_position(const std::string &account)

Description

Subscribes to account position updates. A full position snapshot is pushed every five seconds by default. Live and paper trading accounts use the same interval.

Parameters

ParameterTypeRequiredDescription
accountstringYesAccount ID

Callback Setup

push_client->set_position_changed_callback([](const tigeropen::push::pb::PositionData& data) {
    std::cout << "Position changed - Symbol: " << data.symbol()
              << " Quantity: " << data.positionqty()
              << std::endl;
});

Example

push_client->subscribe_position("12345678");  // Replace with your account ID

Callback Data Example

{
    "account": "13810712",
    "symbol": "AAPL",
    "identifier": "AAPL",
    "market": "US",
    "secType": "STK",
    "positionQty": 4.0,
    "averageCost": 75.0,
    "latestPrice": 147.23,
    "marketValue": 588.92,
    "unrealizedPnl": 288.92,
    "timestamp": "1669888802018"
}

Unsubscribe from Position Updates

unsigned int IPushClient::unsubscribe_position(const std::string &account)


Subscribe to Order-Status Updates

unsigned int IPushClient::subscribe_order(const std::string &account)

Description

Subscribes to order-status updates. The callback runs when an order is submitted, filled, canceled, or otherwise changes status.

Parameters

ParameterTypeRequiredDescription
accountstringYesAccount ID

Callback Setup

push_client->set_order_changed_callback([](const tigeropen::push::pb::OrderStatusData& data) {
    std::cout << "Order changed - ID: " << data.id()
              << " Status: " << data.status()
              << std::endl;
});

Example

push_client->subscribe_order("12345678");  // Replace with your account ID

Callback Data Example

{
    "id": "28875370355884032",
    "account": "736845",
    "symbol": "CL",
    "action": "BUY",
    "orderType": "LMT",
    "totalQuantity": "1",
    "filledQuantity": "1",
    "avgFillPrice": 77.76,
    "status": "Filled",
    "timestamp": "1669200782221"
}

Unsubscribe from Order-Status Updates

unsigned int IPushClient::unsubscribe_order(const std::string &account)


Subscribe to Transaction Reports

unsigned int IPushClient::subscribe_transaction(const std::string &account)

Description

Subscribes to transaction reports. The callback runs when an order generates a new transaction record.

Parameters

ParameterTypeRequiredDescription
accountstringYesAccount ID

Callback Setup

push_client->set_transaction_changed_callback([](const tigeropen::push::pb::OrderTransactionData& data) {
    std::cout << "Transaction - Symbol: " << data.symbol()
              << " Filled: " << data.filledquantity()
              << " Price: " << data.filledprice()
              << std::endl;
});

Example

push_client->subscribe_transaction("12345678");  // Replace with your account ID

Unsubscribe from Transaction Reports

unsigned int IPushClient::unsubscribe_transaction(const std::string &account)


Full Example

#include <iostream>
#include <thread>
#include <chrono>
#include "tigerapi/push_client.h"
#include "tigerapi/client_config.h"

using namespace TIGER_API;

int main() {
    ClientConfig config(false, U("your_config_directory_path"));
    auto push_client = IPushClient::create_push_client(config);

    std::string account = "12345678";  // Replace with your account ID

    // Subscribe after the initial connection and every automatic reconnect
    push_client->set_connected_callback([&, account]() {
        std::cout << "Connected to push server" << std::endl;
        push_client->subscribe_asset(account);
        push_client->subscribe_position(account);
        push_client->subscribe_order(account);
        push_client->subscribe_transaction(account);
    });

    push_client->set_disconnected_callback([]() {
        std::cout << "Disconnected from push server" << std::endl;
    });

    // Asset change callback
    push_client->set_asset_changed_callback([](const tigeropen::push::pb::AssetData& data) {
        std::cout << "Asset changed" << std::endl;
    });

    // Position change callback
    push_client->set_position_changed_callback([](const tigeropen::push::pb::PositionData& data) {
        std::cout << "Position: " << data.symbol()
                  << " qty: " << data.positionqty()
                  << std::endl;
    });

    // Order status change callback
    push_client->set_order_changed_callback([](const tigeropen::push::pb::OrderStatusData& data) {
        std::cout << "Order: " << data.id()
                  << " status: " << data.status()
                  << std::endl;
    });

    // Transaction report callback
    push_client->set_transaction_changed_callback([](const tigeropen::push::pb::OrderTransactionData& data) {
        std::cout << "Transaction: " << data.symbol()
                  << " filled qty: " << data.filledquantity()
                  << " price: " << data.filledprice()
                  << std::endl;
    });

    // Establish connection
    push_client->connect();

    // Keep running
    std::this_thread::sleep_for(std::chrono::hours(1));

    // Unsubscribe
    push_client->unsubscribe_asset(account);
    push_client->unsubscribe_position(account);
    push_client->unsubscribe_order(account);
    push_client->unsubscribe_transaction(account);

    push_client->disconnect();

    return 0;
}

Did this page help you?