行情推送
行情订阅推送
C++ SDK 通过 IPushClient 实现行情的订阅推送功能。推送使用 Protobuf 协议进行数据传输,回调函数异步触发。
初始化推送客户端
#include "tigerapi/push_client.h"
#include "tigerapi/client_config.h"
using namespace TIGER_API;
ClientConfig config(false, U("/path/to/your/properties/"));
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_inner_error_callback([](std::string err) {
std::cout << "Error: " << err << std::endl;
});
// 建立连接
push_client->connect();subscribe_quote 订阅股票行情
unsigned int IPushClient::subscribe_quote(const std::vector<std::string> &symbols)
说明
订阅股票的实时行情推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 标的代码列表 |
回调设置
使用 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;
});示例
std::vector<std::string> symbols = {"AAPL", "TSLA"};
push_client->subscribe_quote(symbols);unsubscribe_quote 取消订阅股票行情
unsigned int IPushClient::unsubscribe_quote(const std::vector<std::string> &symbols)
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 标的代码列表 |
subscribe_future_quote 订阅期货行情
unsigned int IPushClient::subscribe_future_quote(const std::vector<std::string> &symbols)
说明
订阅期货合约的实时行情推送,使用与股票行情相同的 set_quote_changed_callback 回调
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 期货合约代码列表,如 CL2312 |
subscribe_option_quote 订阅期权行情
unsigned int IPushClient::subscribe_option_quote(const std::vector<std::string> &symbols)
说明
订阅期权合约的实时行情推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 期权标识符列表 |
subscribe_quote_depth 订阅深度行情
unsigned int IPushClient::subscribe_quote_depth(const std::vector<std::string> &symbols)
说明
订阅深度行情(买卖盘口)推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 标的代码列表 |
回调设置
push_client->set_quote_depth_changed_callback([](const tigeropen::push::pb::QuoteDepthData& data) {
std::cout << "Depth data received" << std::endl;
});unsubscribe_quote_depth 取消订阅深度行情
unsigned int IPushClient::unsubscribe_quote_depth(const std::vector<std::string> &symbols)
subscribe_kline 订阅K线
unsigned int IPushClient::subscribe_kline(const std::vector<std::string> &symbols)
说明
订阅K线数据推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 标的代码列表 |
回调设置
push_client->set_kline_changed_callback([](const tigeropen::push::pb::KlineData& data) {
std::cout << "Kline data received" << std::endl;
});unsubscribe_kline 取消订阅K线
unsigned int IPushClient::unsubscribe_kline(const std::vector<std::string> &symbols)
subscribe_tick 订阅逐笔成交
unsigned int IPushClient::subscribe_tick(const std::vector<std::string> &symbols)
说明
订阅逐笔成交数据推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 标的代码列表 |
回调设置
// 使用 TradeTick 对象回调
push_client->set_tick_changed_callback([](const TradeTick& data) {
std::cout << "Symbol: " << data.symbol << " ticks: " << data.ticks.size() << std::endl;
});
// 或使用完整 Protobuf TickData 回调
push_client->set_full_tick_changed_callback([](const tigeropen::push::pb::TickData& data) {
std::cout << "Full tick data received" << std::endl;
});unsubscribe_tick 取消订阅逐笔成交
unsigned int IPushClient::unsubscribe_tick(const std::vector<std::string> &symbols)
subscribe_market 订阅整个市场
unsigned int IPushClient::subscribe_market(const std::string &market)
说明
订阅整个市场的行情推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| market | string | Yes | 市场,如 "US"、"HK" |
unsubscribe_market 取消订阅整个市场
unsigned int IPushClient::unsubscribe_market(const std::string &market)
subscribe_stock_top 订阅股票排行榜
unsigned int IPushClient::subscribe_stock_top(const std::string &market, const std::vector<std::string> &indicators)
说明
订阅股票排行榜数据推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| market | string | Yes | 市场,如 "US"、"HK" |
| indicators | vector<string> | No | 排行指标列表,默认空 |
回调设置
push_client->set_stock_top_changed_callback([](const tigeropen::push::pb::StockTopData& data) {
std::cout << "Stock top data received" << std::endl;
});subscribe_option_top 订阅期权排行榜
unsigned int IPushClient::subscribe_option_top(const std::string &market, const std::vector<std::string> &indicators)
说明
订阅期权排行榜数据推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| market | string | Yes | 市场 |
| indicators | vector<string> | No | 排行指标列表 |
回调设置
push_client->set_option_top_changed_callback([](const tigeropen::push::pb::OptionTopData& data) {
std::cout << "Option top data received" << std::endl;
});subscribe_cc 订阅数字货币行情
unsigned int IPushClient::subscribe_cc(const std::vector<std::string> &symbols)
说明
订阅数字货币的实时行情推送
参数
| 参数名 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| symbols | vector<string> | Yes | 数字货币代码列表 |
unsubscribe_cc 取消订阅数字货币行情
unsigned int IPushClient::unsubscribe_cc(const std::vector<std::string> &symbols)
query_subscribed_symbols 查询已订阅标的
unsigned int IPushClient::query_subscribed_symbols()
说明
查询当前已订阅的所有标的列表
回调设置
push_client->set_query_subscribed_symbols_changed_callback([](const tigeropen::push::pb::Response& resp) {
std::cout << "Subscribed symbols: " << resp.DebugString() << std::endl;
});
push_client->query_subscribed_symbols();完整示例
#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("/path/to/your/properties/"));
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_subscribe_callback([](const tigeropen::push::pb::Response& resp) {
std::cout << "Subscribe result: " << resp.DebugString() << std::endl;
});
// 行情变动回调
push_client->set_quote_changed_callback([](const tigeropen::push::pb::QuoteBasicData& data) {
std::cout << "Symbol: " << data.symbol()
<< " Price: " << data.latestprice()
<< std::endl;
});
// 逐笔成交回调
push_client->set_tick_changed_callback([](const TradeTick& data) {
std::cout << "Tick: " << data.symbol << " count: " << data.ticks.size() << std::endl;
});
// 连接
push_client->connect();
// 订阅
std::vector<std::string> symbols = {"AAPL", "TSLA"};
push_client->subscribe_quote(symbols);
push_client->subscribe_tick(symbols);
// 等待推送
std::this_thread::sleep_for(std::chrono::seconds(60));
// 取消订阅并断开
push_client->unsubscribe_quote(symbols);
push_client->unsubscribe_tick(symbols);
push_client->disconnect();
return 0;
}Updated 11 days ago
