dlflannery commited on
Commit
cd06238
·
verified ·
1 Parent(s): 49c7033

Update app.py

Browse files

Month, Week, Day deltas for stocks

Files changed (1) hide show
  1. app.py +33 -20
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, pct_delta) = stock_week_df(search_symbol)
133
  else:
134
- (plot_df, ymax, pct_delta) = (pd.DataFrame(), 0.0, 0.0)
135
 
136
- return (rv, plot_df, ymax, pct_delta)
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
- # 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_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, pct_delta)
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, pct_delta) = get_stock_news(symbol)
617
  ymax *= 1.1
618
- mdtxt = md(f'News for {symbol}:\nTrend = {int(pct_delta)}%\n\n' + response)
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: