老虎证券 OpenAPI Java SDK — 行情、交易、账户、推送一站式接入
Tiger Brokers OpenAPI Java SDK — Market data, trading, account & push in one package
TigerOpen Java SDK 是老虎证券开放平台的官方 Java SDK,为个人开发者和机构客户提供完整的证券交易接口服务:
- 行情数据 — 股票/期权/期货实时行情、K 线、逐笔成交、盘口深度
- 交易服务 — 下单、改单、撤单,支持市价/限价/止损/跟踪止损/算法订单 (TWAP/VWAP)
- 账户管理 — 资产查询、持仓管理、成交记录
- 实时推送 — WebSocket 行情推送、订单状态、持仓与资产变动
开通老虎证券账户并入金后即可免费使用 OpenAPI。
| 市场 | 股票/ETF | 期权 | 期货 | 窝轮/牛熊证 |
|---|---|---|---|---|
| 美国 | ✅ | ✅ | ✅ | — |
| 香港 | ✅ | ✅ | ✅ | ✅ |
| 新加坡 | ✅ | — | — | — |
| 澳大利亚 | ✅ | ✅ | — | — |
Java 8+
在 pom.xml 中添加依赖:
<dependency>
<groupId>io.github.tigerbrokers</groupId>
<artifactId>openapi-java-sdk</artifactId>
<version>2.5.0</version>
</dependency>如无法下载,可添加仓库源:
<repositories>
<repository>
<id>sonatype-public</id>
<name>sonatype-public</name>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>dependencies {
implementation 'io.github.tigerbrokers:openapi-java-sdk:2.5.0'
}git clone https://github.com/tigerfintech/openapi-java-sdk.git
cd openapi-java-sdk
mvn clean install前往 开发者信息页 注册并获取:
tiger_id— 开发者 IDprivate_key— RSA 私钥(Java SDK 仅支持 PKCS#8 格式,即BEGIN PRIVATE KEY)account— 交易账户号
机构用户请访问 机构账户中心 完成开通流程,还需获取 secret_key。
下载 tiger_openapi_config.properties 并放到本地目录:
private_key_pk8=your_pkcs8_private_key
tiger_id=your_tiger_id
account=your_account
license=TBHK
env=PROD
# 机构用户额外配置# secret_key=your_secret_key代码初始化:
importcom.tigerbrokers.stock.openapi.client.config.ClientConfig;
importcom.tigerbrokers.stock.openapi.client.https.client.TigerHttpClient;
publicclassTigerClientConfig {
publicstaticClientConfigclientConfig = ClientConfig.DEFAULT_CONFIG;
publicstaticTigerHttpClientclient;
static {
// 配置文件所在目录clientConfig.configFilePath = "/path/to/config/dir";
// clientConfig.secretKey = "your_secret_key"; // 机构账号必填client = TigerHttpClient.getInstance().clientConfig(clientConfig);
}
}importcom.tigerbrokers.stock.openapi.client.https.request.quote.QuoteKlineRequest;
importcom.tigerbrokers.stock.openapi.client.https.response.quote.QuoteKlineResponse;
importcom.tigerbrokers.stock.openapi.client.struct.enums.KType;
importjava.util.Arrays;
QuoteKlineRequestrequest = QuoteKlineRequest
.newRequest(Arrays.asList("AAPL"), KType.day, "2024-01-01", "2024-12-31")
.withLimit(100);
QuoteKlineResponseresponse = client.execute(request);
if (response.isSuccess()) {
System.out.println(response.getKlineItems());
} else {
System.out.println("Error: " + response.getMessage());
}trade_tick 接口和 push 层返回的 cond 字段已由 SDK 转换为可读字符串,含义如下:
美股(US)
| 值 | 含义 |
|---|---|
US_REGULAR_SALE | 常规交易(Regular Sale) |
US_BUNCHED_TRADE | 批量交易(Bunched Trade) |
US_CASH_TRADE | 现金交易(Cash Trade) |
US_INTERMARKET_SWEEP | 跨市场交易(Intermarket Sweep) |
US_BUNCHED_SOLD_TRADE | 批量卖出(Bunched Sold Trade) |
US_PRICE_VARIATION_TRADE | 离价交易(Price Variation Trade) |
US_ODD_LOT_TRADE | 碎股交易(Odd Lot Trade) |
US_RULE_127_OR_155_TRADE | 纽交所第 127/155 条交易 |
US_SOLD_LAST | 延迟交易(Sold Last) |
US_MARKET_CENTER_CLOSE_PRICE | 中央收市价(Market Center Close Price) |
US_NEXT_DAY_TRADE | 隔日交易(Next Day Trade) |
US_MARKET_CENTER_OPENING_TRADE | 中央开盘价交易(Market Center Opening Trade) |
US_PRIOR_REFERENCE_PRICE | 前参考价(Prior Reference Price) |
US_MARKET_CENTER_OPEN_PRICE | 中央开盘价(Market Center Open Price) |
US_SELLER | 卖方(Seller) |
US_FORM_T | 盘前盘后交易(Form T) |
US_EXTENDED_TRADING_HOURS | 延长交易时段(Extended Trading Hours) |
US_CONTINGENT_TRADE | 合单交易(Contingent Trade) |
US_AVERAGE_PRICE_TRADE | 均价交易(Average Price Trade) |
US_CROSS_TRADE | 跨市场交易(Cross Trade) |
US_SOLD_OUT_OF_SEQUENCE | 场外售出(Sold Out of Sequence) |
US_DERIVATIVELY_PRICED | 衍生工具定价(Derivatively Priced) |
US_QUALIFIED_CONTINGENT_TRADE | 合单交易(Qualified Contingent Trade) |
港股(HK)
| 值 | 含义 |
|---|---|
HK_AUTOMATCH_NORMAL | 自动对盘(Automatch Normal) |
HK_ODD_LOT_TRADE | 碎股交易(Odd Lot Trade) |
HK_AUCTION_TRADE | 竞价交易(Auction Trade) |
HK_OVERSEAS_TRADE | 场外交易(Overseas Trade) |
HK_LATE_TRADE_OFF_EXCHG | 开市前成交(Late Trade Off Exchange) |
HK_NON_DIRECT_OFF_EXCHG_TRADE | 非自动对盘(Non-Direct Off Exchange Trade) |
HK_DIRECT_OFF_EXCHG_TRADE | 同券商自动对盘(Direct Off Exchange Trade) |
HK_AUTOMATIC_INTERNALIZED | 同券商非自动对盘(Automatic Internalized) |
importcom.tigerbrokers.stock.openapi.client.https.domain.contract.item.ContractItem;
importcom.tigerbrokers.stock.openapi.client.https.request.trade.TradeOrderRequest;
importcom.tigerbrokers.stock.openapi.client.https.response.trade.TradeOrderResponse;
importcom.tigerbrokers.stock.openapi.client.struct.enums.ActionType;
ContractItemcontract = ContractItem.buildStockContract("AAPL", "USD");
TradeOrderRequestrequest = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 150.0);
TradeOrderResponseresponse = client.execute(request);
System.out.println(response.isSuccess() ? "下单成功" : "下单失败: " + response.getMessage());实现 ApiComposeCallback 接口定义回调:
importcom.tigerbrokers.stock.openapi.client.config.ClientConfig;
importcom.tigerbrokers.stock.openapi.client.socket.WebSocketClient;
importcom.tigerbrokers.stock.openapi.client.socket.data.pb.QuoteBasicData;
importcom.tigerbrokers.stock.openapi.client.socket.ApiComposeCallback;
importjava.util.HashSet;
// 实现回调接口ApiComposeCallbackcallback = newDefaultApiComposeCallback() {
@OverridepublicvoidquoteChange(QuoteBasicDatadata) {
System.out.println("行情变动: " + data.getSymbol() + " " + data.getLatestPrice());
}
};
ClientConfigconfig = ClientConfig.DEFAULT_CONFIG;
config.configFilePath = "/path/to/config/dir";
WebSocketClientwsClient = WebSocketClient.getInstance()
.clientConfig(config)
.apiComposeCallback(callback);
wsClient.connect();
// 订阅股票行情HashSet<String> symbols = newHashSet<>();
symbols.add("AAPL");
symbols.add("TSLA");
wsClient.subscribeQuote(symbols);更多示例代码请参考 src/test/java/ 目录。
- 官方 API 文档
- 开发者信息页
- GitHub Issues
- 老虎量化 QQ 群:869893807(团队或公司客户请联系群主)
TigerOpen Java SDK is the official Java SDK for Tiger Brokers' Open Platform, providing developers and institutional clients with comprehensive securities trading interfaces:
- Market Data — Real-time quotes, candlesticks, tick data, order book depth for stocks, options & futures
- Trading — Place, modify, cancel orders; supports market/limit/stop/trailing-stop/algo orders (TWAP/VWAP)
- Account Management — Asset queries, position tracking, transaction history
- Real-time Push — WebSocket streaming for quotes, order status, position & asset changes
OpenAPI is free to use after opening and funding a Tiger Brokers account.
| Market | Stocks/ETFs | Options | Futures | Warrants/CBBCs |
|---|---|---|---|---|
| US | ✅ | ✅ | ✅ | — |
| Hong Kong | ✅ | ✅ | ✅ | ✅ |
| Singapore | ✅ | — | — | — |
| Australia | ✅ | ✅ | — | — |
Java 8+
Add to pom.xml:
<dependency>
<groupId>io.github.tigerbrokers</groupId>
<artifactId>openapi-java-sdk</artifactId>
<version>2.5.0</version>
</dependency>dependencies {
implementation 'io.github.tigerbrokers:openapi-java-sdk:2.5.0'
}git clone https://github.com/tigerfintech/openapi-java-sdk.git
cd openapi-java-sdk
mvn clean installGo to the Developer Portal to obtain:
tiger_id— Developer IDprivate_key— RSA private key (Java SDK requires PKCS#8 format, i.e.BEGIN PRIVATE KEY)account— Trading account number
Institutional users: visit the Institution Center to complete onboarding and obtain a secret_key.
Download tiger_openapi_config.properties and place it in a local directory:
private_key_pk8=your_pkcs8_private_key
tiger_id=your_tiger_id
account=your_account
license=TBHK
env=PROD
# Institutional users only# secret_key=your_secret_keyInitialize the client:
importcom.tigerbrokers.stock.openapi.client.config.ClientConfig;
importcom.tigerbrokers.stock.openapi.client.https.client.TigerHttpClient;
publicclassTigerClientConfig {
publicstaticClientConfigclientConfig = ClientConfig.DEFAULT_CONFIG;
publicstaticTigerHttpClientclient;
static {
clientConfig.configFilePath = "/path/to/config/dir";
// clientConfig.secretKey = "your_secret_key"; // required for institutional accountsclient = TigerHttpClient.getInstance().clientConfig(clientConfig);
}
}importcom.tigerbrokers.stock.openapi.client.https.request.quote.QuoteKlineRequest;
importcom.tigerbrokers.stock.openapi.client.https.response.quote.QuoteKlineResponse;
importcom.tigerbrokers.stock.openapi.client.struct.enums.KType;
importjava.util.Arrays;
QuoteKlineRequestrequest = QuoteKlineRequest
.newRequest(Arrays.asList("AAPL"), KType.day, "2024-01-01", "2024-12-31")
.withLimit(100);
QuoteKlineResponseresponse = client.execute(request);
if (response.isSuccess()) {
System.out.println(response.getKlineItems());
} else {
System.out.println("Error: " + response.getMessage());
}importcom.tigerbrokers.stock.openapi.client.https.domain.contract.item.ContractItem;
importcom.tigerbrokers.stock.openapi.client.https.request.trade.TradeOrderRequest;
importcom.tigerbrokers.stock.openapi.client.https.response.trade.TradeOrderResponse;
importcom.tigerbrokers.stock.openapi.client.struct.enums.ActionType;
ContractItemcontract = ContractItem.buildStockContract("AAPL", "USD");
TradeOrderRequestrequest = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 150.0);
TradeOrderResponseresponse = client.execute(request);
System.out.println(response.isSuccess() ? "Order placed" : "Failed: " + response.getMessage());Implement the ApiComposeCallback interface to handle events:
importcom.tigerbrokers.stock.openapi.client.config.ClientConfig;
importcom.tigerbrokers.stock.openapi.client.socket.WebSocketClient;
importcom.tigerbrokers.stock.openapi.client.socket.data.pb.QuoteBasicData;
importjava.util.HashSet;
ApiComposeCallbackcallback = newDefaultApiComposeCallback() {
@OverridepublicvoidquoteChange(QuoteBasicDatadata) {
System.out.println("Quote: " + data.getSymbol() + " @ " + data.getLatestPrice());
}
};
ClientConfigconfig = ClientConfig.DEFAULT_CONFIG;
config.configFilePath = "/path/to/config/dir";
WebSocketClientwsClient = WebSocketClient.getInstance()
.clientConfig(config)
.apiComposeCallback(callback);
wsClient.connect();
HashSet<String> symbols = newHashSet<>();
symbols.add("AAPL");
symbols.add("TSLA");
wsClient.subscribeQuote(symbols);More examples are available in the src/test/java/ directory.
- Official API Documentation
- Developer Portal
- GitHub Issues
- Tiger Quant QQ Group: 869893807