Skip to content

Commit 3fd9b87

Browse files
authored
Update and rename NSE-Option-Chain-Analyzer.py to NSE_Option_Chain_Analyzer.py
1 parent 3844b81 commit 3fd9b87

File tree

1 file changed

+49
-29
lines changed

1 file changed

+49
-29
lines changed

NSE-Option-Chain-Analyzer.py renamed to NSE_Option_Chain_Analyzer.py

Lines changed: 49 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,30 @@ def __init__(self, window):
1818
self.first_run = True
1919
self.stop = False
2020
self.dates = [""]
21-
self.indexes = ["NIFTY", "BANKNIFTY", "NIFTYIT"]
21+
self.indices = ["NIFTY", "BANKNIFTY", "NIFTYIT"]
2222
self.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
2323
'like Gecko) '
2424
'Chrome/80.0.3987.149 Safari/537.36',
2525
'accept-language': 'en,gu;q=0.9,hi;q=0.8', 'accept-encoding': 'gzip, deflate, br'}
26+
self.session = requests.Session()
27+
self.cookies = {}
2628
self.login_win(window)
2729

28-
def get_data(self, event="empty"):
30+
def get_data(self, event=None):
31+
request = None
2932
response = None
3033
if self.first_run:
3134
self.index = self.index_var.get()
3235
try:
36+
url_oc = "https://www.nseindia.com/option-chain"
3337
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
34-
response = requests.get(url, headers=self.headers, timeout=5)
38+
request = self.session.get(url_oc, headers=self.headers, timeout=5)
39+
self.cookies = dict(request.cookies)
40+
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
3541
except Exception as err:
36-
print(err)
42+
print(request.status_code)
43+
print(response.status_code)
44+
print(err, "1")
3745
messagebox.showerror(title="Error", message="Error in fetching dates.\nPlease retry.")
3846
self.dates.clear()
3947
self.dates = [""]
@@ -43,16 +51,18 @@ def get_data(self, event="empty"):
4351
else:
4452
try:
4553
url = f"https://www.nseindia.com/api/option-chain-indices?symbol={self.index}"
46-
response = requests.get(url, headers=self.headers, timeout=5)
54+
response = self.session.get(url, headers=self.headers, timeout=5, cookies=self.cookies)
4755
except Exception as err:
48-
print(err)
56+
print(response)
57+
print(err, "2")
4958
return
5059

5160
if response is not None:
5261
try:
5362
json_data = response.json()
5463
except Exception as err:
55-
print(err)
64+
print(response)
65+
print(err, "3")
5666
json_data = {}
5767
else:
5868
json_data = {}
@@ -61,8 +71,11 @@ def get_data(self, event="empty"):
6171
messagebox.showerror(title="Error", message="Error in fetching dates.\nPlease retry.")
6272
self.dates.clear()
6373
self.dates = [""]
64-
self.date_menu.config(values=tuple(self.dates))
65-
self.date_menu.current(0)
74+
try:
75+
self.date_menu.config(values=tuple(self.dates))
76+
self.date_menu.current(0)
77+
except TclError as err:
78+
print(err, "4")
6679
return
6780
elif json_data == {}:
6881
return
@@ -74,8 +87,8 @@ def get_data(self, event="empty"):
7487
try:
7588
self.date_menu.config(values=tuple(self.dates))
7689
self.date_menu.current(0)
77-
except TclError:
78-
pass
90+
except TclError as err:
91+
print(err, "5")
7992

8093
return response, json_data
8194

@@ -89,13 +102,13 @@ def login_win(self, window):
89102
self.login.geometry("260x90+{}+{}".format(position_right, position_down))
90103

91104
self.index_var = StringVar()
92-
self.index_var.set(self.indexes[0])
105+
self.index_var.set(self.indices[0])
93106
self.dates_var = StringVar()
94107
self.dates_var.set(self.dates[0])
95108

96109
index_label = Label(self.login, text="Index: ", justify=LEFT)
97110
index_label.grid(row=0, column=0, sticky=N + S + W)
98-
self.index_menu = Combobox(self.login, textvariable=self.index_var, values=self.indexes)
111+
self.index_menu = Combobox(self.login, textvariable=self.index_var, values=self.indices)
99112
self.index_menu.config(width=15)
100113
self.index_menu.grid(row=0, column=1, sticky=N + S + E)
101114
date_label = Label(self.login, text="Expiry Date: ", justify=LEFT)
@@ -128,7 +141,7 @@ def focus_widget(event, mode):
128141

129142
self.login.mainloop()
130143

131-
def start(self, event="empty"):
144+
def start(self, event=None):
132145
self.expiry_date = self.dates_var.get()
133146
if self.expiry_date == "":
134147
messagebox.showerror(title="Error", message="Incorrect Expiry Date.\nPlease enter correct Expiry Date.")
@@ -138,10 +151,10 @@ def start(self, event="empty"):
138151
self.login.destroy()
139152
self.main_win()
140153
except ValueError as err:
141-
print(err)
154+
print(err, "6")
142155
messagebox.showerror(title="Error", message="Incorrect Strike Price.\nPlease enter correct Strike Price.")
143156

144-
def change_state(self, event="empty"):
157+
def change_state(self, event=None):
145158

146159
if not self.stop:
147160
self.stop = True
@@ -154,7 +167,7 @@ def change_state(self, event="empty"):
154167

155168
self.main()
156169

157-
def export(self, event="empty"):
170+
def export(self, event=None):
158171
sheet_data = self.sheet.get_sheet_data()
159172

