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.
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 |
|---|---|---|---|
| implied_volatility | double | No | Implied volatility |
| in_the_money | boolean | No | Whether the option is in the money |
| open_interest | int | No | Open interest |
| delta | double | No | Deprecated. Daily-updated Delta filter; not suitable for intraday use |
| gamma | double | No | Deprecated. Daily-updated Gamma filter; not suitable for intraday use |
| theta | double | No | Deprecated. Daily-updated Theta filter; not suitable for intraday use |
| vega | double | No | Deprecated. Daily-updated Vega filter; not suitable for intraday use |
| rho | double | No | Deprecated. Daily-updated Rho filter; not suitable for intraday use |
Deprecated daily-updated Greek values are not returned by default. Do not enable them 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 | double | Strike price |
| right | string | Option right, PUT/CALL |
| askPrice | double | Ask price |
| askSize | int | Ask size |
| bidPrice | double | Bid price |
| bidSize | int | Bid size |
| lastTimestamp | long | Last trade timestamp, e.g.: 1543343800698 |
| latestPrice | double | Latest price |
| multiplier | double | Multiplier, US options default 100 |
| openInterest | int | Open interest |
| preClose | double | Previous trading day's closing price |
| volume | long | 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
}Get Option Real-time Quotes
Request class: OptionBriefQueryV2Request
Description
Gets real-time option quotes. Corresponding market data permissions must be purchased 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.request.option.OptionBriefResponsesource
Structure:
public class OptionBriefResponse extends TigerResponse {
@JSONField(name = "data")
private List<OptionBriefItem> optionBriefItems;
}The returned data can be accessed through the TigerResponse.getOptionBriefItems() method, which returns OptionBriefItem objects. The com.tigerbrokers.stock.openapi.client.https.domain.option.item.OptionBriefItem properties are as follows:
| Field | Type | Description |
|---|---|---|
| symbol | string | Stock symbol |
| strike | string | Strike price |
| bidPrice | double | Bid price |
| bidSize | int | Bid size |
| askPrice | double | Ask price |
| askSize | int | Ask size |
| latestPrice | double | Latest price |
| timestamp | long | Latest trade time |
| volume | int | Volume |
| high | double | High price |
| low | double | Low price |
| open | double | Open price |
| preClose | double | Previous trading day's closing price |
| openInterest | int | Open interest |
| change | double | Price change |
| multiplier | int | 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.
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
}Get Option Depth Quotes
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 | double | Order price |
| code | string | Option exchange code |
| timestamp | long | Exchange time |
| volume | int | Order volume |
Specific fields can be accessed through object's get methods, such as getSymbol(), or converted to string through object's toString() method.
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 Tick-by-Tick Trade Data
Request class: OptionTradeTickQueryRequest
Description
Get option trade tick data, only supports US market options, batch requests support up to 30 items at once.
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 single trade tick data |
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
}Get Option K-line Data
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.domain.option.item.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 |
| volume | int | Volume |
| openInterest | int | Open interest (only available for daily K-line) |
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
}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, default HK, only supports 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. |
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, default is US |
Single parameter (OptionAnalysisModel)
| Parameter | Type | Required | Description |
|---|---|---|---|
| symbol | string | Yes | Underlying code (e.g., AAPL) |
| period | string | Yes | Period (e.g., 52week, or OptionAnalysisPeriod) |
| requireVolatilityList | Boolean | No | Whether to return historical and implied volatility time-series data |
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 implied volatility of the underlying asset. The value obtained by comprehensively weighted calculation of the implied volatility of some options in the option chain is the IV of the underlying asset. It reflects the overall fluctuation of the option chain in the next 30 days, and this data also has reference value for the underlying stock. |
| hisVolatility | double | Historical volatility of the underlying asset. It reflects the actual fluctuation of the underlying asset over the past 30 days and is used to measure the extent to which the underlying asset deviates from its average price. |
| ivHisVRatio | double | Implied Volatility/Historical Volatility Ratio |
| callPutRatio | double | Call/Put Ratio |
| percentile | double | Implied Volatility Percentile. IV Percentile is also a relative indicator that counts how many days in the past year had an implied volatility lower than the current one. The calculation formula is: IV Percentile = Number of days in a year with IV lower than the current IV / Number of trading days The value range of IV Percentile fluctuates between 0% and 100%; when IV Percentile is 0%, it means that 0% of the trading days in the past year had an IV lower than the current IV; when IV Percentile is 100%, it means that 100% of the trading days in the past year had an IV lower than the current IV. |
| rank | double | Implied Volatility Rank. IV Rank is a relative indicator that calculates the current relative position of IV based on the highest and lowest IV values of the underlying asset in the past year. The calculation formula is: IV Rank = (Current IV - Lowest IV in 1 year) / (Highest IV in 1 year - Lowest IV in 1 year) The value range of IV Rank fluctuates between 0 and 1; when IV Rank is 0, it means the current IV is in the lower range within the past year; when IV Rank is 1, it means the current IV is in the higher range within the past year |
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
[
{
"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:
[
{
"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}
]
}
]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 | long | Yes | Expiry time (milliseconds corresponding to 0:00 AM New York time) |
| underlyingSymbol | string | No | Underlying asset symbol, defaults to symbol value |
Response
| Name | Type | Description |
|---|---|---|
| delta | double | Greek letter delta |
| gamma | double | Greek letter gamma |
| theta | double | Greek letter theta |
| vega | double | Greek letter vega |
| insideValue | double | Intrinsic value |
| timeValue | double | Time value |
| leverage | double | Leverage ratio |
| openInterest | int | 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 |
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 2 days ago
