eshan6704 commited on
Commit
4ce751a
·
verified ·
1 Parent(s): 04ef14c

Update stock.py

Browse files
Files changed (1) hide show
  1. stock.py +44 -42
stock.py CHANGED
@@ -67,79 +67,81 @@ from chart_builder import build_chart
67
  from ta_indi_pat import talib_df
68
 
69
 
70
- # -------------------------- INTRADAY ------------------------------
 
71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  def fetch_intraday(symbol, indicators=None):
73
  key = f"intraday_{symbol}"
74
 
75
- # 1️⃣ Check cache (HTML only)
76
  if exists(key, "html"):
77
  intra_html = load(key, "html")
78
  if intra_html is not False:
 
79
  return intra_html
80
 
81
- # 2️⃣ Fetch fresh data
82
  try:
 
83
  df = intraday(symbol)
84
-
85
- if df is False or df is None or df.empty:
86
  return wrap_html(f"<h1>No intraday data for {symbol}</h1>")
87
 
88
- # Flatten columns if MultiIndex
89
  if isinstance(df.columns, pd.MultiIndex):
90
  df.columns = df.columns.get_level_values(0)
91
 
92
- # Optional upload (unchanged)
93
- file_name = f"intraday/{symbol}.csv"
94
- upload_file("eshanhf", file_name, df)
95
-
96
- # Build HTML
97
  table_html = make_table(df.tail(50))
98
- intra_html = wrap_html(
99
- f"<h2>Last 50 Rows</h2>{table_html}",
100
- title=f"{symbol} Intraday"
101
- )
102
 
103
- # 3️⃣ Save HTML cache
104
  save(key, intra_html, "html")
105
 
106
  return intra_html
107
-
108
  except Exception as e:
 
109
  return wrap_html(f"<h1>Error: {e}</h1>")
110
 
111
- # -------------------------- DAILY ------------------------------
 
 
 
 
 
 
 
 
 
 
112
 
113
- def fetch_daily(symbol, source="yfinance", max_rows=200):
114
- if exists("daily_"+symbol, "html"):
115
- daily_html = load("daily_"+symbol, "html")
116
- else:
117
  try:
 
118
  df = daily(symbol)
119
-
 
120
 
121
  if isinstance(df.columns, pd.MultiIndex):
122
  df.columns = df.columns.get_level_values(0)
123
- file_name = f"daily/{symbol}.csv"
124
- upload_file("eshanhf",file_name,df)
125
- df_disp = df.head(max_rows)
126
- combined_df = talib_df(df_disp)
127
- table_html = combined_df.to_html(
128
- classes="table table-striped table-bordered",
129
- index=False
130
- )
131
-
132
- scroll = f"""
133
- <div style="overflow:auto; max-height:600px; border:1px solid #ccc;">
134
- {table_html}
135
- </div>
136
- """
137
-
138
- daily_html= wrap_html(f"<h2>{symbol} Daily</h2>" + html_card("TA-Lib", scroll))
139
- save("daily_"+symbol,daily_html, "html")
140
  except Exception as e:
141
- daily_html= html_card("Error", str(e))
142
- return daily_html
 
143
 
144
  # -------------------------- QUARTERLY ------------------------------
145
 
 
67
  from ta_indi_pat import talib_df
68
 
69
 
70
+ def wrap_html(content, title="Market Data"):
71
+ return f"<html><head><title>{title}</title></head><body>{content}</body></html>"
72
 
73
+ def make_table(df: pd.DataFrame):
74
+ return df.to_html(index=False)
75
+
76
+ def intraday(symbol):
77
+ """Fetch 1-day intraday data (1-min interval)"""
78
+
79
+ df = yf.download(symbol + ".NS", period="1d", interval="5m", progress=False)
80
+ print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] fetching from yfinance intraday: {e}")
81
+ return df.round(2)
82
+
83
+ =========
84
+ # Fetch Intraday
85
+ # ==============================
86
  def fetch_intraday(symbol, indicators=None):
87
  key = f"intraday_{symbol}"
88
 
 
89
  if exists(key, "html"):
90
  intra_html = load(key, "html")
91
  if intra_html is not False:
92
+ print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Using cached HTML for {symbol}")
93
  return intra_html
94
 
 
95
  try:
96
+ print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Fetching intraday data for {symbol}")
97
  df = intraday(symbol)
98
+ if df is None or df.empty:
 
99
  return wrap_html(f"<h1>No intraday data for {symbol}</h1>")
100
 
 
101
  if isinstance(df.columns, pd.MultiIndex):
102
  df.columns = df.columns.get_level_values(0)
103
 
 
 
 
 
 
104
  table_html = make_table(df.tail(50))
105
+ intra_html = wrap_html(f"<h2>Last 50 Rows</h2>{table_html}", title=f"{symbol} Intraday")
 
 
 
106
 
 
107
  save(key, intra_html, "html")
108
 
109
  return intra_html
 
110
  except Exception as e:
111
+ print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Error in fetch_intraday: {e}")
112
  return wrap_html(f"<h1>Error: {e}</h1>")
113
 
114
+ # ==============================
115
+ # Fetch Daily
116
+ # ==============================
117
+ def fetch_daily(symbol):
118
+ key = f"daily_{symbol}"
119
+
120
+ if exists(key, "html"):
121
+ daily_html = load(key, "html")
122
+ if daily_html is not False:
123
+ print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Using cached HTML for {symbol} daily")
124
+ return daily_html
125
 
 
 
 
 
126
  try:
127
+ print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Fetching daily data for {symbol}")
128
  df = daily(symbol)
129
+ if df is None or df.empty:
130
+ return wrap_html(f"<h1>No daily data for {symbol}</h1>")
131
 
132
  if isinstance(df.columns, pd.MultiIndex):
133
  df.columns = df.columns.get_level_values(0)
134
+
135
+ table_html = make_table(df.tail(50))
136
+ daily_html = wrap_html(f"<h2>Last 50 Rows</h2>{table_html}", title=f"{symbol} Daily")
137
+
138
+ save(key, daily_html, "html")
139
+
140
+ return daily_html
 
 
 
 
 
 
 
 
 
 
141
  except Exception as e:
142
+ print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Error in fetch_daily: {e}")
143
+ return wrap_html(f"<h1>Error: {e}</h1>")
144
+
145
 
146
  # -------------------------- QUARTERLY ------------------------------
147