基本功能示例
老虎 Open API C++ SDK 提供了丰富的接口来调用老虎的服务,本章节将对老虎 API 的核心功能进行一一演示:包括查询行情,订阅行情,以及调用 API 进行交易
查询行情
以下为一个最简单的调用老虎 API 的示例,演示了如何调用 Open API 来主动查询股票行情。
#include "tigerapi/quote_client.h"
#include "tigerapi/client_config.h"
using namespace TIGER_API;
using namespace web::json;
int main() {
// 初始化配置
ClientConfig config(false, U("your_config_directory_path"));
// 初始化行情客户端
QuoteClient quote_client(config);
// 查询股票行情快照
value symbols = value::array();
symbols[0] = value::string(U("00700"));
value result = quote_client.get_brief(symbols);
// 输出结果
ucout << result.serialize() << std::endl;
return 0;
}响应来源
get_brief 返回未建模的 web::json::value,SDK 仓库没有此示例的已验证 fixture,因此不提供合成行情价格。
订阅行情
除了选择主动查询的方式,Open API 还支持订阅-接受推送的方式来接收行情等信息。此示例实现了订阅苹果与 AMD 股票行情,将行情快照输出在控制台,持续 30 秒后取消订阅,并且断开与服务器的连接。
#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);
// 设置连接回调
push_client->set_connected_callback([]() {
std::cout << "Connected" << std::endl;
});
// 设置断开回调
push_client->set_disconnected_callback([]() {
std::cout << "Disconnected" << std::endl;
});
// 设置行情变动回调
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;
});
// 建立连接
push_client->connect();
// 订阅行情
std::vector<std::string> symbols = {"AAPL", "AMD"};
push_client->subscribe_quote(symbols);
// 等待推送
std::this_thread::sleep_for(std::chrono::seconds(30));
// 取消订阅
push_client->unsubscribe_quote(symbols);
// 断开连接
push_client->disconnect();
return 0;
}交易下单
交易是 Open API 的另一个主要功能。此例展示了如何使用 Open API 对美股老虎证券 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() {
// 初始化配置
ClientConfig config(false, U("your_config_directory_path"));
// 初始化交易客户端
TradeClient trade_client(config);
// 方法1: 本地构造合约对象
Contract contract = ContractUtil::stock_contract(U("TIGR"), U("USD"));
// 方法2: 通过接口查询获取合约信息
// value contract_json = trade_client.get_contract(U("TIGR"), U("STK"));
// 创建限价单
Order order = OrderUtil::limit_order(
config.account, // 下单账户
contract, // 合约对象
U("BUY"), // 买入方向
100, // 数量
5.0 // 限价
);
// 提交订单
value result = trade_client.place_order(order);
ucout << result.serialize() << std::endl;
// 下单成功后,order.id 会被填充为实际的订单号
std::cout << "Order ID: " << order.id << std::endl;
return 0;
}SDK model shape
下单传入和更新的 Order 模型定义在 include/tigerapi/model.h;关键字段包括 id、account、contract、action、order_type、total_quantity、limit_price 和 status。SDK 仓库没有该下单响应的已验证 fixture,因此不提供合成订单号或账户。
补充说明
对于支持的其他类型的订单,请参考文档交易类-下单交易部分中的说明
Updated 8 days ago
Did this page help you?
