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.


Did this page help you?