Trade Push

Trade Push Subscription

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

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. The callback runs whenever the account's assets change.

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.

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.quantity()
              << 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);

    // Connection callbacks
    push_client->set_connected_callback([]() {
        std::cout << "Connected to push server" << std::endl;
    });

    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.quantity()
                  << 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();

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

    // Subscribe
    push_client->subscribe_asset(account);
    push_client->subscribe_position(account);
    push_client->subscribe_order(account);
    push_client->subscribe_transaction(account);

    // 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?