CoolFace
Apppublic

riteshcp/R2

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
app.py207 linesDownload Raw Back to root
1# app.py2 3import streamlit as st4import pandas as pd5import yfinance as yf6import numpy as np7import time8import os9 10st.title('RSI स्कैनर - भारतीय स्टॉक्स')11 12# 'ind_nifty500list.csv' फ़ाइल को पढ़ें13csv_file_path = 'ind_nifty500list.csv'  # सुनिश्चित करें कि यह फ़ाइल आपके Hugging Face Space में है14 15# चेक करें कि फ़ाइल मौजूद है16if not os.path.isfile(csv_file_path):17    st.error("स्टॉक सूची फ़ाइल नहीं मिली। कृपया 'ind_nifty500list.csv' फ़ाइल को अपलोड करें।")18else:19    # CSV फ़ाइल को DataFrame में पढ़ें20    stock_df = pd.read_csv(csv_file_path)21 22    # आवश्यक कॉलम मौजूद हैं या नहीं23    required_columns = {'Symbol', 'Company Name'}24    if not required_columns.issubset(stock_df.columns):25        st.error(f"CSV फ़ाइल में निम्नलिखित कॉलम होने चाहिए: {required_columns}")26    else:27        # उपयोगकर्ता इनपुट के लिए साइडबार बनाएं28        st.sidebar.header('स्कैनर सेटिंग्स')29        period_options = ['1mo', '3mo', '6mo', '1y']30        selected_period = st.sidebar.selectbox('डेटा अवधि चुनें', period_options, index=2)31 32        rsi_lower_threshold = st.sidebar.slider('RSI निचली सीमा', min_value=0, max_value=50, value=25)33        rsi_upper_threshold = st.sidebar.slider('RSI ऊपरी सीमा', min_value=50, max_value=100, value=75)34 35        # साप्ताहिक RSI जोड़ने का विकल्प36        st.sidebar.header('RSI सेटिंग्स')37        rsi_timeframe = st.sidebar.selectbox('RSI टाइमफ़्रेम चुनें', ['Daily', 'Weekly'])38 39        st.write("RSI और अन्य तकनीकी संकेतकों की गणना की जा रही है। कृपया प्रतीक्षा करें...")40 41        # प्रगति बार42        progress_bar = st.progress(0)43        total_stocks = len(stock_df)44        stocks_rsi_below = []45        stocks_rsi_above = []46 47        @st.cache_data(show_spinner=False)48        def get_stock_data(symbol, period, interval):49            # स्टॉक डेटा डाउनलोड करें50            return yf.download(symbol, period=period, interval=interval, progress=False)51 52        @st.cache_data(show_spinner=False)53        def get_stock_info(symbol):54            # स्टॉक की जानकारी प्राप्त करें55            ticker = yf.Ticker(symbol)56            info = ticker.info57            industry = info.get('industry', 'N/A')58            market_cap = info.get('marketCap', 'N/A')59            return industry, market_cap60 61        # RSI के लिए इंटरवल सेट करें62        if rsi_timeframe == 'Daily':63            interval = '1d'64        else:65            interval = '1wk'66 67        for idx, row in stock_df.iterrows():68            company_name = row['Company Name']69            symbol = row['Symbol']70            # यदि आवश्यक हो तो '.NS' जोड़ें71            if not symbol.endswith('.NS') and not symbol.endswith('.BO'):72                symbol += '.NS'73            try:74                # स्टॉक डेटा प्राप्त करें (कैश किया गया)75                data = get_stock_data(symbol, selected_period, interval)76                if data.empty:77                    continue78                # RSI की गणना करें79                delta = data['Close'].diff()80                up = delta.clip(lower=0)81                down = -delta.clip(upper=0)82                roll_up = up.rolling(window=14).mean()83                roll_down = down.rolling(window=14).mean()84                RS = roll_up / roll_down85                data['RSI'] = 100.0 - (100.0 / (1.0 + RS))86                latest_rsi = data['RSI'].iloc[-1]87 88                # Industry और Market Cap प्राप्त करें89                industry, market_cap = get_stock_info(symbol)90 91                # Market Cap को करोड़ों में बदलें92                if market_cap != 'N/A':93                    market_cap = round(market_cap / 1e7, 2)  # करोड़ों में94 95                # RSI मान के आधार पर स्टॉक्स को वर्गीकृत करें96                if latest_rsi < rsi_lower_threshold:97                    stocks_rsi_below.append({98                        'Company Name': company_name,99                        'Symbol': symbol,100                        'Industry': industry,101                        'Market Cap (करोड़ों में)': market_cap,102                        'RSI': round(latest_rsi, 2)103                    })104                elif latest_rsi > rsi_upper_threshold:105                    stocks_rsi_above.append({106                        'Company Name': company_name,107                        'Symbol': symbol,108                        'Industry': industry,109                        'Market Cap (करोड़ों में)': market_cap,110                        'RSI': round(latest_rsi, 2)111                    })112            except Exception as e:113                st.write(f"{symbol} के लिए त्रुटि: {e}")114                continue115            progress_bar.progress((idx + 1) / total_stocks)116 117        # परिणामों को DataFrame में परिवर्तित करें118        df_below = pd.DataFrame(stocks_rsi_below)119        df_above = pd.DataFrame(stocks_rsi_above)120 121        # उपयोगकर्ता से एक स्टॉक चुनने का विकल्प122        st.sidebar.header('स्टॉक विवरण देखें')123        all_companies = stock_df['Company Name'].tolist()124 125        # जब उपयोगकर्ता स्टॉक सूची में से क्लिक करें तो चयन करें126        selected_company = st.sidebar.selectbox('कंपनी चुनें', [''] + all_companies)127 128        st.subheader(f"RSI {rsi_lower_threshold} से कम वाले स्टॉक्स")129        if not df_below.empty:130            # प्रत्येक स्टॉक के लिए बटन जोड़ें131            for idx, row in df_below.iterrows():132                st.write(f"{row['Company Name']} ({row['Symbol']}) - RSI: {row['RSI']}")133                if st.button(f"विवरण देखें - {row['Company Name']}", key=f"below_{idx}"):134                    selected_company = row['Company Name']135            # डाउनलोड बटन136            csv_below = df_below.to_csv(index=False).encode('utf-8')137            st.download_button(138                label=f"RSI {rsi_lower_threshold} से कम वाले स्टॉक्स को CSV में डाउनलोड करें",139                data=csv_below,140                file_name=f'stocks_rsi_below_{rsi_lower_threshold}.csv',141                mime='text/csv'142            )143        else:144            st.write("कोई स्टॉक्स नहीं मिले।")145 146        st.subheader(f"RSI {rsi_upper_threshold} से अधिक वाले स्टॉक्स")147        if not df_above.empty:148            # प्रत्येक स्टॉक के लिए बटन जोड़ें149            for idx, row in df_above.iterrows():150                st.write(f"{row['Company Name']} ({row['Symbol']}) - RSI: {row['RSI']}")151                if st.button(f"विवरण देखें - {row['Company Name']}", key=f"above_{idx}"):152                    selected_company = row['Company Name']153            # डाउनलोड बटन154            csv_above = df_above.to_csv(index=False).encode('utf-8')155            st.download_button(156                label=f"RSI {rsi_upper_threshold} से अधिक वाले स्टॉक्स को CSV में डाउनलोड करें",157                data=csv_above,158                file_name=f'stocks_rsi_above_{rsi_upper_threshold}.csv',159                mime='text/csv'160            )161        else:162            st.write("कोई स्टॉक्स नहीं मिले।")163 164        if selected_company:165            symbol = stock_df.loc[stock_df['Company Name'] == selected_company, 'Symbol'].values[0]166            if not symbol.endswith('.NS') and not symbol.endswith('.BO'):167                symbol += '.NS'168            data = get_stock_data(symbol, selected_period, interval)169            if not data.empty:170                # RSI की गणना करें171                delta = data['Close'].diff()172                up = delta.clip(lower=0)173                down = -delta.clip(upper=0)174                roll_up = up.rolling(window=14).mean()175                roll_down = down.rolling(window=14).mean()176                RS = roll_up / roll_down177                data['RSI'] = 100.0 - (100.0 / (1.0 + RS))178 179                # MACD की गणना करें180                exp1 = data['Close'].ewm(span=12, adjust=False).mean()181                exp2 = data['Close'].ewm(span=26, adjust=False).mean()182                data['MACD'] = exp1 - exp2183                data['Signal Line'] = data['MACD'].ewm(span=9, adjust=False).mean()184 185                # OBV की गणना करें186                data['OBV'] = (np.sign(data['Close'].diff()) * data['Volume']).fillna(0).cumsum()187 188                # चार्ट प्रदर्शित करें189                st.subheader(f"{selected_company} ({symbol}) के तकनीकी संकेतक")190 191                # RSI चार्ट192                st.write("**RSI**")193                st.line_chart(data['RSI'], height=200)194 195                # MACD चार्ट196                st.write("**MACD**")197                st.line_chart(data[['MACD', 'Signal Line']], height=200)198 199                # OBV चार्ट200                st.write("**On-Balance Volume (OBV)**")201                st.line_chart(data['OBV'], height=200)202 203                # डेटा टेबल दिखाएं204                st.write("**डेटा टेबल**")205                st.write(data[['Close', 'RSI', 'MACD', 'Signal Line', 'OBV']].tail(30))206 207