Basic Examples
The Tiger OpenAPI C++ SDK provides methods for retrieving market data, subscribing to real-time updates, and trading. The examples below introduce each workflow.
Query Market Data
This example retrieves a stock quote snapshot.
#include "tigerapi/quote_client.h"
#include "tigerapi/client_config.h"
using namespace TIGER_API;
using namespace web::json;
int main() {
// Initialize configuration
ClientConfig config(false, U("your_config_directory_path"));
// Initialize quote client
QuoteClient quote_client(config);
// Query stock quote snapshot
value symbols = value::array();
symbols[0] = value::string(U("00700"));
value result = quote_client.get_brief(symbols);
// Print result
ucout << result.serialize() << std::endl;
return 0;
}Response provenance
get_brief returns unmodeled web::json::value. The SDK repository has no verified fixture for this example, so no synthetic market prices are shown.
Subscribe to Market Data
Tiger OpenAPI can also stream market data. This example subscribes to Apple and AMD quotes, prints each update, waits 30 seconds, and then unsubscribes and disconnects.
#include <iostream>
#include <thread>
#include <chrono>
#include "tigerapi/push_client.h"
#include "tigerapi/client_config.h"
using namespace TIGER_API;
int main() {
// Initialize configuration
ClientConfig config(false, U("your_config_directory_path"));
// Create push client
auto push_client = IPushClient::create_push_client(config);
// Set connected callback
push_client->set_connected_callback([]() {
std::cout << "Connected" << std::endl;
});
// Set disconnected callback
push_client->set_disconnected_callback([]() {
std::cout << "Disconnected" << std::endl;
});
// Set quote changed callback
push_client->set_quote_changed_callback([](const tigeropen::push::pb::QuoteBasicData& data) {
std::cout << "Symbol: " << data.symbol()
<< " Price: " << data.latestprice()
<< " Volume: " << data.volume()
<< std::endl;
});
// Connect
push_client->connect();
// Subscribe to quotes
std::vector<std::string> symbols = {"AAPL", "AMD"};
push_client->subscribe_quote(symbols);
// Wait for push data
std::this_thread::sleep_for(std::chrono::seconds(30));
// Unsubscribe
push_client->unsubscribe_quote(symbols);
// Disconnect
push_client->disconnect();
return 0;
}Place a Trade Order
This example places a US limit order for Tiger Brokers stock (TIGR):
#include "tigerapi/trade_client.h"
#include "tigerapi/client_config.h"
#include "tigerapi/contract_util.h"
#include "tigerapi/order_util.h"
using namespace TIGER_API;
int main() {
// Initialize configuration
ClientConfig config(false, U("your_config_directory_path"));
// Initialize trade client
TradeClient trade_client(config);
// Method 1: Build contract object locally
Contract contract = ContractUtil::stock_contract(U("TIGR"), U("USD"));
// Method 2: Query contract information via API
// value contract_json = trade_client.get_contract(U("TIGR"), U("STK"));
// Create limit order
Order order = OrderUtil::limit_order(
config.account, // Trading account
contract, // Contract object
U("BUY"), // Buy direction
100, // Quantity
5.0 // Limit price
);
// Submit order
value result = trade_client.place_order(order);
ucout << result.serialize() << std::endl;
// After successful placement, order.id is populated with the actual order number
std::cout << "Order ID: " << order.id << std::endl;
return 0;
}SDK model shape
The submitted and updated Order model is defined in include/tigerapi/model.h; key fields include id, account, contract, action, order_type, total_quantity, limit_price, and status. The SDK repository has no verified order-response fixture, so no synthetic order ID or account is shown.
Additional Notes
For other supported order types, see Place Order.
Updated 12 days ago
