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:
|