160173
try:
@@ -165,11 +178,11 @@ def export(self, event="empty"):
165178
messagebox.showinfo(title="Export Complete",
166179
message="Data has been exported to NSE-Option-Chain-Analyzer.csv.")
167180
except Exception as err:
168-
print(err)
181+
print(err, "7")
169182
messagebox.showerror(title="Export Failed",
170183
message="An error occurred while exporting the data.")
171184

172-
def links(self, link, event="empty"):
185+
def links(self, link, event=None):
173186

174187
if link == "developer":
175188
webbrowser.open_new("https://github.com/VarunS2002/")
@@ -198,7 +211,7 @@ def about_window(self):
198211

199212
return self.info
200213

201-
def about(self, event="empty"):
214+
def about(self, event=None):
202215
self.info = self.about_window()
203216
self.info.rowconfigure(0, weight=1)
204217
self.info.rowconfigure(1, weight=1)
@@ -212,7 +225,7 @@ def about(self, event="empty"):
212225
heading.grid(row=0, column=0, columnspan=2, sticky=N + S + W + E)
213226
version_label = Label(self.info, text="Version:", relief=RIDGE)
214227
version_label.grid(row=1, column=0, sticky=N + S + W + E)
215-
version_val = Label(self.info, text="3.2", relief=RIDGE)
228+
version_val = Label(self.info, text="3.3", relief=RIDGE)
216229
version_val.grid(row=1, column=1, sticky=N + S + W + E)
217230
dev_label = Label(self.info, text="Developer:", relief=RIDGE)
218231
dev_label.grid(row=2, column=0, sticky=N + S + W + E)
@@ -234,10 +247,11 @@ def about(self, event="empty"):
234247

235248
self.info.mainloop()
236249

237-
def close(self, event="empty"):
250+
def close(self, event=None):
238251
ask_quit = messagebox.askyesno("Quit", "All unsaved data will be lost.\nProceed to quit?", icon='warning',
239252
default='no')
240253
if ask_quit:
254+
self.session.close()
241255
self.root.destroy()
242256
quit()
243257
elif not ask_quit:
@@ -277,7 +291,7 @@ def main_win(self):
277291
top_frame.pack(fill="both", expand=True)
278292

279293
output_columns = (
280-
'Time', 'Points', 'Call Sum\n(in K)', 'Put Sum\n(in K)', 'Difference\n(in K)', 'Call Boundary\n(in K)',
294+
'Time', 'Value', 'Call Sum\n(in K)', 'Put Sum\n(in K)', 'Difference\n(in K)', 'Call Boundary\n(in K)',
281295
'Put Boundary\n(in K)', 'Call ITM', 'Put ITM')
282296
self.sheet = tksheet.Sheet(top_frame, column_width=85, align="center", headers=output_columns,
283297
header_font=("TkDefaultFont", 9, "bold"), empty_horizontal=0,
@@ -311,7 +325,7 @@ def main_win(self):
311325
max_call_oi_sp_label.grid(row=1, column=0, sticky=N + S + W + E)
312326
self.max_call_oi_sp_val = Label(bottom_frame, text="", relief=RIDGE)
313327
self.max_call_oi_sp_val.grid(row=1, column=1, sticky=N + S + W + E)
314-
max_call_oi_label = Label(bottom_frame, text="OI:", relief=RIDGE, font=("TkDefaultFont", 9, "bold"))
328+
max_call_oi_label = Label(bottom_frame, text="OI (in K):", relief=RIDGE, font=("TkDefaultFont", 9, "bold"))
315329
max_call_oi_label.grid(row=1, column=2, sticky=N + S + W + E)
316330
self.max_call_oi_val = Label(bottom_frame, text="", relief=RIDGE)
317331
self.max_call_oi_val.grid(row=1, column=3, sticky=N + S + W + E)
@@ -322,7 +336,7 @@ def main_win(self):
322336
max_put_oi_sp_label.grid(row=1, column=4, sticky=N + S + W + E)
323337
self.max_put_oi_sp_val = Label(bottom_frame, text="", relief=RIDGE)
324338
self.max_put_oi_sp_val.grid(row=1, column=5, sticky=N + S + W + E)
325-
max_put_oi_label = Label(bottom_frame, text="OI:", relief=RIDGE, font=("TkDefaultFont", 9, "bold"))
339+
max_put_oi_label = Label(bottom_frame, text="OI (in K):", relief=RIDGE, font=("TkDefaultFont", 9, "bold"))
326340
max_put_oi_label.grid(row=1, column=6, sticky=N + S + W + E)
327341
self.max_put_oi_val = Label(bottom_frame, text="", relief=RIDGE)
328342
self.max_put_oi_val.grid(row=1, column=7, sticky=N + S + W + E)
@@ -591,7 +605,8 @@ def main(self):
591605

592606
try:
593607
index = int(df[df['Strike Price'] == self.sp].index.tolist()[0])
594-
except IndexError:
608+
except IndexError as err:
609+
print(err, "8")
595610
messagebox.showerror(title="Error",
596611
message="Incorrect Strike Price.\nPlease enter correct Strike Price.")
597612
self.root.destroy()
@@ -661,7 +676,12 @@ def main(self):
661676
self.root.after((self.seconds * 1000), self.main)
662677
return
663678

679+
@staticmethod
680+
def create_instance():
681+
master_window = Tk()
682+
Nse(master_window)
683+
master_window.mainloop()
684+
664685

665-
master_window = Tk()
666-
gui = Nse(master_window)
667-
master_window.mainloop()
686+
if __name__ == '__main__':
687+
Nse.create_instance()

0 commit comments

Comments
 (0)