Spaces:
Running
Running
Update app.py
Browse filesMonth, Week, Day deltas for stocks
app.py
CHANGED
@@ -129,11 +129,11 @@ def get_stock_news(search_symbol):
|
|
129 |
rv += f'Link: [URL]({item["link"]})\n\n'
|
130 |
|
131 |
if have_symbol:
|
132 |
-
(plot_df, ymax,
|
133 |
else:
|
134 |
-
(plot_df, ymax,
|
135 |
|
136 |
-
return (rv, plot_df, ymax,
|
137 |
|
138 |
def stock_history_df(num_weeks):
|
139 |
values = []
|
@@ -177,18 +177,30 @@ def stock_history_df(num_weeks):
|
|
177 |
# # ax.set_xlim(dates[0], dates[-1:])
|
178 |
# return fig
|
179 |
|
180 |
-
def lms_fit_trend(dates, values):
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
|
193 |
def stock_week_df(symbol):
|
194 |
try:
|
@@ -219,16 +231,17 @@ def stock_week_df(symbol):
|
|
219 |
for row in df.index:
|
220 |
dates.append(row.strftime('%Y-%m-%d'))
|
221 |
# fit_data = lms_fit(dates, values)
|
222 |
-
pct_delta = lms_fit_trend(dates, values)
|
|
|
223 |
data = {
|
224 |
"date": dates,
|
225 |
"value" : values,
|
226 |
# "fit" : fit_data
|
227 |
}
|
228 |
# fig = make_mp_figure(dates, values, fit_data, ymax)
|
229 |
-
return (pd.DataFrame(data), ymax,
|
230 |
except:
|
231 |
-
return (pd.DataFrame(), ymax, 0.0)
|
232 |
|
233 |
def get_stock_report(verbose = True, offset = 0):
|
234 |
try:
|
@@ -613,9 +626,9 @@ def chat(prompt, user_window, pwd_window, past, response, gptModel, uploaded_ima
|
|
613 |
elif num >= 3:
|
614 |
if args[1] == 'news':
|
615 |
symbol = ' '.join(args[2:])
|
616 |
-
(response, plot_df, ymax,
|
617 |
ymax *= 1.1
|
618 |
-
mdtxt = md(f'News for {symbol}:\
|
619 |
if plot_df.empty:
|
620 |
return [past, mdtxt, None, gptModel, uploaded_image_file, plot]
|
621 |
else:
|
|
|
129 |
rv += f'Link: [URL]({item["link"]})\n\n'
|
130 |
|
131 |
if have_symbol:
|
132 |
+
(plot_df, ymax, deltas) = stock_week_df(search_symbol)
|
133 |
else:
|
134 |
+
(plot_df, ymax, deltas) = (pd.DataFrame(), 0.0, (0.0, 0.0, 0.0))
|
135 |
|
136 |
+
return (rv, plot_df, ymax, deltas)
|
137 |
|
138 |
def stock_history_df(num_weeks):
|
139 |
values = []
|
|
|
177 |
# # ax.set_xlim(dates[0], dates[-1:])
|
178 |
# return fig
|
179 |
|
180 |
+
# def lms_fit_trend(dates, values):
|
181 |
+
# # days = []
|
182 |
+
# # fit_data = []
|
183 |
+
# days = list(range(0, len(dates)))
|
184 |
+
# fit = np.polyfit(days, values, 1)
|
185 |
+
# delta = len(dates) * float(fit[0])
|
186 |
+
# avg = float(fit[1]) + 0.5 * delta
|
187 |
+
# pct_delta = 100 * delta / avg
|
188 |
+
# # for day in days:
|
189 |
+
# # fit_data.append(float(fit[0]) * day + float(fit[1]) )
|
190 |
+
# # return fit_data
|
191 |
+
# return pct_delta
|
192 |
+
|
193 |
+
def stock_deltas(values):
|
194 |
+
num = len(values)
|
195 |
+
month_end_avg = float(np.average(np.array(values[-3:])))
|
196 |
+
month_start_avg = float(np.average(np.array(values[0:4])))
|
197 |
+
week_start_avg = float(np.average(np.array(values[-7:-4])))
|
198 |
+
week_end_avg = float(np.average(np.array(values[-2:])))
|
199 |
+
month_delta = 100 * (month_end_avg - month_start_avg)/month_start_avg
|
200 |
+
week_delta = 100 * (week_end_avg - week_start_avg)/week_start_avg
|
201 |
+
daily_delta = 100 * ((float(values[num-1])/float(values[num-2])) - 1.0)
|
202 |
+
# avg = np.average(npa)
|
203 |
+
return (month_delta, week_delta, daily_delta)
|
204 |
|
205 |
def stock_week_df(symbol):
|
206 |
try:
|
|
|
231 |
for row in df.index:
|
232 |
dates.append(row.strftime('%Y-%m-%d'))
|
233 |
# fit_data = lms_fit(dates, values)
|
234 |
+
# pct_delta = lms_fit_trend(dates, values)
|
235 |
+
deltas = stock_deltas(values)
|
236 |
data = {
|
237 |
"date": dates,
|
238 |
"value" : values,
|
239 |
# "fit" : fit_data
|
240 |
}
|
241 |
# fig = make_mp_figure(dates, values, fit_data, ymax)
|
242 |
+
return (pd.DataFrame(data), ymax, deltas)
|
243 |
except:
|
244 |
+
return (pd.DataFrame(), ymax, (0.0, 0.0, 0.0))
|
245 |
|
246 |
def get_stock_report(verbose = True, offset = 0):
|
247 |
try:
|
|
|
626 |
elif num >= 3:
|
627 |
if args[1] == 'news':
|
628 |
symbol = ' '.join(args[2:])
|
629 |
+
(response, plot_df, ymax, (dm, dw, dd)) = get_stock_news(symbol)
|
630 |
ymax *= 1.1
|
631 |
+
mdtxt = md(f'News for {symbol}:\nTrends: Month = {dm:.1f}%, Week = {dw:.1f}%, Day = {dd:.1f}%\n\n' + response)
|
632 |
if plot_df.empty:
|
633 |
return [past, mdtxt, None, gptModel, uploaded_image_file, plot]
|
634 |
else:
|