jarvisx17 commited on
Commit
ff0b205
·
verified ·
1 Parent(s): e907bcd

Update stls.py

Browse files
Files changed (1) hide show
  1. stls.py +47 -6
stls.py CHANGED
@@ -1,14 +1,54 @@
1
- import yfinance as yf
2
  import pandas as pd
3
  from datetime import datetime, timedelta
4
  from pymongo import MongoClient
5
  import pytz
6
  import os
 
7
 
8
  mongo_url = os.environ['MongoURL']
9
  df_logo = pd.read_csv('https://raw.githubusercontent.com/jarvisx17/nifty500/main/Stocks.csv')
10
  df_logo = df_logo[['Symbol','Industry', "logo", "FNO"]]
11
  tz = pytz.timezone('Asia/Kolkata')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  def UpdatedCollectionName():
13
  current_time = datetime.now(tz)
14
  collection_name = current_time.strftime('%Y-%m-%d')
@@ -35,8 +75,7 @@ def get_rsi(close, lookback=14):
35
  down_ewm = down_series.ewm(com=lookback - 1, adjust=False).mean()
36
  rs = up_ewm / down_ewm
37
  rsi = 100 - (100 / (1 + rs))
38
- rsi_df = pd.DataFrame(rsi, columns=['RSI'])
39
- return rsi_df
40
 
41
  def Stocks():
42
  # end_date = datetime.today()
@@ -58,14 +97,16 @@ def Stocks():
58
  print("Downloading data...")
59
  for symbol in nifty500_symbols:
60
  try:
61
- stock_data = yf.download(symbol, start=start_date, end=end_date, progress=False)
62
  stock_data['Symbol'] = symbol
63
  nifty500_data = pd.concat([nifty500_data, stock_data], axis=0)
64
  except Exception as e:
65
  print(f"Error fetching data for {symbol}: {e}")
66
 
67
- nifty500_data.reset_index(inplace=True)
68
- nifty500_data['RSI'] = nifty500_data.groupby('Symbol')['Close'].apply(lambda x: get_rsi(x, lookback=14))
 
 
69
  nifty500_data['SMA20'] = nifty500_data.groupby('Symbol')['Close'].transform(lambda x: x.rolling(window=20).mean())
70
  nifty500_data['PercentageChange'] = nifty500_data.groupby('Symbol')['Close'].pct_change() * 100
71
  nifty500_data_last_2_rows = nifty500_data.groupby('Symbol').tail(2)
 
 
1
  import pandas as pd
2
  from datetime import datetime, timedelta
3
  from pymongo import MongoClient
4
  import pytz
5
  import os
6
+ import requests
7
 
8
  mongo_url = os.environ['MongoURL']
9
  df_logo = pd.read_csv('https://raw.githubusercontent.com/jarvisx17/nifty500/main/Stocks.csv')
10
  df_logo = df_logo[['Symbol','Industry', "logo", "FNO"]]
11
  tz = pytz.timezone('Asia/Kolkata')
12
+
13
+ base_url = "https://groww.in/v1/api/charting_service/v3/chart/exchange/NSE/segment/CASH/"
14
+ indian_timezone = pytz.timezone('Asia/Kolkata')
15
+ utc_timezone = pytz.timezone('UTC')
16
+ headers = {
17
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
18
+ }
19
+
20
+ def get_time_range(days=7):
21
+ current_time = datetime.now(indian_timezone)
22
+ start_time = current_time - timedelta(days=days)
23
+ start_time_utc = start_time.astimezone(pytz.utc)
24
+ current_time_utc = current_time.astimezone(pytz.utc)
25
+ start_time_millis = int(start_time_utc.timestamp() * 1000)
26
+ end_time_millis = int(current_time_utc.timestamp() * 1000)
27
+ return start_time_millis, end_time_millis
28
+
29
+ def fetch_stock_data(symbol, interval=15, days=7):
30
+ start_time, end_time = get_time_range(days)
31
+ params = {
32
+ 'endTimeInMillis': end_time,
33
+ 'intervalInMinutes': interval,
34
+ 'startTimeInMillis': start_time,
35
+ }
36
+ try:
37
+ print("Downloading data of", symbol.upper())
38
+ response = requests.get(base_url + symbol.upper(), params=params, headers=headers)
39
+ response.raise_for_status()
40
+ data = response.json()
41
+ columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
42
+ for row in data['candles']:
43
+ row[0] = datetime.utcfromtimestamp(row[0])
44
+ df = pd.DataFrame(data['candles'], columns=columns)
45
+ df['Date'] = pd.to_datetime(df['Date'])
46
+ df['Date'] = df['Date'].dt.tz_localize(utc_timezone).dt.tz_convert(indian_timezone)
47
+ return df
48
+ except requests.exceptions.RequestException as e:
49
+ print(f"Error during API request: {e}")
50
+ return None
51
+
52
  def UpdatedCollectionName():
53
  current_time = datetime.now(tz)
54
  collection_name = current_time.strftime('%Y-%m-%d')
 
75
  down_ewm = down_series.ewm(com=lookback - 1, adjust=False).mean()
76
  rs = up_ewm / down_ewm
77
  rsi = 100 - (100 / (1 + rs))
78
+ return rsi
 
79
 
80
  def Stocks():
81
  # end_date = datetime.today()
 
97
  print("Downloading data...")
98
  for symbol in nifty500_symbols:
99
  try:
100
+ stock_data = fetch_stock_data(symbol.replace('.NS',''), interval=1440, days=365)
101
  stock_data['Symbol'] = symbol
102
  nifty500_data = pd.concat([nifty500_data, stock_data], axis=0)
103
  except Exception as e:
104
  print(f"Error fetching data for {symbol}: {e}")
105
 
106
+ nifty500_data['RSI'] = (
107
+ nifty500_data.groupby('Symbol')['Close']
108
+ .transform(lambda x: get_rsi(x, lookback=14))
109
+ )
110
  nifty500_data['SMA20'] = nifty500_data.groupby('Symbol')['Close'].transform(lambda x: x.rolling(window=20).mean())
111
  nifty500_data['PercentageChange'] = nifty500_data.groupby('Symbol')['Close'].pct_change() * 100
112
  nifty500_data_last_2_rows = nifty500_data.groupby('Symbol').tail(2)