Phython Code to fetch OI data for FnO

Home » News » Phython Code to fetch OI data for FnO


Output Files
1) combined_ce_and_pe_open_int.csv
2) combined_future_open_int.csv
3) price_change.csv

Libraries
import requests, zipfile, StringIO
import sys
import argparse
import os
import convertCSVToXLSX as csvtoxlsx

Variables to declare
month_dict = {
“01”: “JAN”,
“02”: “FEB”,
“03”: “MAR”,
“04”: “APR”,
“05”: “MAY”,
“06”: “JUN”,
“07”: “JUL”,
“08”: “AUG”,
“09”: “SEP”,
“10”: “OCT”,
“11”: “NOV”,
“12”: “DEC”
}
future_index_stock = [
‘FUTIDX',
‘FUTSTK',
] instrument = ‘OPTSTK'

Download Bhavcopy from NSE website
def download_bhavcopy(formated_date):
url = “https://www1.nseindia.com/content/historical/DERIVATIVES/{0}/{1}/fo{2}{1}{0}bhav.csv.zip”.format(
formated_date.split(‘-‘)[2],
month_dict[formated_date.split(‘-‘)[1]],
formated_date.split(‘-‘)[0])
r = requests.get(url, stream=True)
if r.status_code == 404:
print “No data found for date {0}”.format(formated_date)
return
z = zipfile.ZipFile(StringIO.StringIO(r.content))
z.extractall()
file_name = z.filelist[0].filename
# print file_name
return file_name

Parse arguments to be passed from command prompt or in eclipse argument
configuration
def get_args():
parser = argparse.ArgumentParser()
parser.add_argument(“-c”, “–compare”, help = “This compare the data”, dest = “hostname”, required = True)

