-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
383 lines (326 loc) ยท 16.2 KB
/
app.py
File metadata and controls
383 lines (326 loc) ยท 16.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
import streamlit as st
import pandas as pd
import json
from datetime import datetime
from datetime import timedelta
st.set_page_config(page_title='CCIC 4.0: Group J',
page_icon='favicon.ico', layout='wide')
@st.cache(allow_output_mutation=True)
def get_data():
return pd.read_csv(r'csv_files/news_scraped.csv')
@st.cache
def get_groww():
f = open('json_files/groww_all.json')
data = json.load(f)
return data
@st.cache
def get_capital():
f = open(r'json_files/capital_fo.json')
data = json.load(f)
return data
@st.cache
def get_upfo():
f = open(r'json_files/upstox_fo.json')
data = json.load(f)
return data
@st.cache
def get_upmo():
f = open(r'json_files/upstox_morning.json')
data = json.load(f)
return data
@st.cache
def get_nse():
f = open(r'index_json_files/nseindia.json')
data = json.load(f)
return data
@st.cache
def get_cashmc():
f = open(r'index_json_files/cash_moneycontrol.json')
data = json.load(f)
return data
@st.cache
def get_fnomc():
f = open(r'index_json_files/fno_moneycontrol.json')
data = json.load(f)
return data
@st.cache
def get_eqsis():
f = open(r'index_json_files/eqsis.json')
data = json.load(f)
return data
@st.cache
def get_invest():
f = open(r'index_json_files/investing.json')
data = json.load(f)
return data
today = datetime.today()
dayno = today.weekday()
day = today.strftime("%d %B %Y")
yesterday = today - timedelta(days=1)
day1 = yesterday.strftime("%d %B")
yesterday1 = today - timedelta(days=2)
day2 = yesterday1.strftime("%d %B")
yesterday2 = today - timedelta(days=3)
day3 = yesterday2.strftime("%d %B")
yesterday3 = today - timedelta(days=4)
day4 = yesterday3.strftime("%d %B")
if dayno == 0:
yesterday = day3
yesterday1 = day4
if dayno == 6:
yesterday = day2
yesterday1 = day3
# add day
st.markdown("<h1 style='text-align: center;'><b>CCIC 4.0 : Group J</b></h1>",
unsafe_allow_html=True)
st.write("")
st.write("")
col1, col2, col3 = st.columns((1, 4, 1))
with col1:
st.write("")
with col2:
st.write("Date: " + day)
st.header("Market Commentary ๐ป")
st.write("")
grow = get_groww()
capital = get_capital()
upfo = get_upfo()
upmo = get_upmo()
gsector = grow["news"][0]['description']
gsector = gsector.split('\n')
gnews = grow["news"][1]['description']
gnews = gnews.split('\n')
summary = grow["introduction"]["content"].split('\n')
summary = " ".join(summary[1:])
derivatives_cap = capital['fno']
globalm = upfo['asian']
index = upfo['index']
fiidii = upfo['fiidii']
indiavix = upfo['indiavix']
stock = upfo['stock']
stock = stock.split('.')
disc = upfo['disclaimer']
news1 = upmo['news1']
news2 = upmo['news2']
news3 = upmo['news3']
summary
st.subheader("Global Markets ๐")
st.write(globalm)
st.subheader("Index Action ๐๐")
st.write(index)
st.subheader("General NEWS ๐๏ธ")
for upd in gsector:
st.write("โญ๏ธ " + upd[1:])
# st.write(gsector)
st.write(news1)
st.write(news2)
st.write(news3)
st.subheader("FII/FPI and DII ๐ฐ")
st.write(fiidii)
st.subheader("Derivatives ๐ต")
st.write(derivatives_cap)
st.subheader("Stock Futures ๐")
st.write("**Long Build-up**" + stock[0][13:])
st.write("**Short Build-up**" + stock[1][16:])
if(len(stock[2][15:]) > 4):
st.write("**Under F&O Ban**" + stock[2][15:])
st.info(disc, icon="โน๏ธ")
st.write("")
st.write("")
st.header("Nifty200 NEWS ๐ฐ")
st.write("")
newsdf = get_data()
for i in range(len(newsdf)):
company = newsdf.loc[i, 'company'] + " : "
title = newsdf.loc[i, 'title']
st.write("๐" + f"{company} {title}")
for i in range(len(gnews)):
st.write("๐" + gnews[i])
st.write("")
st.write("")
st.header("Index level Reporting ๐ช")
st.write("")
st.subheader("Market Turnover ๐")
st.write("")
nse = get_nse()
# st.json(nse)
equity_prev = nse["equities"]["previous"]["volume"]
equity_tod = nse["equities"]["today"]["volume"]
delta_eq = ((equity_tod-equity_prev)/equity_prev)*100
indexfut_prev = nse["index_futures"]["previous"]["volume"]
indexfut_tod = nse["index_futures"]["today"]["volume"]
indexfut_oi = int(nse["index_futures"]["previous"]["open_interest"])
delta_indexfut = ((indexfut_tod-indexfut_prev)/indexfut_prev)*100
indexopt_prev = nse["index_options"]["previous"]["volume"]
indexopt_tod = nse["index_options"]["today"]["volume"]
indexopt_oi = int(nse["index_options"]["previous"]["open_interest"])
delta_indexopt = ((indexopt_tod-indexopt_prev)/indexopt_prev)*100
stockfut_prev = nse["stock_futures"]["previous"]["volume"]
stockfut_tod = nse["stock_futures"]["today"]["volume"]
stockfut_oi = int(nse["stock_futures"]["previous"]["open_interest"])
delta_stockfut = ((stockfut_tod-stockfut_prev)/stockfut_prev)*100
stockopt_prev = nse["stock_options"]["previous"]["volume"]
stockopt_tod = nse["stock_options"]["today"]["volume"]
stockopt_oi = int(nse["stock_options"]["previous"]["open_interest"])
delta_stockopt = ((stockopt_tod-stockopt_prev)/stockopt_prev)*100
data = [[equity_tod, delta_eq, '-'], [indexfut_tod, delta_indexfut, indexfut_oi], [indexopt_tod, delta_indexopt, indexopt_oi], [stockfut_tod, delta_stockfut, stockfut_oi], [stockopt_tod, delta_stockopt, stockopt_oi]]
df = pd.DataFrame(data, columns=['Previous Volume(shares/contracts)', '๐ Volume (%)', 'Previous OI(contracts)'], index=[
'Cash Equity', 'Index Futures', 'Index Options', 'Stock Futures', 'Stock Options'])
df.reset_index(inplace=True)
df.rename(columns={'index': 'Product'}, inplace=True)
# s1 = dict(selector='th', props=[('text-align', 'center')])
# s2 = dict(selector='td', props=[('text-align', 'center')])
# # you can include more styling paramteres, check the pandas docs
# table = df.style.set_table_styles([s1, s2]).hide(axis=0).to_html()
# st.write(f'{table}', unsafe_allow_html=True)
st.dataframe(df, use_container_width=True)
st.write("")
st.subheader("FII and DII Activity(โนcrores) ๐ค")
st.write("")
cashmc = get_cashmc()
sum_purchase_fii = 0
sum_sales_fii = 0
sum_purchase_dii = 0
sum_sales_dii = 0
count = 0
for i in cashmc['dates']:
sum_purchase_fii += i["fii"]["gross_purchase"]
sum_sales_fii += i["fii"]["gross_sales"]
sum_purchase_dii += i["dii"]["gross_purchase"]
sum_sales_dii += i["dii"]["gross_sales"]
count += 1
prev_purchase_fii = cashmc['dates'][0]['fii']['gross_purchase']
prev_purchase_dii = cashmc['dates'][0]['dii']['gross_purchase']
prev_sale_fii = cashmc['dates'][0]['fii']['gross_sales']
prev_sale_dii = cashmc['dates'][0]['dii']['gross_sales']
prev1_purchase_fii = cashmc['dates'][1]['fii']['gross_purchase']
prev1_purchase_dii = cashmc['dates'][1]['dii']['gross_purchase']
prev1_sale_fii = cashmc['dates'][1]['fii']['gross_sales']
prev1_sale_dii = cashmc['dates'][1]['dii']['gross_sales']
avg_purchase_fii = sum_purchase_fii/count
avg_sale_fii = sum_sales_fii/count
avg_purchase_dii = sum_purchase_dii/count
avg_sale_dii = sum_sales_dii/count
month_change_fii = sum_purchase_fii-sum_sales_fii
month_change_dii = sum_purchase_dii-sum_sales_dii
fnomc = get_fnomc()
sum_purchase_fii_indexfut = 0
sum_sales_fii_indexfut = 0
sum_purchase_fii_indexopt = 0
sum_sales_fii_indexopt = 0
count = 0
for i in fnomc["index"]['dates']:
sum_purchase_fii_indexfut += i["fii_index_put"]["gross_purchase"]
sum_sales_fii_indexfut += i["fii_index_put"]["gross_sales"]
sum_purchase_fii_indexopt += i["fii_index_opt"]["gross_purchase"]
sum_sales_fii_indexopt += i["fii_index_opt"]["gross_sales"]
count += 1
prev_purchase_fii_indexfut = fnomc["index"]['dates'][0]['fii_index_put']['gross_purchase']
prev_purchase_fii_indexopt = fnomc["index"]['dates'][0]['fii_index_opt']['gross_purchase']
prev_sale_fii_indexfut = fnomc["index"]['dates'][0]['fii_index_put']['gross_sales']
prev_sale_fii_indexopt = fnomc["index"]['dates'][0]['fii_index_opt']['gross_sales']
prev1_purchase_fii_indexfut = fnomc["index"]['dates'][0]['fii_index_put']['gross_purchase']
prev1_purchase_fii_indexopt = fnomc["index"]['dates'][0]['fii_index_opt']['gross_purchase']
prev1_sale_fii_indexfut = fnomc["index"]['dates'][0]['fii_index_put']['gross_sales']
prev1_sale_fii_indexopt = fnomc["index"]['dates'][0]['fii_index_opt']['gross_sales']
avg_purchase_fii_indexfut = sum_purchase_fii_indexfut/count
avg_sale_fii_indexfut = sum_sales_fii_indexfut/count
avg_purchase_fii_indexopt = sum_purchase_fii_indexopt/count
avg_sale_fii_indexopt = sum_sales_fii_indexopt/count
month_change_fii_indexfut = sum_purchase_fii_indexfut-sum_sales_fii_indexfut
month_change_fii_indexopt = sum_purchase_fii_indexopt-sum_sales_fii_indexopt
sum_purchase_fii_stockfut = 0
sum_sales_fii_stockfut = 0
sum_purchase_fii_stockopt = 0
sum_sales_fii_stockopt = 0
count = 0
for i in fnomc["stock"]['dates']:
sum_purchase_fii_stockfut += i["fii_stock_put"]["gross_purchase"]
sum_sales_fii_stockfut += i["fii_stock_put"]["gross_sales"]
sum_purchase_fii_stockopt += i["fii_stock_opt"]["gross_purchase"]
sum_sales_fii_stockopt += i["fii_stock_opt"]["gross_sales"]
count += 1
prev_purchase_fii_stockfut = fnomc["stock"]['dates'][0]['fii_stock_put']['gross_purchase']
prev_purchase_fii_stockopt = fnomc["stock"]['dates'][0]['fii_stock_opt']['gross_purchase']
prev_sale_fii_stockfut = fnomc["stock"]['dates'][0]['fii_stock_put']['gross_sales']
prev_sale_fii_stockopt = fnomc["stock"]['dates'][0]['fii_stock_opt']['gross_sales']
prev1_purchase_fii_stockfut = fnomc["stock"]['dates'][0]['fii_stock_put']['gross_purchase']
prev1_purchase_fii_stockopt = fnomc["stock"]['dates'][0]['fii_stock_opt']['gross_purchase']
prev1_sale_fii_stockfut = fnomc["stock"]['dates'][0]['fii_stock_put']['gross_sales']
prev1_sale_fii_stockopt = fnomc["stock"]['dates'][0]['fii_stock_opt']['gross_sales']
avg_purchase_fii_stockfut = sum_purchase_fii_stockfut/count
avg_sale_fii_stockfut = sum_sales_fii_stockfut/count
avg_purchase_fii_stockopt = sum_purchase_fii_stockopt/count
avg_sale_fii_stockopt = sum_sales_fii_stockopt/count
month_change_fii_stockfut = sum_purchase_fii_stockfut-sum_sales_fii_stockfut
month_change_fii_stockopt = sum_purchase_fii_stockopt-sum_sales_fii_stockopt
data = [
[prev_purchase_fii - prev_sale_fii, prev1_purchase_fii - prev1_sale_fii, avg_purchase_fii - avg_sale_fii],
[prev_purchase_dii - prev_sale_dii, prev1_purchase_dii - prev1_sale_dii, avg_purchase_dii - avg_sale_dii],
[prev_purchase_fii_indexfut - prev_sale_fii_indexfut, prev1_purchase_fii_indexfut - prev1_sale_fii_indexfut, avg_purchase_fii_indexfut - avg_sale_fii_indexfut],
[prev_purchase_fii_indexopt - prev_sale_fii_indexopt, prev1_purchase_fii_indexopt - prev1_sale_fii_indexopt, avg_purchase_fii_indexopt - avg_sale_fii_indexopt],
[prev_purchase_fii_stockfut - prev_sale_fii_stockfut, prev1_purchase_fii_stockfut - prev1_sale_fii_stockfut, avg_purchase_fii_stockfut - avg_sale_fii_stockfut],
[prev_purchase_fii_stockopt - prev_sale_fii_stockopt, prev1_purchase_fii_stockopt - prev1_sale_fii_stockopt, avg_purchase_fii_stockopt - avg_sale_fii_stockopt],
]
df = pd.DataFrame(data, columns=[yesterday, yesterday1,'30D Average Net Purchase'],
index=['FII Cash', 'DII Cash', 'FII Index Futures', 'FII Index Options', 'FII Stock Futures', 'FII Stock Options'])
df.reset_index(inplace=True)
df.rename(columns={'index': 'Category'}, inplace=True)
st.dataframe(df, use_container_width=True)
st.write("")
st.subheader("Options Snapshot ๐ธ")
st.write("")
eqsis = get_eqsis()
long_fii_ic = eqsis["index_call"]["data"][1]["long"]
short_fii_ic = eqsis["index_call"]["data"][1]["short"]
long_dii_ic = eqsis["index_call"]["data"][2]["long"]
short_dii_ic = eqsis["index_call"]["data"][2]["short"]
long_fii_ip = eqsis["index_put"]["data"][1]["long"]
short_fii_ip = eqsis["index_put"]["data"][1]["short"]
long_dii_ip = eqsis["index_put"]["data"][2]["long"]
short_dii_ip = eqsis["index_put"]["data"][2]["short"]
long_fii_ic1 = eqsis["index_call"]["data"][5]["long"]
short_fii_ic1 = eqsis["index_call"]["data"][5]["short"]
long_dii_ic1 = eqsis["index_call"]["data"][6]["long"]
short_dii_ic1 = eqsis["index_call"]["data"][6]["short"]
long_fii_ip1 = eqsis["index_put"]["data"][5]["long"]
short_fii_ip1 = eqsis["index_put"]["data"][5]["short"]
long_dii_ip1 = eqsis["index_put"]["data"][6]["long"]
short_dii_ip1 = eqsis["index_put"]["data"][6]["short"]
data = [
[long_fii_ic-short_fii_ic, long_fii_ic1-short_fii_ic1, (long_fii_ic-short_fii_ic)-(long_fii_ic1-short_fii_ic1)],
[long_dii_ic-short_dii_ic, long_dii_ic1-short_dii_ic1, (long_dii_ic-short_dii_ic)-(long_dii_ic1-short_dii_ic1)],
[long_fii_ip-short_fii_ip, long_fii_ip1-short_fii_ip1, (long_fii_ip-short_fii_ip)-(long_fii_ip1-short_fii_ip1)],
[long_dii_ip-short_dii_ip, long_dii_ip1-short_dii_ip1, (long_dii_ip-short_dii_ip)-(long_dii_ip1-short_dii_ip1)],
]
df = pd.DataFrame(data, columns=[yesterday, yesterday1, "1D change"],
index=['FII Index Call Options', 'DII Index Call Options', 'FII Index Put Options', 'DII Index Put Options'])
df.reset_index(inplace=True)
df.rename(columns={'index': 'Category'}, inplace=True)
st.dataframe(df, use_container_width=True)
st.write("")
st.subheader("ADR moves ๐ฆ")
st.write("")
invest = get_invest()
df = pd.DataFrame.from_dict(invest, orient='index')
df.reset_index(inplace=True)
df.rename(columns={'index': 'Name', 'chg_pct' : '1D % change', 'volume': 'Volume', 'month_chg_pct': '30D % change'}, inplace=True)
st.dataframe(df, use_container_width=True)
st.write("")
st.write("")
st.header("Methodology โ๏ธ")
st.write("")
st.write("We have made a concerted effort to ensure that the news stories we present to our users are from reputable and reliable sources. In order to achieve this, we have carefully selected a number of prominent news outlets to serve as our sources, and have implemented a web scraper to gather news stories from these sources on a regular basis.")
st.write("With that said, in order to maintain the integrity and relevance of our news feed, we have implemented a filter that removes any news stories that does not meet the following criteria: ")
st.write("๐ The company is listed in the NIFTY200 index.")
st.write("๐ The news story was published yesterday.")
st.write("๐ The news story was published over the weekend (if we are viewing the news feed on a Monday).")
st.write("This filter helps us to provide our users with the most current and relevant news stories, and ensures that our news feed is as useful as possible.")
st.write("In order to provide our users with up-to-date and accurate Index level reporting, we have implemented a similar process for gathering and displaying data. Specifically, we have scraped data from reliable sources and used it to create a web app using Streamlit. This app allows users to easily view and interact with the data, and we have hosted it on Streamlit Cloud for convenient access.")
st.write("In order to make this process as efficient as possible, we have also set up a workflow using GitHub Actions that runs the code to update the content every day at 7:30 AM IST. This ensures that the data is always current and accurate, without requiring us to manually update it on a daily basis.")
st.write("Overall, we believe that this combination of reliable data sources, a user-friendly web app, and automated updates allows our users to have the most comprehensive and up-to-date overview of the market before the start of the trading session.")
st.write("")
st.write("")
st.info("Sources: MoneyControl, NSE India, Eqsis, Groww, Upstox, Capital Market", icon="๐๐ป")
with col3:
st.write("")