dlflannery commited on
Commit
d891f63
·
verified ·
1 Parent(s): bad15d2

Update app.py

Browse files

Added plot to stock news. Fixed: quotes were highs rather than closes

Files changed (1) hide show
  1. app.py +80 -12
app.py CHANGED
@@ -97,28 +97,36 @@ def stock_list():
97
  return rv
98
 
99
  def get_stock_news(search_symbol):
100
- name_list = []
101
  fuzzy = True
 
 
102
  with open(stock_data_path, 'rt') as fp:
103
  lines = fp.readlines()
104
  for line in lines:
105
  (name, symbol, shares) = line.rstrip().split(',')
106
- name = name.strip()
107
- name_list.append(name)
108
- search_term = search_symbol.strip().upper()
109
- if search_symbol in name_list:
110
- fuzzy = False
111
  try:
112
  news = yf.Search(search_term, news_count=5, enable_fuzzy_query=fuzzy).news
113
  except:
114
- return f'No results for search term {search_term}, check spelling'
115
  rv = ''
116
  for item in news:
117
  rv += f'Title: {item["title"]}\n'
118
  rv += f'Publisher: {item["publisher"]}\n'
119
  rv += f'Date published: {date_from_utime(item["providerPublishTime"])}\n'
120
  rv += f'Link: [URL]({item["link"]})\n\n'
121
- return rv
 
 
 
 
 
 
122
 
123
  def stock_history_df(num_weeks):
124
  values = []
@@ -139,6 +147,60 @@ def stock_history_df(num_weeks):
139
  }
140
  return (pd.DataFrame(data), f'{int(xmax + 10000)}')
141
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
  def get_stock_report(verbose = True, offset = 0):
143
  try:
144
  stock_data = {}
@@ -197,7 +259,7 @@ def get_last_closing(symbol, offset=0, timeout=10):
197
  for row in data_top.index:
198
  closing_date = row.strftime('%Y-%m-%d')
199
  # print(closing_date)
200
- return (df.iat[-1,1], closing_date)
201
  except:
202
  return (0.0, "0000-00-00")
203
 
@@ -442,8 +504,14 @@ def chat(prompt, user_window, pwd_window, past, response, gptModel, uploaded_ima
442
  elif num >= 3:
443
  if args[1] == 'news':
444
  symbol = ' '.join(args[2:])
445
- response = get_stock_news(symbol)
446
- return [past, md(response), None, gptModel, uploaded_image_file, plot]
 
 
 
 
 
 
447
  # elif arg[1] == 'history':
448
  # symbol = arg[2]
449
  # response = 'ok' # get_
@@ -898,8 +966,8 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
898
  # value="gpt-3.5-turbo", label="GPT Model", interactive=True)
899
  button_do_image = gr.Button(value='Make Image')
900
  button_get_image = gr.Button(value='Upload Image to Analyze')
901
- submit_button = gr.Button(value="Submit Prompt/Question")
902
  speak_output = gr.Button(value="Speak Dialog", visible=True)
 
903
  prompt_window = gr.Textbox(label = "Prompt or Question")
904
  gr.Markdown('### **Dialog:**')
905
  output_window = gr.Markdown(container=True)
 
97
  return rv
98
 
99
  def get_stock_news(search_symbol):
100
+ stock_list = {}
101
  fuzzy = True
102
+ have_symbol = False
103
+ search_symbol = search_symbol.strip().upper()
104
  with open(stock_data_path, 'rt') as fp:
105
  lines = fp.readlines()
106
  for line in lines:
107
  (name, symbol, shares) = line.rstrip().split(',')
108
+ stock_list[symbol.strip()] = name.strip()
109
+ search_term = search_symbol
110
+ if search_symbol in stock_list.keys():
111
+ have_symbol = True
112
+ search_term = stock_list[search_symbol]
113
  try:
114
  news = yf.Search(search_term, news_count=5, enable_fuzzy_query=fuzzy).news
115
  except:
116
+ return (f'No results for search term {search_term}, check spelling', None)
117
  rv = ''
118
  for item in news:
119
  rv += f'Title: {item["title"]}\n'
120
  rv += f'Publisher: {item["publisher"]}\n'
121
  rv += f'Date published: {date_from_utime(item["providerPublishTime"])}\n'
122
  rv += f'Link: [URL]({item["link"]})\n\n'
123
+
124
+ if have_symbol:
125
+ (plot_df, ymax) = stock_week_df(search_symbol)
126
+ else:
127
+ (plot_df, ymax) = (pd.DataFrame(), 0.0)
128
+
129
+ return (rv, plot_df, ymax)
130
 
131
  def stock_history_df(num_weeks):
132
  values = []
 
147
  }
