Getting List of All FNO Stocks Using Python Zerodha API

Amit Kumar Ghosh
2 min readSep 25, 2023

--

Although We can use the oneliner fnolist() function from NSEPython API, Lets use Zerodha API to get list of all FNO stocks as a diversification. In case You want to see fnolist() function –

Check it out here

Downloading Entire Instruments List

First, let’s download the entire instrument list from Zerodha and save it as a portable database. We will use the pandas library for this task, making data manipulation seamless. The instrument list is available at https://api.kite.trade/instruments in CSV format. So, let’s declare a variable named “instrumentList” to harness the power of pandas in managing this crucial trading data.

import pandas as pd

instrumentList = pd.read_csv("https://api.kite.trade/instruments")
print(instrumentList)

The output will be –

Triggered at	Count	Stocks (new stocks are highlighted)	Trigger Date	Trigger Time
0 Fri Apr 21 2023, 10:07 am 1 APOLLOTYRE 2023-04-21 10:07:00
1 Fri Apr 21 2023, 9:58 am 1 ASIANPAINT 2023-04-21 09:58:00
2 Thu Apr 20 2023, 3:21 pm 1 TATACONSUM 2023-04-20 15:21:00
3 Thu Apr 20 2023, 2:16 pm 1 BAJAJ-AUTO 2023-04-20 14:16:00
4 Thu Apr 20 2023, 12:49 pm 1 CUB 2023-04-20 12:49:00
... ... ... ... ... ...
775 Tue Sep 13 2022, 10:03 am 3 DIXON 2022-09-13 10:03:00
776 Tue Sep 13 2022, 10:03 am 3 DRREDDY 2022-09-13 10:03:00
777 Tue Sep 13 2022, 10:03 am 3 HEROMOTOCO 2022-09-13 10:03:00
778 Tue Sep 13 2022, 10:01 am 2 DRREDDY 2022-09-13 10:01:00
779 Tue Sep 13 2022, 10:01 am 2 HEROMOTOCO 2022-09-13 10:01:00
780 rows × 5 columns

Filtering F&O Stocks

fno_stocks = list(set(instrumentList[instrumentList['segment'] == 'NFO-FUT']["name"].to_list()))
  • instrumentList[instrumentList['segment'] == 'NFO-FUT'] filters the DataFrame to only include rows where the ‘segment’ column has the value ‘NFO-FUT’. This filtering step narrows down the DataFrame to F&O stocks in the NSE F&O Futures segment.
  • .to_list() converts the filtered DataFrame column into a Python list.
  • list(set(...)) is used to remove any duplicate entries and ensure that each stock name appears only once in the list. The result is assigned to the variable fno_stocks.

Building the Symbol List

symbol_list = list(set(instrumentList[instrumentList['segment'] == 'NFO-FUT']["tradingsymbol"].to_list()))
symbol_list
  • This code initializes an empty list called symbol_list.
  • It then iterates through each stock name in fno_stocks. Zerodha follows a certain nomenclauture, so it is adhering to it. Now one can write the same above code in single line too!
symbol_list = ['NSE:' + {'NIFTY': 'NIFTY 50', 'BANKNIFTY': 'NIFTY BANK', 'FINNIFTY': 'NIFTY FIN SERVICE'}.get(stocks.upper(), stocks.upper()) for stocks in fno_stocks]

A Note from Unofficed

Thank you for being a valued member of our community! Before you depart:

👏 Applaud the story and give a follow to the author 👉

📰 Explore additional content on the Unofficed

📚 Join our FREE Masterclass

📈 Unlock potent trading tools

--

--

Amit Kumar Ghosh
Amit Kumar Ghosh

Written by Amit Kumar Ghosh

Aloha, I’m Amit Ghosh, a web entrepreneur and avid blogger. Bitten by entrepreneurial bug, I got kicked out from college and ended up being millionaire!

No responses yet