Options
Get Option Expiration Dates
Request class: OptionExpirationQueryRequest
Description
Get option expiration date information for specified stocks. Maximum of 30 requests per batch.
Parameters
| Parameter | Required | Type | Description |
|---|---|---|---|
| symbols | Yes | array | List of stock symbols, limit: 30 |
| market | Yes | string | US / HK for Hong Kong stocks |
Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionExpirationResponsesource
Structure:
public class OptionExpirationResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionExpirationItem> optionExpirationItems;
}The returned data can be accessed through the OptionExpirationResponse.getOptionExpirationItems() method, which returns OptionExpirationItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionExpirationItem properties are as follows:
| Name | Type | Description |
|---|---|---|
| symbol | string | Stock symbol |
| count | int | Number of expiration dates |
| dates | array | Expiration dates in date format, e.g.: 2024-06-28 |
| timestamps | array | Expiration dates in timestamp format, e.g.: 1544763600000 (US New York time timestamp) |
| periodTags | array | Option period tags, m for monthly options, w for weekly options |
| optionSymbols | array | Symbol corresponding to the four option elements |
Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.
Example
List<String> symbols = new ArrayList<>();
symbols.add("VIX");
OptionExpirationResponse response = client.execute(
new OptionExpirationQueryRequest(symbols, Market.US));
// HK market option. market parameter must be Market.HK
// symbols.add("PAI.HK");
// OptionExpirationResponse response = client.execute(
// new OptionExpirationQueryRequest(symbols, Market.HK));
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code": 0,
"data": [
{
"count": 12,
"dates": [
"2024-12-24",
"2024-12-31",
"2025-01-08",
"2025-01-15",
"2025-01-22",
"2025-02-19",
"2025-03-18",
"2025-04-16",
"2025-05-21",
"2025-06-18",
"2025-07-16",
"2025-08-20"
],
"optionSymbols": [
"VIXW",
"VIXW",
"VIXW",
"VIXW",
"VIX",
"VIX",
"VIX",
"VIX",
"VIX",
"VIX",
"VIX",
"VIX"
],
"periodTags": [
"w",
"q",
"w",
"w",
"m",
"m",
"m",
"m",
"m",
"m",
"m",
"m"
],
"symbol": "VIX",
"timestamps": [
1735016400000,
1735621200000,
1736312400000,
1736917200000,
1737522000000,
1739941200000,
1742270400000,
1744776000000,
1747800000000,
1750219200000,
1752638400000,
1755662400000
]
}
],
"message": "success",
"sign": "jBxaUFSd6e1qIsEeb6l7/Wb8R7kMcNvvglzC6PsJpd7VMP12HKyKMJH8+4g1ePLyT/TzVhyJpCEpXcUAkGrg7hVMMhLoD397vW2Xf0VKedE5mKMy4I+yFK2PneZXr4xKyfCc/+Yb3dc//1gOEEvk9EQHjDzXp6bmy/dFD4020h0=",
"success": true,
"timestamp": 1735048291531
}S&P 500 (.SPX) option symbols
Monthly options use SPX; weekly and quarterly options use SPXW.
Rate Limit
The base rate limit is 60 requests/min.
Get Option Chain
Request class: OptionChainQueryV3Request
Description
Get option chain data.
Option-chain Greeks are deprecated
Greek-related option-chain request flags, filters/models, and response fields
delta,gamma,theta,vega, andrhoare Deprecated. Their values are updated daily and are not timely enough for intraday use. Do not use them for real-time trading decisions. Use the Option Calculation Tool with current market inputs instead.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Stock symbol, symbol and expiry combination limit: 30 |
| expiry | String | Yes | Option expiration date, example: '2022-01-01' |
| market | string | Yes | US/HK for Hong Kong stocks |
Filter Parameters:
OptionChainFilterModel.Greeks and its methods are Deprecated because they filter on daily-updated values that are not suitable for intraday use.
| Parameter | Type | Required | Description |
|---|---|---|---|
| impliedVolatility | Range<Double> | No | Implied-volatility range, set with impliedVolatility(min, max) |
| inTheMoney | Boolean | No | Whether the option is in the money |
| openInterest | Range<Integer> | No | Open-interest range, set with openInterest(min, max) |
| greeks | OptionChainFilterModel.Greeks | No | Deprecated. Nested Greek range filters |
Within OptionChainFilterModel.Greeks, delta, gamma, theta, vega, and rho are each Range<Double> values set through their corresponding (min, max) methods. All are deprecated.
Types in the tables below follow the Java SDK property declarations. Boxed types such as Double, Integer, and Long can represent null at the Java level, but this alone does not define each field's business nullability.
The setReturnGreekValue response flag is deprecated and defaults to not returning these values. Do not enable it in new integrations; use the option calculation tool instead.
Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionChainResponsesource
Structure:
public class OptionChainResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionChainItem> optionChainItems;
}The returned data can be accessed through the OptionChainResponse.getOptionChainItems() method, which returns OptionChainItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionChainItem properties are as follows:
| Name | Type | Description |
|---|---|---|
| symbol | string | Underlying stock symbol |
| expiry | Long | Option expiration date |
| items | List<OptionRealTimeQuoteGroup> | List containing OptionRealTimeQuoteGroup objects, saves option chain data, details below |
OptionRealTimeQuoteGroup object structure:
| Name | Type | Description |
|---|---|---|
| put | OptionRealTimeQuote | Put option |
| call | OptionRealTimeQuote | Call option |
OptionRealTimeQuote object structure:
| Name | Type | Description |
|---|---|---|
| identifier | string | Option identifier, e.g.: AAPL 210115C00095000 |
| strike | String | Strike price |
| right | string | Option right, PUT/CALL |
| askPrice | Double | Ask price |
| askSize | Integer | Ask size |
| bidPrice | Double | Bid price |
| bidSize | Integer | Bid size |
| lastTimestamp | Long | Last trade timestamp, e.g.: 1543343800698 |
| latestPrice | Double | Latest price |
| multiplier | Integer | Multiplier, US options default 100 |
| openInterest | Integer | Open interest |
| preClose | Double | Previous trading day's closing price |
| volume | Integer | Volume |
| impliedVol | Double | Implied volatility |
| delta | Double | Deprecated. Daily-updated Delta; not suitable for intraday use |
| gamma | Double | Deprecated. Daily-updated Gamma; not suitable for intraday use |
| theta | Double | Deprecated. Daily-updated Theta; not suitable for intraday use |
| vega | Double | Deprecated. Daily-updated Vega; not suitable for intraday use |
| rho | Double | Deprecated. Daily-updated Rho; not suitable for intraday use |
Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through json methods.
Example
OptionChainModel basicModel = new OptionChainModel("AAPL", "2024-07-26", TimeZoneId.NewYork);
OptionChainFilterModel filterModel = new OptionChainFilterModel()
.inTheMoney(true)
.impliedVolatility(0.1537, 0.8282)
.openInterest(10, 50000)
;
OptionChainQueryV3Request request = OptionChainQueryV3Request.of(basicModel, filterModel, Market.US);
OptionChainResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code": 0,
"data": [
{
"expiry": 1721966400000,
"items": [
{
"put": {
"askPrice": 4.65,
"askSize": 2,
"bidPrice": 4.5,
"bidSize": 66,
"delta": -0.503388,
"gamma": 0.037062,
"identifier": "AAPL 240726P00210000",
"impliedVol": 0.183129,
"lastTimestamp": 1719345582586,
"latestPrice": 4.6,
"multiplier": 100,
"openInterest": 1858,
"preClose": 5.26,
"rho": -0.072819,
"right": "put",
"strike": "210.0",
"theta": -0.060326,
"vega": 0.24135,
"volume": 404
}
},
{
"put": {
"askPrice": 7.75,
"askSize": 59,
"bidPrice": 7.4,
"bidSize": 260,
"delta": -0.686314,
"gamma": 0.03523,
"identifier": "AAPL 240726P00215000",
"impliedVol": 0.18012,
"lastTimestamp": 1719345365800,
"latestPrice": 7.8,
"multiplier": 100,
"openInterest": 1222,
"preClose": 8.5,
"rho": -0.084955,
"right": "put",
"strike": "215.0",
"theta": -0.048649,
"vega": 0.21153,
"volume": 134
}
}
],
"symbol": "AAPL"
}
],
"message": "success",
"sign": "dA0ngWPHWC0GOme2h0/FPma5UAcLSKiR5vWw9ldZ1wz8sHiRG7QMroO78JXqK5A+J3m6XWT9esAXagwbs8D6mI/3vhFU5QCJQbDd58lQRJRWeAK/G+7eQOwAQIqvgLttBtMBbRKlHMchhHATgUi9U7v/eu4NG5tDHr04InQy0cc=",
"success": true,
"timestamp": 1719407360986
}Rate Limit
The base rate limit is 60 requests/min.
Get Option Real-time Quotes
Request class: OptionBriefQueryV2Request
Description
Gets real-time option quotes. You must purchase market data access for the corresponding market before using this endpoint. Each request supports up to 30 options.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| market | Market | Yes | Market, supports US, HK |
| option_basic | List<OptionCommonModel> | Yes | List of option four elements, max 30 |
OptionCommonModel parameter structure:
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Stock symbol. For Hong Kong stocks, use the symbol returned by the "Get Hong Kong Option Names" endpoint |
| right | string | Yes | Call or put (CALL/PUT) |
| expiry | long | Yes | Expiration time |
| strike | string | Yes | Strike price. Decimal places must match the option chain: US options require at least one decimal place and may require two; HK stock options use two; HK index options use none. |
Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionBriefResponsesource
Structure:
public class OptionBriefResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionBriefItem> optionBriefItems;
}The returned data can be accessed through OptionBriefResponse.getOptionBriefItems(), which returns OptionBriefItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionBriefItem properties are as follows:
| Field | Type | Description |
|---|---|---|
| identifier | String | Option identifier |
| symbol | String | Stock symbol |
| strike | string | Strike price |
| bidPrice | Double | Bid price |
| bidSize | Integer | Bid size |
| askPrice | Double | Ask price |
| askSize | Integer | Ask size |
| latestPrice | Double | Latest price |
| timestamp | Long | Latest trade time |
| latestTime | String | Latest trade time formatted in US Eastern Time. If latestTime is absent but timestamp is present, getLatestTime() derives it; the getter returns null when neither value is available |
| volume | Integer | Volume |
| high | Double | High price |
| low | Double | Low price |
| open | Double | Open price |
| preClose | Double | Previous trading day's closing price |
| openInterest | Integer | Open interest |
| change | Double | Price change |
| multiplier | Integer | Multiplier, US options default 100 |
| ratesBonds | Double | One-year US Treasury rate, updated daily, e.g.: 0.0078 means actual rate is: 0.78% |
| right | string | Direction (PUT/CALL) |
| volatility | string | Historical volatility |
| expiry | Long | Expiration time (milliseconds, 0 o'clock of the day) |
| midPrice | Double | Mid price |
| midTimestamp | Long | Timestamp of the mid price |
| markPrice | Double | Mark price |
| markTimestamp | Long | Timestamp of the mark price |
| preMarkPrice | Double | Previous mark price |
| sellingReturn | Double | Annualized return from selling |
Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.
Numeric properties in OptionBriefItem are declared as boxed Java types; the SDK does not use those types alone to define the business nullability of each field.
Example
OptionCommonModel model = new OptionCommonModel();
model.setSymbol("TSLA");
model.setStrike("437.5");
model.setRight("PUT");
model.setExpiry("2026-01-30", TimeZoneId.NewYork);
List<OptionCommonModel> models = new ArrayList<>();
models.add(model);
OptionBriefQueryV2Request request = new OptionBriefQueryV2Request(models, Market.US);
OptionBriefResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code" : 0,
"message" : "success",
"timestamp" : 1769061919677,
"optionBriefItems" : [ {
"lang" : null,
"identifier" : "TSLA 260130P00437500",
"symbol" : "TSLA",
"strike" : "437.5",
"bidPrice" : 17.45,
"bidSize" : 10,
"askPrice" : 17.65,
"askSize" : 10,
"latestPrice" : 17.6,
"volume" : 967,
"high" : 25.35,
"low" : 14.5,
"open" : 25.35,
"preClose" : 25.44,
"openInterest" : 679,
"change" : -7.84,
"multiplier" : 100,
"right" : "put",
"volatility" : "31.10%",
"expiry" : 1769749200000,
"ratesBonds" : 0.035227,
"midPrice" : 17.55,
"midTimestamp" : 1769029200460,
"markPrice" : 17.6,
"markTimestamp" : 1769029200460,
"preMarkPrice" : 26.125,
"sellingReturn" : 1.065105,
"timestamp" : 1769028900019,
"latestTime" : "2026-01-21 15:55:00.019",
"account" : null
} ],
"success" : true
}Rate Limit
The base rate limit is 120 requests/min.
Get Option Market Depth
Request class: OptionDepthQueryRequest
Description
Get option depth market data, supports US and Hong Kong market options, batch requests support up to 30 items at once.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| market | Market | Yes | Market, US/HK |
| option_basic | List<OptionCommonModel> | Yes | Option four-element list, max 30 |
OptionCommonModel parameter structure:
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Stock symbol |
| right | string | Yes | Call or Put (CALL/PUT) |
| expiry | long | Yes | Expiry time (milliseconds of day 0 o'clock) |
| strike | string | Yes | Strike price. Decimal places must match the option chain: US options require at least one decimal place and may require two; HK stock options use two; HK index options use none. |
Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionDepthResponsesource
Structure:
public class OptionDepthResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionDepthItem> optionDepthItems;
}Return data includes real-time quotes from 17 exchanges during market hours. If the quote is 0, it means that exchange has no quote.
Return data can be accessed through OptionDepthResponse.getOptionDepthItems() method, returning a list of OptionDepthItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionDepthItem properties are:
| Name | Type | Description |
|---|---|---|
| symbol | string | Underlying stock symbol |
| expiry | Long | Expiry time |
| strike | string | Strike price |
| right | string | PUT or CALL |
| timestamp | Long | Data timestamp |
| ask | List<OptionDepthOrderBook> | Ask order book data |
| bid | List<OptionDepthOrderBook> | Bid order book data |
OptionDepthOrderBook object structure:
| Name | Type | Description |
|---|---|---|
| price | Float | Order price |
| code | string | Option exchange code |
| timestamp | Long | Exchange time |
| volume | Integer | Order volume |
| count | Integer | Number of orders at this price level |
Specific fields can be accessed through object's get methods, such as getSymbol(), or converted to string through object's toString() method.
Numeric properties in OptionDepthItem and OptionDepthOrderBook are declared as boxed Java types; the SDK does not use those types alone to define the business nullability of each field.
Example
OptionCommonModel model = new OptionCommonModel();
model.setSymbol("AAPL");
model.setRight("PUT");
model.setStrike("210.0");
model.setExpiry("2024-06-28", TimeZoneId.NewYork);
OptionDepthQueryRequest request = OptionDepthQueryRequest.of(model).market(Market.US);
OptionDepthResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code": 0,
"data": [{
"ask": [{
"code": "CBOE",
"price": 1.19,
"volume": 10,
"timestamp": 1718654399000
},
{
"code": "BZX",
"price": 1.19,
"volume": 10,
"timestamp": 1718654399000
},
{
"code": "AMEX",
"price": 1.19,
"volume": 2,
"timestamp": 1718654400000
},
{
"code": "NSDQ",
"price": 1.19,
"volume": 2,
"timestamp": 1718654399000
},
{
"code": "BX",
"price": 1.19,
"volume": 2,
"timestamp": 1718654399000
},
{
"code": "PHLX",
"price": 1.2,
"volume": 54,
"timestamp": 1718654399000
},
{
"code": "BOX",
"price": 1.2,
"volume": 31,
"timestamp": 1718654399000
},
{
"code": "GEM",
"price": 1.2,
"volume": 24,
"timestamp": 1718654399000
},
{
"code": "MCRY",
"price": 1.2,
"volume": 24,
"timestamp": 1718654399000
},
{
"code": "MIAX",
"price": 1.2,
"volume": 24,
"timestamp": 1718654399000
},
{
"code": "EDGX",
"price": 1.2,
"volume": 23,
"timestamp": 1718654399000
},
{
"code": "EMLD",
"price": 1.2,
"volume": 18,
"timestamp": 1718654399000
},
{
"code": "ISE",
"price": 1.2,
"volume": 18,
"timestamp": 1718654399000
},
{
"code": "MPRL",
"price": 1.2,
"volume": 8,
"timestamp": 1718654399000
},
{
"code": "C2",
"price": 1.2,
"volume": 6,
"timestamp": 1718654399000
},
{
"code": "ARCA",
"price": 1.2,
"volume": 1,
"timestamp": 1718654399000
},
{
"code": "MEMX",
"price": 0.0,
"volume": 0,
"timestamp": 1718654402000
}],
"bid": [{
"code": "PHLX",
"price": 1.12,
"volume": 48,
"timestamp": 1718654399000
},
{
"code": "MIAX",
"price": 1.12,
"volume": 37,
"timestamp": 1718654399000
},
{
"code": "BX",
"price": 1.12,
"volume": 34,
"timestamp": 1718654399000
},
{
"code": "BOX",
"price": 1.12,
"volume": 32,
"timestamp": 1718654399000
},
{
"code": "CBOE",
"price": 1.12,
"volume": 29,
"timestamp": 1718654399000
},
{
"code": "MPRL",
"price": 1.12,
"volume": 22,
"timestamp": 1718654399000
},
{
"code": "GEM",
"price": 1.12,
"volume": 21,
"timestamp": 1718654399000
},
{
"code": "EDGX",
"price": 1.12,
"volume": 18,
"timestamp": 1718654399000
},
{
"code": "EMLD",
"price": 1.12,
"volume": 16,
"timestamp": 1718654399000
},
{
"code": "ISE",
"price": 1.12,
"volume": 15,
"timestamp": 1718654399000
},
{
"code": "C2",
"price": 1.12,
"volume": 10,
"timestamp": 1718654399000
},
{
"code": "BZX",
"price": 1.12,
"volume": 10,
"timestamp": 1718654399000
},
{
"code": "MCRY",
"price": 1.12,
"volume": 8,
"timestamp": 1718654399000
},
{
"code": "AMEX",
"price": 1.12,
"volume": 4,
"timestamp": 1718654400000
},
{
"code": "ARCA",
"price": 1.12,
"volume": 4,
"timestamp": 1718654399000
},
{
"code": "NSDQ",
"price": 1.12,
"volume": 4,
"timestamp": 1718654399000
},
{
"code": "MEMX",
"price": 0.0,
"volume": 0,
"timestamp": 1718654402000
}],
"expiry": 1719547200000,
"right": "PUT",
"strike": "210.0",
"timestamp": 1718654402000
}],
"message": "success",
"sign": "tlxKbPzgJBN2Q2oUz8GBwpAJ/aUFlNrM3V/uh1fTWd2r3lHfD2TvTul/i6yBtvxR+G7gwfkpE7yoVVo74JacJPOA724zLdSkkHDuC5K2Q9WzIi/C1z0vdRZYtQSPpKsIrDSGc5g9D6m1IYz7HJNSeDa4a5WwyggDetNO86M1PeE=",
"success": true,
"timestamp": 1718712279180
}Get Option Trade Ticks
Request class: OptionTradeTickQueryRequest
Description
Get option trade ticks. Only US market options are supported, with up to 30 items per batch request.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Stock symbol |
| right | string | Yes | Call or Put (call/put) |
| expiry | long | Yes | Expiry time (milliseconds of US NewYork time day 0 o'clock) |
| strike | string | Yes | Strike price. Decimal places must match the option chain: US options require at least one decimal place and may require two. |
Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionTradeTickResponsesource
Structure:
public class OptionTradeTickResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionTradeTickItem> optionTradeTickItems;
}Half an hour before market open, you can get all data from the previous trading day. After market open, it's data from the new day.
Return data can be accessed through OptionTradeTickResponse.getOptionTradeTickItems() method, returning a list of OptionTradeTickItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionTradeTickItem properties are:
| Name | Type | Description |
|---|---|---|
| symbol | string | Underlying stock symbol |
| expiry | Long | Expiry time |
| strike | string | Strike price |
| right | string | PUT or CALL |
| items | List<TradeTickPoint> | List of TradeTickPoint objects, each corresponding to one trade tick |
TradeTickPoint object structure:
| Name | Type | Description |
|---|---|---|
| price | Double | Trade price |
| time | Long | Trade time |
| volume | Long | Trade volume |
Specific fields can be accessed through object's get methods, such as getSymbol(), or converted to string through object's toString() method.
Example
List<OptionCommonModel> modelList = new ArrayList<>();
OptionCommonModel model1 = new OptionCommonModel();
model1.setSymbol("AAPL");
model1.setRight("PUT");
model1.setStrike("185.0");
model1.setExpiry("2024-03-08", TimeZoneId.NewYork);
modelList.add(model1);
OptionCommonModel model2 = new OptionCommonModel();
model2.setSymbol("AAPL");
model2.setRight("CALL");
model2.setStrike("185.0");
model2.setExpiry("2024-03-08", TimeZoneId.NewYork);
modelList.add(model2);
OptionTradeTickResponse response = client.execute(OptionTradeTickQueryRequest.of(modelList));
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code": 0,
"data": [{
"expiry": 1709874000000,
"items": [{
"price": 2.63,
"time": 1708698601086,
"volume": 4
}, {
"price": 2.62,
"time": 1708698602594,
"volume": 6
}, {
"price": 2.73,
"time": 1708698606317,
"volume": 4
}, {
"price": 2.72,
"time": 1708698607576,
"volume": 38
}, {
"price": 2.72,
"time": 1708698610488,
"volume": 7
}],
"right": "put",
"strike": "185.0",
"symbol": "AAPL"
}, {
"expiry": 1709874000000,
"items": [{
"price": 2.98,
"time": 1708698600473,
"volume": 1
}, {
"price": 2.98,
"time": 1708698601051,
"volume": 5
}, {
"price": 2.98,
"time": 1708698601051,
"volume": 23
}, {
"price": 2.98,
"time": 1708698601051,
"volume": 5
}, {
"price": 2.99,
"time": 1708698601051,
"volume": 11
}],
"right": "call",
"strike": "185.0",
"symbol": "AAPL"
}],
"message": "success",
"success": true,
"timestamp": 1708918385248
}Rate Limit
The base rate limit is 120 requests/min.
Get Option Candlestick Bars
Request class: OptionKlineQueryV2Request
Description
Get option candlestick bars (K-line data). Batch requests support a maximum of 30 items per request.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| market | Market | Yes | Market, supports US, HK |
| option_query | List<OptionKlineModel> | Yes | Option K-line query condition list, max 30 |
OptionKlineModel parameter structure:
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Stock symbol |
| right | string | Yes | Call or Put (CALL/PUT) |
| expiry | long | Yes | Expiration time |
| strike | string | Yes | Strike price. Decimal places must match the option chain: US options require at least one decimal place and may require two; HK stock options use two; HK index options use none. |
| begin_time | long | Yes | Start time |
| end_time | long | Yes | End time |
| period | string | No | K-line type, values: (day: daily K, 1min: 1 minute, 5min: 5 minutes, 30min: 30 minutes, 60min: 60 minutes) |
| limit | int | No | Number of recent records returned for minute data, default 300, max 1200. If limit is set greater than 1200, only 1200 records will be returned. Daily K-line does not support this |
| sort_dir | string | No | Sort direction, includes: ascending, descending. Sort direction enum: Sort Direction |
Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionKlineResponsesource
Structure:
public class OptionKlineResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionKlineItem> klineItems;
}Access the response through OptionKlineResponse.getKlineItems(), which returns OptionKlineItem objects with the following fields:
| Name | Type | Description |
|---|---|---|
| symbol | string | Stock symbol |
| period | string | Period type |
| right | string | Call or Put, values CALL/PUT |
| strike | string | Strike price |
| expiry | Long | Expiration time in milliseconds |
| items | List<OptionKlinePoint> | Candlestick bars represented by OptionKlinePoint objects. See the fields below. |
OptionKlinePoint bar fields:
| Name | Type | Description |
|---|---|---|
| high | Double | Highest price |
| low | Double | Lowest price |
| open | Double | Opening price |
| close | Double | Closing price |
| time | Long | K-line time in milliseconds |
| volume | Long | Volume |
| amount | Double | Turnover |
| turnoverRate | Double | Turnover rate |
| ttmPe | Double | Trailing P/E |
| lyrPe | Double | Last-year P/E |
| openInterest | Integer | Open interest (only available for daily K-line); may be null |
Types in the table follow the Java SDK property declarations. Double, Long, and Integer are boxed types, but the SDK does not use those types alone to define business nullability for every response field. Confirmed applicability conditions are documented separately in the table.
Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.
Example
OptionKlineModel model = new OptionKlineModel();
model.setSymbol("AAPL");
model.setRight("CALL");
model.setStrike("170.0");
model.setExpiry("2024-06-28", TimeZoneId.NewYork);
model.setBeginTime("2024-06-26", TimeZoneId.NewYork);
model.setEndTime("2024-06-26 12:59:59", TimeZoneId.NewYork);
model.setPeriod(OptionKType.min1.getValue());
model.setLimit(10);
model.setSortDir(SortDir.SortDir_Descend);
OptionKlineQueryV2Request request = OptionKlineQueryV2Request.of(model).market(Market.US);
OptionKlineResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code": 0,
"data": [
{
"expiry": 1719547200000,
"items": [
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719419340000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719419280000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719419220000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719419160000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719419100000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719419040000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719418980000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719418920000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719418860000,
"volume": 0
},
{
"close": 43.13,
"high": 43.13,
"low": 43.13,
"open": 43.13,
"time": 1719418800000,
"volume": 0
}
],
"period": "1min",
"right": "CALL",
"strike": "170.0",
"symbol": "AAPL"
}
],
"message": "success",
"sign": "Hpb51+k2OzC8HmcstBV+bCLTbpflPKpR/AxXwCLd9nhhzuiZquPNGbNOhLYzzihJzRrmfCPWQeXM4ldMGLtbXUluLW79vcKBHdoPghENu+68Zod9dqzsH/InAXt444HOSsRXiubITZ+d9OWil+gvitjn9w7x4kn916KlT6R7hYg=",
"success": true,
"timestamp": 1719419362447
}Rate Limit
The base rate limit is 60 requests/min.
Get Option Intraday Data
Request class: OptionTimelineRequest
Description
Get option timeline data.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| optionTimelineModels | List<OptionTimelineModel> | Yes | Option list |
| market | Market | No | Market, supports HK and US; default HK |
OptionTimelineModel parameter structure:
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Stock symbol |
| right | string | Yes | Call or Put (CALL/PUT) |
| expiry | long | Yes | Expiration time |
| strike | string | Yes | Strike price. Decimal places must match the option chain: HK stock options use two; HK index options use none. |
| beginTime | Long | No | Timeline start time as a Unix timestamp in milliseconds |
Response
| Field | Type | Description |
|---|---|---|
| symbol | string | Stock symbol |
| right | string | Call or Put (CALL/PUT) |
| expiry | Long | Expiration time |
| strike | string | Strike price |
| preClose | Double | Previous day's close |
| openAndCloseTimeList | List<List<Long>> | Trading time period list |
| minutes | List<OptionTimelinePoint> | Timeline array, see field descriptions below |
Timeline data OptionTimelinePoint structure:
| Field | Type | Description |
|---|---|---|
| volume | Long | Volume |
| avgPrice | Double | Average trade price |
| price | Double | Latest price |
| time | Long | Current timeline time |
Example
OptionTimelineModel model1 = new OptionTimelineModel();
model1.setSymbol("ALB.HK");
model1.setExpiry(1753878054000L);
model1.setStrike("117.50");
model1.setRight("CALL");
OptionTimelineModel model2 = new OptionTimelineModel();
model2.setSymbol("LNI.HK");
model2.setExpiry(1753878054000L);
model2.setStrike("17.00");
model2.setRight("PUT");
OptionTimelineRequest request = OptionTimelineRequest.of(model1, model2);
OptionTimelineResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code" : 0,
"message" : "success",
"timestamp" : 1750822293909,
"sign" : "rEiaFf1LYv32Kbu8C+AKpJ/Y9pjrux8usbFA3FFJUEP28EXHv+PnKX9RBtVLalkyrULNqDqS29zP9hF1OZAng7U9KWFQ1Gy/FcGdbypXRNeJxPgKefHt/Fe4rLweO/eWKE41ZprPZlUZX0fxfeMwqkwcTMfhpuu+HQ2/ocmMgeg=",
"timelineItems" : [ {
"lang" : null,
"symbol" : "ALB.HK",
"expiry" : 1753878054000,
"right" : "CALL",
"strike" : "117.50",
"preClose" : 2.72,
"openAndCloseTimeList" : null,
"minutes" : [{
"price" : 3.4,
"avgPrice" : 3.5235946,
"time" : 1750822140000,
"volume" : 29
}, {
"price" : 3.4,
"avgPrice" : 3.5235946,
"time" : 1750822200000,
"volume" : 0
}, {
"price" : 3.4,
"avgPrice" : 3.5235946,
"time" : 1750822260000,
"volume" : 0
} ],
"account" : null
}, {
"lang" : null,
"symbol" : "LNI.HK",
"expiry" : 1753878054000,
"right" : "PUT",
"strike" : "17.00",
"preClose" : 1.28,
"openAndCloseTimeList" : null,
"minutes" : [ {
"price" : 1.21,
"avgPrice" : 1.21,
"time" : 1750822140000,
"volume" : 0
}, {
"price" : 1.21,
"avgPrice" : 1.21,
"time" : 1750822200000,
"volume" : 0
}, {
"price" : 1.21,
"avgPrice" : 1.21,
"time" : 1750822260000,
"volume" : 0
} ],
"account" : null
} ],
"success" : true
}Get Hong Kong Option Symbol
Request class: OptionSymbolRequest
Description
Get Hong Kong stock option symbols, for example, the symbol for 00700 is TCH.HK.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| market | Market | Yes | Market, only supports HK |
| lang | string | No | Language support: en_US, zh_CN, zh_TW, default: en_US |
Response
com.tigerbrokers.stock.openapi.client.https.response.option.OptionSymbolResponsesource
Structure:
public class OptionSymbolResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionSymbolItem> symbolItems;
}Returns a collection of all option symbol codes and underlying asset symbols for the Hong Kong market.
Return data can be accessed through the OptionSymbolResponse.getSymbolItems() method, returning a list of OptionSymbolItem objects, where com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionSymbolItem properties are:
| Name | Type | Description |
|---|---|---|
| symbol | string | Symbol of the option four elements |
| name | string | Underlying name |
| underlyingSymbol | string | Underlying asset symbol code |
Specific fields can be accessed through the object's get methods, such as getSymbol(), or converted to string through the object's toString() method.
Example
OptionSymbolRequest request = OptionSymbolRequest.newRequest(Market.HK, Language.en_US);
OptionSymbolResponse response = client.execute(request);
if (response.isSuccess()) {
System.out.println(JSONObject.toJSONString(response));
} else {
System.out.println("response error:" + response.getMessage());
}Example Response
{
"code": 0,
"data": [
{
"name": "ALC",
"symbol": "ALC.HK",
"underlyingSymbol": "02600"
},
{
"name": "CRG",
"symbol": "CRG.HK",
"underlyingSymbol": "00390"
},
{
"name": "PAI",
"symbol": "PAI.HK",
"underlyingSymbol": "02318"
},
{
"name": "XCC",
"symbol": "XCC.HK",
"underlyingSymbol": "00939"
},
{
"name": "AMC",
"symbol": "AMC.HK",
"underlyingSymbol": "03188"
}
],
"message": "success",
"sign": "NRvOxhF7cpEM9PS+Hofd6/BduEddep0sUlnYq9o9fPUwcZmAj3spI/D2wXu8L/eZSxvWhSfjnB3BL8y7mrpvqY3m9BGeZhf24ZoA0lbY8YXyQ5JjXa0VHWieUmCItoR9E195Nsr2sWCoawJhz7+yaMFioWEe8VThtGrYMiTYnUE=",
"success": true,
"timestamp": 1719401951582
}Get Option Analysis Data
Request class: OptionAnalysisRequest
Description
Query option analysis data.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbols | List<OptionAnalysisModel> | Yes | List of option analysis query items, maximum 10 |
| market | Market | No | Market, supports US and HK; default US |
Single parameter (OptionAnalysisModel)
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Underlying code (e.g., AAPL) |
| period | String / OptionAnalysisPeriod | No | Analysis period. Valid values: 3year, 52week, 26week, and 13week; defaults to 52week when omitted |
| requireVolatilityList | Boolean | No | Whether to request volatilityList; only true requests the list, while omission or false does not |
Return
OptionAnalysisResponse
As follow:
public class OptionAnalysisResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionAnalysisItem> optionAnalysisItems;
}
public class OptionAnalysisItem extends ApiModel {
private String symbol;
private Double impliedVol30Days;
private Double hisVolatility;
private Double ivHisVRatio;
private Double callPutRatio;
private ImpliedVolMetric impliedVolMetric;
private List<VolatilityItem> volatilityList;
}
public class ImpliedVolMetric implements Serializable {
private String period;
private Double percentile;
private Double rank;
}
public class VolatilityItem implements Serializable {
private Double impliedVol;
private Double percentile;
private Double rank;
private Double hisVolatility;
private Long timestamp;
}| Name | Type | Description |
|---|---|---|
| impliedVol30Days | double | The underlying asset's 30-day implied-volatility metric. |
| hisVolatility | double | The underlying asset's historical-volatility metric. |
| ivHisVRatio | double | Analysis ratio of implied volatility to historical volatility. |
| callPutRatio | double | Call-to-put analysis ratio. |
| percentile | double | Implied-volatility percentile for the selected analysis period. |
| rank | double | Implied-volatility rank for the selected analysis period. |
VolatilityItem fields (returned when requireVolatilityList=true):
| Name | Type | Description |
|---|---|---|
| impliedVol | Double | Implied volatility |
| percentile | Double | IV percentile |
| rank | Double | IV rank |
| hisVolatility | Double | Historical volatility |
| timestamp | Long | Timestamp in milliseconds |
Example
List<OptionAnalysisModel> items = new ArrayList<>();
items.add(new OptionAnalysisModel("AAPL", OptionAnalysisPeriod.FIFTY_TWO_WEEK));
items.add(new OptionAnalysisModel("TSLA", OptionAnalysisPeriod.FIFTY_TWO_WEEK));
OptionAnalysisRequest request = OptionAnalysisRequest.newRequest(items, Market.US);
OptionAnalysisResponse response =
client.execute(request);
// Return volatility time-series data.
OptionAnalysisRequest requestWithVolList =
OptionAnalysisRequest.of("AAPL", OptionAnalysisPeriod.FIFTY_TWO_WEEK, true, Market.US);
OptionAnalysisResponse responseWithVolList =
client.execute(requestWithVolList);Example Response
{
"code": 0,
"message": "success",
"timestamp": 1719401951582,
"data": [
{
"callPutRatio": 0.6,
"hisVolatility": 0.1967,
"impliedVol30Days": 0.3071,
"impliedVolMetric": {
"percentile": 0.527363184079602,
"period": "52week",
"rank": 0.18213875790384876
},
"ivHisVRatio": 1.5617,
"symbol": "AAPL"
},
{
"callPutRatio": 0,
"hisVolatility": 0.3603,
"impliedVol30Days": 0.5162,
"impliedVolMetric": {
"percentile": 0.08,
"period": "52week",
"rank": 0.04194153521422974
},
"ivHisVRatio": 1.4328,
"symbol": "TSLA"
}
]
}When requireVolatilityList=true, the response also contains:
{
"code": 0,
"message": "success",
"timestamp": 1719401951582,
"data": [
{
"callPutRatio": 0.6,
"hisVolatility": 0.1967,
"impliedVol30Days": 0.3071,
"impliedVolMetric": {
"percentile": 0.527,
"period": "52week",
"rank": 0.182
},
"ivHisVRatio": 1.5617,
"symbol": "AAPL",
"volatilityList": [
{"impliedVol": 0.3012, "percentile": 0.512, "rank": 0.175, "hisVolatility": 0.1923, "timestamp": 1709856000000},
{"impliedVol": 0.2985, "percentile": 0.498, "rank": 0.168, "hisVolatility": 0.1901, "timestamp": 1709769600000}
]
}
]
}Rate Limit
The base rate limit is 60 requests/min.
Option Indicator Calculation
Description
Calculate various indicators for selected options.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| client | object | Yes | SDK HTTP client |
| symbol | string | Yes | Stock symbol |
| right | string | Yes | Call or Put option (CALL/PUT) |
| strike | string | Yes | Strike price |
| expiry | String | Yes | Expiration date in yyyy-MM-dd format |
| underlyingSymbol | string | No | Underlying asset symbol, defaults to symbol value |
Response
| Name | Type | Description |
|---|---|---|
| delta | double | Sensitivity of theoretical option value to changes in the underlying price |
| gamma | double | Sensitivity of delta to changes in the underlying price |
| theta | double | Sensitivity of theoretical option value to the passage of time |
| vega | double | Sensitivity of theoretical option value to changes in implied volatility |
| rho | double | Sensitivity of theoretical option value to changes in the risk-free rate |
| predictedValue | double | Predicted option value. getOptionFundamentals does not set this field, so it remains at Java's default value of 0; it is meaningful only for the calcOptionIndex overloads |
| insideValue | double | Intrinsic value |
| timeValue | double | Time value |
| leverage | double | Leverage ratio |
| openInterest | double | Open interest |
| historyVolatility | double | Historical volatility, percentage value |
| premiumRate | double | Premium rate, percentage value |
| profitRate | double | Profit rate from buying, percentage value |
| volatility | double | Implied volatility, percentage value |
| metricParam | String | Calculation-input summary for validation and debugging |
Example
OptionFundamentals optionFundamentals = OptionCalcUtils.getOptionFundamentals(client,"BABA", "CALL", "205.0", "2019-11-01");
System.out.println(JSONObject.toJSONString(optionFundamentals));Example Response
{
"delta": 0.8573062699731591,
"gamma": 0.05151538284065261,
"historyVolatility": 24.38, // Percentage format, represents 24.38%
"insideValue": 4.550000000000011,
"leverage": 30.695960907449216,
"openInterest": 35417.0,
"premiumRate": 0.18619306788885054, // Percentage format, represents 0.186%
"profitRate": 47.138051059662665, // Percentage format, represents 47.138%
"rho": 1.1107261502375654,
"theta": -0.17927469728943862,
"timeValue": 0.32499999999998863,
"vega": 0.034473845504081974,
"volatility": 28.62548828125 // Percentage format, represents 28.62%
}Updated about 1 month ago