148
  return (pd.DataFrame(data), f'{int(xmax + 10000)}')
149
 
150
+ def stock_week_df(symbol):
151
+ try:
152
+ dates = []
153
+ values = []
154
+ ymax = 0
155
+ etime = etz_now()
156
+ if etime.hour >= 16:
157
+ etime = etime + timedelta(days=1)
158
+ week_ago = etime - timedelta(days=8)
159
+ end = etime.strftime('%Y-%m-%d')
160
+ start = week_ago.strftime('%Y-%m-%d')
161
+ df = yf.download(symbol.upper(),
162
+ start = start,
163
+ end = end,
164
+ progress = False,
165
+ )
166
+ vals2d = df.values.tolist()
167
+ valsTxt = []
168
+ numDays = len(vals2d)
169
+ for i in range(numDays):
170
+ valsTxt.append(vals2d[i][0])
171
+ for val in valsTxt:
172
+ v = float(val)
173
+ values.append(v)
174
+ if v > ymax:
175
+ ymax = v
176
+ for row in df.index:
177
+ dates.append(row.strftime('%Y-%m-%d'))
178
+ data = {
179
+ "date": dates,
180
+ "value" : values
181
+ }
182
+ return (pd.DataFrame(data), ymax)
183
+ except:
184
+ return (pd.DataFrame(), ymax)
185
+
186
+
187
+ for offset in range(num_weeks+1):
188
+ (value, date) = get_stock_report(False, offset)
189
+ date = date[5:]
190
+ values.append(value)
191
+ dates.append(date)
192
+ if float(value) > xmax:
193
+ xmax = float(value)
194
+ values.reverse()
195
+ dates.reverse()
196
+ data = {
197
+ "date": dates,
198
+ "value" : values
199
+ }
200
+ return (pd.DataFrame(data), f'{int(xmax + 10000)}')
201
+
202
+
203
+
204
  def get_stock_report(verbose = True, offset = 0):
205
  try:
206
  stock_data = {}
 
259
  for row in data_top.index:
260
  closing_date = row.strftime('%Y-%m-%d')
261
  # print(closing_date)
262
+ return (df.iat[-1,0], closing_date)
263
  except:
264
  return (0.0, "0000-00-00")
265
 
 
504
  elif num >= 3:
505
  if args[1] == 'news':
506
  symbol = ' '.join(args[2:])
507
+ (response, plot_df, ymax) = get_stock_news(symbol)
508
+ ymax *= 1.1
509
+ if plot_df.empty:
510
+ return [past, md(response), None, gptModel, uploaded_image_file, plot]
511
+ else:
512
+ return [past, md(response), None, gptModel, uploaded_image_file,
513
+ gr.LinePlot(plot_df, x="date", y="value", visible=True,
514
+ y_lim=[0, ymax],label=f"{symbol} Recent Prices")]
515
  # elif arg[1] == 'history':
516
  # symbol = arg[2]
517
  # response = 'ok' # get_
 
966
  # value="gpt-3.5-turbo", label="GPT Model", interactive=True)
967
  button_do_image = gr.Button(value='Make Image')
968
  button_get_image = gr.Button(value='Upload Image to Analyze')
 
969
  speak_output = gr.Button(value="Speak Dialog", visible=True)
970
+ submit_button = gr.Button(value="Submit Prompt/Question")
971
  prompt_window = gr.Textbox(label = "Prompt or Question")
972
  gr.Markdown('### **Dialog:**')
973
  output_window = gr.Markdown(container=True)