老虎证券 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代码初始化:
import com.tigerbrokers.stock.openapi.client.config.ClientConfig;
import com.tigerbrokers.stock.openapi.client.https.client.TigerHttpClient;
public class TigerClientConfig {
public static ClientConfig clientConfig = ClientConfig.DEFAULT_CONFIG;
public static TigerHttpClient client;
static {
// 配置文件所在目录
clientConfig.configFilePath = "/path/to/config/dir";
// clientConfig.secretKey = "your_secret_key"; // 机构账号必填
client = TigerHttpClient.getInstance().clientConfig(clientConfig);
}
}import com.tigerbrokers.stock.openapi.client.https.request.quote.QuoteKlineRequest;
import com.tigerbrokers.stock.openapi.client.https.response.quote.QuoteKlineResponse;
import com.tigerbrokers.stock.openapi.client.struct.enums.KType;
import java.util.Arrays;
QuoteKlineRequest request = QuoteKlineRequest
.newRequest(Arrays.asList("AAPL"), KType.day, "2024-01-01", "2024-12-31")
.withLimit(100);
QuoteKlineResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(response.getKlineItems());
} else {
System.out.println("Error: " + response.getMessage());
}import com.tigerbrokers.stock.openapi.client.https.domain.contract.item.ContractItem;
import com.tigerbrokers.stock.openapi.client.https.request.trade.TradeOrderRequest;
import com.tigerbrokers.stock.openapi.client.https.response.trade.TradeOrderResponse;
import com.tigerbrokers.stock.openapi.client.struct.enums.ActionType;
ContractItem contract = ContractItem.buildStockContract("AAPL", "USD");
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 150.0);
TradeOrderResponse response = client.execute(request);
System.out.println(response.isSuccess() ? "下单成功" : "下单失败: " + response.getMessage());实现 ApiComposeCallback 接口定义回调:
import com.tigerbrokers.stock.openapi.client.config.ClientConfig;
import com.tigerbrokers.stock.openapi.client.socket.WebSocketClient;
import com.tigerbrokers.stock.openapi.client.socket.data.pb.QuoteBasicData;
import com.tigerbrokers.stock.openapi.client.socket.ApiComposeCallback;
import java.util.HashSet;
// 实现回调接口
ApiComposeCallback callback = new DefaultApiComposeCallback() {
@Override
public void quoteChange(QuoteBasicData data) {
System.out.println("行情变动: " + data.getSymbol() + " " + data.getLatestPrice());
}
};
ClientConfig config = ClientConfig.DEFAULT_CONFIG;
config.configFilePath = "/path/to/config/dir";
WebSocketClient wsClient = WebSocketClient.getInstance()
.clientConfig(config)
.apiComposeCallback(callback);
wsClient.connect();
// 订阅股票行情
HashSet<String> symbols = new HashSet<>();
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:
import com.tigerbrokers.stock.openapi.client.config.ClientConfig;
import com.tigerbrokers.stock.openapi.client.https.client.TigerHttpClient;
public class TigerClientConfig {
public static ClientConfig clientConfig = ClientConfig.DEFAULT_CONFIG;
public static TigerHttpClient client;
static {
clientConfig.configFilePath = "/path/to/config/dir";
// clientConfig.secretKey = "your_secret_key"; // required for institutional accounts
client = TigerHttpClient.getInstance().clientConfig(clientConfig);
}
}import com.tigerbrokers.stock.openapi.client.https.request.quote.QuoteKlineRequest;
import com.tigerbrokers.stock.openapi.client.https.response.quote.QuoteKlineResponse;
import com.tigerbrokers.stock.openapi.client.struct.enums.KType;
import java.util.Arrays;
QuoteKlineRequest request = QuoteKlineRequest
.newRequest(Arrays.asList("AAPL"), KType.day, "2024-01-01", "2024-12-31")
.withLimit(100);
QuoteKlineResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(response.getKlineItems());
} else {
System.out.println("Error: " + response.getMessage());
}import com.tigerbrokers.stock.openapi.client.https.domain.contract.item.ContractItem;
import com.tigerbrokers.stock.openapi.client.https.request.trade.TradeOrderRequest;
import com.tigerbrokers.stock.openapi.client.https.response.trade.TradeOrderResponse;
import com.tigerbrokers.stock.openapi.client.struct.enums.ActionType;
ContractItem contract = ContractItem.buildStockContract("AAPL", "USD");
TradeOrderRequest request = TradeOrderRequest.buildLimitOrder(contract, ActionType.BUY, 1, 150.0);
TradeOrderResponse response = client.execute(request);
System.out.println(response.isSuccess() ? "Order placed" : "Failed: " + response.getMessage());Implement the ApiComposeCallback interface to handle events:
import com.tigerbrokers.stock.openapi.client.config.ClientConfig;
import com.tigerbrokers.stock.openapi.client.socket.WebSocketClient;
import com.tigerbrokers.stock.openapi.client.socket.data.pb.QuoteBasicData;
import java.util.HashSet;
ApiComposeCallback callback = new DefaultApiComposeCallback() {
@Override
public void quoteChange(QuoteBasicData data) {
System.out.println("Quote: " + data.getSymbol() + " @ " + data.getLatestPrice());
}
};
ClientConfig config = ClientConfig.DEFAULT_CONFIG;
config.configFilePath = "/path/to/config/dir";
WebSocketClient wsClient = WebSocketClient.getInstance()
.clientConfig(config)
.apiComposeCallback(callback);
wsClient.connect();
HashSet<String> symbols = new HashSet<>();
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