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
| 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.
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.quantity()
<< 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);
// 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;
}Updated 8 days ago
