1
- from fileinput import filename
2
1
import streamlit as st
3
2
import pandas as pd
4
3
import numpy as np
5
4
import os
6
5
from datetime import datetime , timedelta , date
7
6
7
+ import plotly .graph_objects as go
8
+
8
9
# Custom imports
9
10
import nsepyData as nd
10
11
@@ -45,20 +46,37 @@ def get_market_activity(data_dates):
45
46
else :
46
47
pass
47
48
48
- # Market Activity Data
49
49
#get_market_activity(nifty50)
50
50
51
- @st .cache (suppress_st_warning = True )
51
+ # Market Activity Data Processing
52
+ #@st.cache(suppress_st_warning=True)
52
53
def market_activity (data_dates ):
53
- market_activity_list = []
54
+ ma_adv_list = []
55
+ ma_dec_list = []
54
56
for i in data_dates .index :
55
57
filename = 'data/mactivity/MA{}{}{}.csv' .format (i .strftime ("%d" ), i .strftime ("%m" ), i .strftime ("%y" ))
56
- market_activity = pd .read_csv (filename )
57
- st .write (market_activity )
58
- market_activity_list .append (market_activity .loc [market_activity .INDEX == 'ADVANCES' ])
59
- st .write (market_activity_list )
58
+ ma_data = pd .read_csv (filename )
59
+ #st.write(filename, ma_data)
60
+ ma_adv = ma_data ['PREVIOUS CLOSE' ].loc [ma_data ['INDEX' ] == 'ADVANCES' ]
61
+ ma_dec = ma_data ['PREVIOUS CLOSE' ].loc [ma_data ['INDEX' ] == 'DECLINES' ]
62
+ #ma_adv = ma_data.loc[ma_data['INDEX'] == 'ADVANCES']
63
+ #ma_dec = ma_data.loc[ma_data['INDEX'] == 'DECLINES']
64
+ ma_adv_list .append (ma_adv .values [0 ])
65
+ ma_dec_list .append (ma_dec .values [0 ])
66
+ ma_df = pd .DataFrame ({'ADVANCES' : ma_adv_list ,
67
+ 'DECLINES' : ma_dec_list
68
+ }, index = data_dates .index )
69
+ st .write (ma_df )
70
+ return ma_df
60
71
61
72
market_activity (nifty50 )
73
+ ma_data = pd .read_csv ('data/mactivity/MA030122.csv' )
74
+ ma_adv = ma_data ['PREVIOUS CLOSE' ].loc [ma_data ['INDEX' ] == 'ADVANCES' ]
75
+ ma_dec = ma_data ['PREVIOUS CLOSE' ].loc [ma_data ['INDEX' ] == 'DECLINES' ]
76
+ ma_adv_list = []
77
+ ma_dec_list = []
78
+ ma_adv_list .append (ma_adv .values [0 ])
79
+ #st.write(ma_adv_list)
62
80
63
81
@st .cache ()
64
82
def fii_activity (data_dates ):
@@ -83,7 +101,7 @@ def methodology(df):
83
101
df ['Rolling StdDev' ] = df .iloc [:, - 3 ].rolling (45 ).std ()
84
102
# Normalizing Data between 0 to 100
85
103
df ['Normalized' ] = 100 * ((df ['Rolling StdDev' ] - df ['Rolling StdDev' ].min ()) / (df ['Rolling StdDev' ].max () - df ['Rolling StdDev' ].min ()))
86
- st .write (df ['Normalized' ].tail ())
104
+ # st.write(df['Normalized'].tail())
87
105
return df ['Normalized' ]
88
106
89
107
# Run this function to get data
@@ -95,22 +113,25 @@ def methodology(df):
95
113
# FII Activity
96
114
fii_activity = pd .read_csv ('data/fii_activity.csv' , index_col = 'Date' , parse_dates = ['Date' ])
97
115
#st.line_chart(fii_activity)
98
- st . line_chart ( methodology (fii_activity ) )
99
-
116
+ mmi_fii = methodology (fii_activity )
117
+ #st.line_chart(mmi_fii.tail())
100
118
101
119
# Volatility and Skew
102
120
indiavix = pd .read_csv ('data/indiavix.csv' , index_col = 'Date' , parse_dates = ['Date' ])
103
121
indiavix ['Rolling' ] = indiavix ['Close' ].rolling (45 ).mean ()
104
122
#st.write(indiavix['Rolling'].tail())
123
+ mmi_volatility = methodology (indiavix )
124
+ #st.write(mmi_volatility.tail())
105
125
106
126
# Momentum
107
127
# 30D & 90D EMA of Nifty 50
108
128
nifty50 ['30D EMA' ] = nifty50 ['Close' ].ewm (span = 30 , adjust = False ).mean ()
109
129
nifty50 ['90D EMA' ] = nifty50 ['Close' ].ewm (span = 90 , adjust = False ).mean ()
110
130
nifty50 ['Momentum' ] = (nifty50 ['90D EMA' ] - nifty50 ['30D EMA' ]) / nifty50 ['90D EMA' ]
111
- #st.write(nifty50['Momentum'])
131
+ #st.write('MMI Momentum', nifty50['Momentum'])
112
132
#st.line_chart(nifty50.iloc[:, [3, -3, -2]])
113
- st .line_chart (methodology (nifty50 ))
133
+ mmi_momentum = methodology (nifty50 )
134
+ #st.line_chart(mmi_momentum.tail())
114
135
115
136
# Market Breadth -> Modifies Arms Index
116
137
#adratio = pd.read_html('https://www1.nseindia.com/products/content/equities/equities/historical_advdeclines.htm')
@@ -122,6 +143,31 @@ def methodology(df):
122
143
123
144
# Demand for Gold
124
145
146
+ # MMI Calculation
147
+ mmi = 1 / 3 * (mmi_fii + mmi_momentum )
148
+ st .write ('MMI Data' , mmi .tail ())
149
+
150
+ # Vizualization
151
+ # Gauge Charts -> https://plotly.com/python/reference/indicator/
152
+ fig = go .Figure (go .Indicator (
153
+ mode = "gauge+number+delta" ,
154
+ delta = {'reference' : mmi [- 2 ]},
155
+ value = mmi [- 1 ],
156
+ domain = {'x' : [0 , 1 ], 'y' : [0 , 1 ]},
157
+ title = {'text' : "Risk-o-Meter" },
158
+ gauge = {'axis' : {'range' : [None , 100 ],
159
+ 'tickmode' : 'array' ,
160
+ 'ticktext' : ['Extreme Fear' , 'Fear' , '' , 'Greed' , 'Extreme Greed' ],
161
+ 'tickvals' : [0 , 30 , 50 , 70 , 100 ]},
162
+ 'steps' : [
163
+ {'range' : [0 , 30 ], 'color' : "lightgreen" , 'name' : 'Fear' },
164
+ {'range' : [30 , 50 ], 'color' : "rgb(255,200,0)" , 'name' : 'Risk' },
165
+ {'range' : [50 , 70 ], 'color' : "orange" },
166
+ {'range' : [70 , 100 ], 'color' : "red" }]}))
167
+
168
+ st .plotly_chart (fig , use_container_width = True )
169
+
170
+ st .write (mmi_fii .tail (), mmi_momentum .tail (), mmi_volatility .tail ())
125
171
126
172
def get_dates ():
127
173
# Holiday List From NSE
0 commit comments