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
| Parameter | Type | Required | Description |
|---|---|---|---|
| account | string | Yes | Account 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 IDCallback 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| account | string | Yes | Account 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| account | string | Yes | Account 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 IDCallback 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| account | string | Yes | Account 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 IDCallback 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
| Parameter | Type | Required | Description |
|---|---|---|---|
| account | string | Yes | Account 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 IDUnsubscribe 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;
}Updated about 1 month ago