Get OI change
def get_option_oi_change(current_date_file, previous_date_file):
filtered_current_date_file = {}
filtered_privious_date_file = {}
if not current_date_file or not os.path.isfile(current_date_file):
return
if not previous_date_file or not os.path.isfile(previous_date_file):
return
with open(current_date_file, ‘r') as f:
for line in f:
if line.split(‘,')[0] == instrument:
symbol = line.split(‘,')[1] OPTION_TYP = line.split(‘,')[4] open_int = line.split(‘,')[12] if symbol in filtered_current_date_file:
filtered_current_date_file[symbol].append(
“{},{},{}”.format(symbol, open_int, OPTION_TYP))
else:
filtered_current_date_file[symbol] = [“{},{},{}”.format(symbol, open_int, OPTION_TYP)] with open(previous_date_file, ‘r') as f:
for line in f:
if line.split(‘,')[0] == instrument:
symbol = line.split(‘,')[1] OPTION_TYP = line.split(‘,')[4] open_int = line.split(‘,')[12] if symbol in filtered_privious_date_file:
filtered_privious_date_file[symbol].append(
“{},{},{}”.format(symbol, open_int, OPTION_TYP))
else:
filtered_privious_date_file[symbol] = [“{},{},{}”.format(symbol, open_int, OPTION_TYP)] # print filtered_privious_date_file
with open(‘combined_ce_and_pe_open_int.csv', ‘a') as f:
s1 = “{},{},{},{},{},{},{}”.format(“symbol”.upper(),
“ce_privious”.upper(),
“ce_current”.upper(),
“ce_percentage_change”.upper(),
“pe_privious”.upper(),
“pe_current”.upper(),
“pe_percentage_change”.upper(),
f.write(s1+”n”)
for symbol, list_of_line in filtered_privious_date_file.items():
combined_ce_privious_open_int = 0
for v in list_of_line:
if ‘CE' == v.split(‘,')[2]:
if ‘.' in v.split(‘,')[1]:
privious_ce_open_int = float(v.split(‘,')[1])
else:
try:
privious_ce_open_int = int(v.split(‘,')[1])
except ValueError:
print v.split(‘,')[1] privious_ce_open_int = 0
combined_ce_privious_open_int = combined_ce_privious_open_int + privious_ce_open_int
# print combined_ce_privious_open_int
combined_pe_privious_open_int = 0
for v in list_of_line:
if ‘PE' == v.split(‘,')[2]:
if ‘.' in v.split(‘,')[1]:
privious_pe_open_int = float(v.split(‘,')[1])
else:
try:
privious_pe_open_int = int(v.split(‘,')[1])
except ValueError:
print v.split(‘,')[1] privious_pe_open_int = 0
combined_pe_privious_open_int = combined_pe_privious_open_int + privious_pe_open_int
combined_ce_current_open_int = 0
for v in filtered_current_date_file[symbol]:
if ‘CE' == v.split(‘,')[2]:
if ‘.' in v.split(‘,')[1]:
current_pe_open_int = float(v.split(‘,')[1])
else:
try:
current_pe_open_int = int(v.split(‘,')[1])
except ValueError:
print v.split(‘,')[1] current_pe_open_int = 0
combined_ce_current_open_int = combined_ce_current_open_int + current_pe_open_int
combined_pe_current_open_int = 0
for v in filtered_current_date_file[symbol]:
if ‘PE' == v.split(‘,')[2]:
if ‘.' in v.split(‘,')[1]:
current_pe_open_int = float(v.split(‘,')[1])
else:
try:
current_pe_open_int = int(v.split(‘,')[1])
except ValueError:
print v.split(‘,')[1] current_pe_open_int = 0
combined_pe_current_open_int = combined_pe_current_open_int + current_pe_open_int
try:
combined_pe_current_open_int_percentage_change =
((combined_ce_current_open_int/(combined_ce_privious_open_int*1.0) – 1)*100)
except (ZeroDivisionError):
combined_pe_current_open_int_percentage_change = “NA”
try:
combined_ce_current_open_int_percentage_change =
((combined_pe_current_open_int/(combined_pe_privious_open_int*1.0) – 1)*100)
except (ZeroDivisionError):
combined_ce_current_open_int_percentage_change = “NA”
# with open(‘combined_ce_open_int.csv', ‘a') as f:
# s1 = “{},{},{},{}”.format(symbol, combined_ce_privious_open_int, combined_ce_current_open_int,
combined_pe_current_open_int_percentage_change)
# f.write(s+”n”)
with open(‘combined_ce_and_pe_open_int.csv', ‘a') as f:
s1 = “{},{},{},{},{},{},{}”.format(symbol,
combined_ce_privious_open_int,
combined_ce_current_open_int,
combined_pe_current_open_int_percentage_change,
combined_pe_privious_open_int,
combined_pe_current_open_int,
combined_ce_current_open_int_percentage_change)
f.write(s1+”n”)

Get Futures OI
def get_future_oi_change(current_date_file, previous_date_file):
filtered_current_date_file = {}
filtered_privious_date_file = {}
with open(‘combined_future_open_int.csv', ‘a') as f:
l = “{},{},{},{}”.format(“symbol”.upper(), “combined_privious_open_int”.upper(),
“combined_current_open_int”.upper(), “combined_open_int_percentage_change”.upper())
f.write(l+”n”)
if not current_date_file or not os.path.isfile(current_date_file):
return
if not previous_date_file or not os.path.isfile(previous_date_file):
return
with open(current_date_file, ‘r') as f:
for line in f:
if line.split(‘,')[0] in future_index_stock:
symbol = line.split(‘,')[1] open_int = line.split(‘,')[12] close = line.split(‘,')[8] expiry_date = line.split(‘,')[2] if symbol in filtered_current_date_file:
filtered_current_date_file[symbol].append(
“{},{},{},{}”.format(symbol, open_int, close, expiry_date))
else:
filtered_current_date_file[symbol] = [“{},{},{},{}”.format(symbol, open_int, close, expiry_date)] with open(previous_date_file, ‘r') as f:
for line in f:
if line.split(‘,')[0] in future_index_stock:
symbol = line.split(‘,')[1] open_int = line.split(‘,')[12] close = line.split(‘,')[8] expiry_date = line.split(‘,')[2] if symbol in filtered_privious_date_file:
filtered_privious_date_file[symbol].append(
“{},{},{},{}”.format(symbol, open_int, close, expiry_date))
else:
filtered_privious_date_file[symbol] = [“{},{},{},{}”.format(symbol, open_int, close, expiry_date)] for symbol, list_of_line in filtered_privious_date_file.items():
combined_privious_open_int = 0
for v in list_of_line:
if ‘.' in v.split(‘,')[1]:
privious_open_int = float(v.split(‘,')[1])
else:
try:
privious_open_int = int(v.split(‘,')[1])
except ValueError:
print v.split(‘,')[1] privious_open_int = 0
combined_privious_open_int = combined_privious_open_int + privious_open_int
combined_current_open_int = 0
for v in filtered_current_date_file[symbol]:
if ‘.' in v.split(‘,')[1]:
current_open_int = float(v.split(‘,')[1])
else:
try:
current_open_int = int(v.split(‘,')[1])
except ValueError:
print v.split(‘,')[1] current_open_int = 0
combined_current_open_int = combined_current_open_int + current_open_int
try:
combined_open_int_percentage_change = ((combined_current_open_int/(combined_privious_open_int*1.0)
– 1)*100)
except (ZeroDivisionError):
combined_open_int_percentage_change = “NA”
with open(‘combined_future_open_int.csv', ‘a') as f:
s = “{},{},{},{}”.format(symbol, combined_privious_open_int, combined_current_open_int,
combined_open_int_percentage_change)
f.write(s+”n”)

Get Price Change
def compare_price_change(current_date_file, previous_date_file):
filtered_current_date_file = {}
with open(‘price_change.csv', ‘a') as f:
s1 = “{},{},{},{},{}”.format(“symbol”.upper(),
“previous_close”.upper(),
“current_close”.upper(),
“close_percentage_change”.upper(),
“expiry_date”.upper()
)
f.write(s1+”n”)
if not current_date_file or not os.path.isfile(current_date_file):
return
if not previous_date_file or not os.path.isfile(previous_date_file):
return
with open(current_date_file, ‘r') as f:
for line in f:
if line.split(‘,')[0] in future_index_stock:
symbol = line.split(‘,')[1] open_int = line.split(‘,')[12] close = line.split(‘,')[8] expiry_date = line.split(‘,')[2] if symbol in filtered_current_date_file:
filtered_current_date_file[symbol].append(
“{},{},{},{}”.format(symbol, open_int, close, expiry_date))
else:
filtered_current_date_file[symbol] = [“{},{},{},{}”.format(symbol, open_int, close, expiry_date)] with open(previous_date_file, ‘r') as f:
for line in f:
if line.split(‘,')[0] in future_index_stock:
symbol = line.split(‘,')[1] open_int = line.split(‘,')[12] close = line.split(‘,')[8] expiry_date = line.split(‘,')[2] current_data=””
for v in filtered_current_date_file[symbol]:
if expiry_date in v:
current_data = v
# print expiry_date, symbol, v
else:
continue
if ‘.' in current_data.split(‘,')[2]:
current_close = float(current_data.split(‘,')[2])
else:
try:
current_close = int(current_data.split(‘,')[2])
except ValueError:
# print current_data.split(‘,')[2] current_close = 0
if ‘.' in close:
previous_close = float(close)
else:
try:
previous_close = int(close)
except ValueError:
previous_close = 0
try:
close_percentage_change = (((current_close-previous_close)/previous_close)*100)
except (ZeroDivisionError):
close_percentage_change = “NA”
# print “open_int_percentage_change”
# print current_data.split(‘,')[1], open_int
# open_int_percentage_change = “N/A”
with open(‘price_change.csv', ‘a') as f:
s = “{},{},{},{},{}”.format(symbol, previous_close, current_close, close_percentage_change, expiry_date)
f.write(s+”n”)



Main Method
def main():
try:
previous_date = sys.argv[1] current_date = sys.argv[2] except:
print “Please pass the previous date and current date argument”
print “Example 16-05-2018 17-05-2018”
sys.exit(1)
remove_file(‘combined_ce_open_int.csv')
remove_file(‘combined_pe_open_int.csv')
remove_file(‘combined_future_open_int.csv')
remove_file(‘price_change.csv')
remove_file(‘combined_ce_and_pe_open_int.csv')
current_date_file = download_bhavcopy(current_date)
previous_date_file = download_bhavcopy(previous_date)
compare_price_change(current_date_file, previous_date_file)
get_future_oi_change(current_date_file, previous_date_file)
get_option_oi_change(current_date_file, previous_date_file)
#imported function from convertCSVToXLSX.py file
remove_file(current_date_file)
remove_file(previous_date_file)
csvtoxlsx.csvToxlsx()
#remove_file(‘unFormatedStock_Details.xlsx')

Remove File
def remove_file(file_name):
if os.path.isfile(file_name):
os.remove(file_name)

Call Main Method
if __name__ == ‘__main__':
main()

Read More
7 months ago
0 43
11 months ago
0 39
2 years ago
0 48

Leave a Reply

Your email address will not be published. Required fields are marked *

New Providers
Quotex

1000+ Trading Instruments
The best trading broker in the world.

Stockity

1000+ Trading Instruments
The best trading broker in the world.

New Games
Lies of P

$59.99 Standard Edition
28% Save Discounts
See Top 10 Provider Games

COCOON

$24.99 Standard Edition
28% Save Discounts
See Top 10 Provider Games

New Offers
Commission up to $1850 for active user of affiliate program By Exness

Top Points © Copyright 2023 | By Topoin.com Media LLC.
Topoin.info is a site for reviewing the best and most trusted products, bonus, offers, business service providers and companies of all time.

Discover more from Topoin

Subscribe now to keep reading and get access to the full archive.

Continue reading