Option Chain¶
option_chain() returns the option chain for an underlying instrument. The response includes strike-level calls and puts together with OI, volume, Greeks, top-level price data, and available expiries.
Option-chain snapshot requests support underlyings from NSE, BSE, and MCX where option-chain data is available. Always pass the exchange explicitly so the request is evaluated against the intended exchange. If omitted, the backend currently defaults to NSE.
When To Use This Page¶
Use this page when you need to:
- inspect strikes around the current underlying price
- read OI, IV, Greeks, and volume by strike
- find the at-the-money strike
- work with expiry-aware option analytics
LLM guidance
Use option_chain() for strike-level option analytics and discovery. If you only need one option instrument quote, resolve the instrument and use Market Quotes or Current Price as appropriate.
Basic Usage¶
from nubra_python_sdk.marketdata.market_data import MarketData
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
nubra = InitNubraSdk(NubraEnv.PROD, env_creds=True)
market_data = MarketData(nubra)
result = market_data.option_chain("NIFTY", exchange="NSE")
print(result)
from nubra_python_sdk.marketdata.market_data import MarketData
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
nubra = InitNubraSdk(NubraEnv.PROD, env_creds=True)
market_data = MarketData(nubra)
result = market_data.option_chain("SENSEX", exchange="BSE")
print(result)
from nubra_python_sdk.marketdata.market_data import MarketData
from nubra_python_sdk.start_sdk import InitNubraSdk, NubraEnv
nubra = InitNubraSdk(NubraEnv.PROD, env_creds=True)
market_data = MarketData(nubra)
result = market_data.option_chain("CRUDEOIL", exchange="MCX")
print(result)
Accessing Response Fields¶
chain = result.chain
print(f"Current Price: {chain.current_price}")
print(f"ATM Strike: {chain.at_the_money_strike}")
print(f"Available Expiries: {chain.all_expiries}")
atm_ce = next((opt for opt in chain.ce if opt.strike_price == chain.at_the_money_strike), None)
atm_pe = next((opt for opt in chain.pe if opt.strike_price == chain.at_the_money_strike), None)
if atm_ce:
print(atm_ce.ref_id, atm_ce.last_traded_price, atm_ce.open_interest, atm_ce.iv)
if atm_pe:
print(atm_pe.ref_id, atm_pe.last_traded_price, atm_pe.open_interest, atm_pe.iv)
Request Contract¶
| Parameter | Type | Required | Example | Meaning |
|---|---|---|---|---|
instrument |
str |
yes | NIFTY |
underlying instrument symbol |
expiry |
str |
no | 20250508 |
expiry in YYYYMMDD format |
exchange |
str |
yes | NSE, BSE, MCX |
exchange to query; pass explicitly for the intended exchange |
Response Shape¶
Response Shape
class OptionChainWrapper:
chain: OptionChain
message: str
exchange: str | None
class OptionChain:
asset: str
expiry: str | None
ce: list[OptionData]
pe: list[OptionData]
at_the_money_strike: int | None
current_price: int | None
all_expiries: list[str]
class OptionData:
ref_id: int
timestamp: int
strike_price: int
lot_size: int
last_traded_price: int
last_traded_price_change: float
iv: float
delta: float
gamma: float
theta: float
vega: float
open_interest: int
open_interest_change: float
volume: int
Response Contract¶
| Field | Type | Nullable | Meaning |
|---|---|---|---|
chain |
OptionChain |
no | option-chain payload |
message |
str |
no | response label |
exchange |
str |
yes | exchange name |
chain.asset |
str |
no | underlying asset symbol |
chain.expiry |
str |
yes | selected expiry |
chain.ce |
list[OptionData] |
yes | call-side chain |
chain.pe |
list[OptionData] |
yes | put-side chain |
chain.at_the_money_strike |
int |
yes | ATM strike |
chain.current_price |
int |
yes | underlying current price |
chain.all_expiries |
list[str] |
yes | available expiries |
Implementation Notes¶
instrumentrefers to the underlying, not the option symbol itself.- When deriving the underlying from
get_instruments_dataframe(), use theassetcolumn. - Use
all_expiriesto discover available expiries before choosing one explicitly. - The
ceandpearrays expose strike-level call and put data separately. ref_idvalues inside the option chain can be used in downstream quote or trading workflows after environment-appropriate resolution.
Important Rules
- Use the underlying symbol, not an option trading symbol, when calling
option_chain(). - Always pass
exchangeexplicitly asExchangeEnum.NSE,ExchangeEnum.BSE, orExchangeEnum.MCX. If it is omitted, the backend currently defaults toNSE, which can cause an exchange-specific instrument lookup to fail. - Option-chain snapshots support eligible option underlyings from
NSE,BSE, andMCX. - Expiry availability can vary, so do not assume a hardcoded expiry will always be present.
- Use Get Instruments to retrieve the latest instrument expiries before selecting an expiry for option-chain or option-contract workflows.
ref_idvalues are environment-specific. Do not reuse UAT identifiers in PROD or vice versa.- Strike and price fields are returned in exchange-native integer units such as paise for NSE instruments unless your application converts them.
- This is a snapshot response, not a realtime streaming feed.
- Use option-chain data for strike discovery and analytics, then pass the selected option
ref_idinto downstream quote or trading flows as needed.
What To Read Next¶
The most common next pages are: