wnstnb commited on
Commit
6b16014
ยท
1 Parent(s): 9213cee

added download history button and some other QOL stuff

Browse files
Files changed (2) hide show
  1. app.py +133 -47
  2. model_30m.py +0 -1
app.py CHANGED
@@ -10,16 +10,18 @@ st.set_page_config(
10
  )
11
 
12
  st.title('๐ŸŽฎ Gameday Model for $SPX')
13
- st.markdown('**PLEASE NOTE:** Model should be run at or after market open. Documentation and information about model coming soon.')
14
-
15
- if st.button("๐Ÿงน Clear All"):
16
- st.cache_data.clear()
17
  col1, col2 = st.columns(2)
 
 
 
 
 
 
18
 
19
  option = st.selectbox(
20
  'Select a model, then run.',
21
  ('', '๐ŸŒž At Open', 'โŒš 30 Mins', 'โณ 60 Mins'))
22
-
23
  if option == '':
24
  st.write('Gotta pick one.')
25
 
@@ -188,23 +190,51 @@ elif option == '๐ŸŒž At Open':
188
  return 'โŒ'
189
  else:
190
  return '๐ŸŸจ'
 
 
 
 
 
 
 
 
 
 
 
 
191
 
192
  perf_daily = res1.copy()
 
193
  perf_daily['Accuracy'] = [get_acc(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
194
-
195
- tab1.subheader(f'Pred for {curr_date} as of 6:30AM PST')
196
- tab1.write(results)
197
- tab1.write(df_probas)
198
-
199
- tab2.subheader('Latest Data for Pred')
200
- tab2.write(new_pred)
201
-
202
- tab3.subheader('Historical Data')
203
- tab3.write(df_final)
204
-
205
- tab4.subheader('Performance')
206
- tab4.write(df_performance)
207
- tab4.write(perf_daily)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
 
209
  elif option == 'โŒš 30 Mins':
210
  if st.button('๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ Run'):
@@ -381,23 +411,51 @@ elif option == 'โŒš 30 Mins':
381
  return 'โŒ'
382
  else:
383
  return '๐ŸŸจ'
 
 
 
 
 
 
 
 
 
 
 
 
384
 
385
  perf_daily = res1.copy()
 
386
  perf_daily['Accuracy'] = [get_acc(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
387
-
388
- tab1.subheader(f'Pred for {curr_date} as of 7AM PST')
389
- tab1.write(results)
390
- tab1.write(df_probas)
391
-
392
- tab2.subheader('Latest Data for Pred')
393
- tab2.write(new_pred)
394
-
395
- tab3.subheader('Historical Data')
396
- tab3.write(df_final)
397
-
398
- tab4.subheader('Performance')
399
- tab4.write(df_performance)
400
- tab4.write(perf_daily.sort_index(ascending=False))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
401
 
402
  elif option == 'โณ 60 Mins':
403
  if st.button('๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ Run'):
@@ -573,20 +631,48 @@ elif option == 'โณ 60 Mins':
573
  return 'โŒ'
574
  else:
575
  return '๐ŸŸจ'
 
 
 
 
 
 
 
 
 
 
 
 
576
 
577
  perf_daily = res1.copy()
 
578
  perf_daily['Accuracy'] = [get_acc(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
579
-
580
- tab1.subheader(f'Pred for {curr_date} as of 7:30AM PST')
581
- tab1.write(results)
582
- tab1.write(df_probas)
583
-
584
- tab2.subheader('Latest Data for Pred')
585
- tab2.write(new_pred)
586
-
587
- tab3.subheader('Historical Data')
588
- tab3.write(df_final)
589
-
590
- tab4.subheader('Performance')
591
- tab4.write(df_performance)
592
- tab4.write(perf_daily)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  )
11
 
12
  st.title('๐ŸŽฎ Gameday Model for $SPX')
 
 
 
 
13
  col1, col2 = st.columns(2)
14
+ with col1:
15
+ st.markdown('**PLEASE NOTE:** Model should be run at or after market open. Documentation on the model and its features [can be found here.](https://huggingface.co/spaces/boomsss/gamedayspx/blob/main/README.md)')
16
+ with col2:
17
+ st.caption('Clear before next run.')
18
+ if st.button("๐Ÿงน Clear All"):
19
+ st.cache_data.clear()
20
 
21
  option = st.selectbox(
22
  'Select a model, then run.',
23
  ('', '๐ŸŒž At Open', 'โŒš 30 Mins', 'โณ 60 Mins'))
24
+
25
  if option == '':
26
  st.write('Gotta pick one.')
27
 
 
190
  return 'โŒ'
191
  else:
192
  return '๐ŸŸจ'
193
+
194
+ def get_acc_text(t, p):
195
+ if t == False and p <= 0.4:
196
+ return 'Correct'
197
+ elif t == True and p > 0.6:
198
+ return 'Correct'
199
+ elif t == False and p > 0.6:
200
+ return 'Incorrect'
201
+ elif t == True and p <= 0.4:
202
+ return 'Incorrect'
203
+ else:
204
+ return 'No Action'
205
 
206
  perf_daily = res1.copy()
207
+ perf_daily['TargetDate'] = perf_daily.index + BDay(1)
208
  perf_daily['Accuracy'] = [get_acc(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
209
+ perf_daily['AccuracyText'] = [get_acc_text(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
210
+ perf_daily['ConfidenceScore'] = [x if x > 0.6 else 1-x if x <= 0.4 else x for x in perf_daily['Predicted']]
211
+ perf_daily = perf_daily[['TargetDate','Predicted','True','Accuracy','AccuracyText','ConfidenceScore']]
212
+
213
+ def convert_df(df):
214
+ # IMPORTANT: Cache the conversion to prevent computation on every rerun
215
+ return df.to_csv()
216
+
217
+ csv = convert_df(perf_daily)
218
+
219
+ with tab1:
220
+ st.subheader(f'Pred for {curr_date} as of 6:30AM PST')
221
+ st.write(results)
222
+ st.write(df_probas)
223
+ with tab2:
224
+ st.subheader('Latest Data for Pred')
225
+ st.write(new_pred)
226
+ with tab3:
227
+ st.subheader('Historical Data')
228
+ st.write(df_final)
229
+ with tab4:
230
+ st.subheader('Performance')
231
+ st.write(df_performance)
232
+ st.write(perf_daily[['TargetDate','Predicted','True','Accuracy']])
233
+ st.download_button(
234
+ label="Download Historical Performance",
235
+ data=csv,
236
+ file_name='performance_for_at_open_model.csv',
237
+ )
238
 
239
  elif option == 'โŒš 30 Mins':
240
  if st.button('๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ Run'):
 
411
  return 'โŒ'
412
  else:
413
  return '๐ŸŸจ'
414
+
415
+ def get_acc_text(t, p):
416
+ if t == False and p <= 0.4:
417
+ return 'Correct'
418
+ elif t == True and p > 0.6:
419
+ return 'Correct'
420
+ elif t == False and p > 0.6:
421
+ return 'Incorrect'
422
+ elif t == True and p <= 0.4:
423
+ return 'Incorrect'
424
+ else:
425
+ return 'No Action'
426
 
427
  perf_daily = res1.copy()
428
+ perf_daily['TargetDate'] = perf_daily.index + BDay(1)
429
  perf_daily['Accuracy'] = [get_acc(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
430
+ perf_daily['AccuracyText'] = [get_acc_text(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
431
+ perf_daily['ConfidenceScore'] = [x if x > 0.6 else 1-x if x <= 0.4 else x for x in perf_daily['Predicted']]
432
+ perf_daily = perf_daily[['TargetDate','Predicted','True','Accuracy','AccuracyText','ConfidenceScore']]
433
+
434
+ def convert_df(df):
435
+ # IMPORTANT: Cache the conversion to prevent computation on every rerun
436
+ return df.to_csv()
437
+
438
+ csv = convert_df(perf_daily)
439
+
440
+ with tab1:
441
+ st.subheader(f'Pred for {curr_date} as of 7AM PST')
442
+ st.write(results)
443
+ st.write(df_probas)
444
+ with tab2:
445
+ st.subheader('Latest Data for Pred')
446
+ st.write(new_pred)
447
+ with tab3:
448
+ st.subheader('Historical Data')
449
+ st.write(df_final)
450
+ with tab4:
451
+ st.subheader('Performance')
452
+ st.write(df_performance)
453
+ st.write(perf_daily[['TargetDate','Predicted','True','Accuracy']])
454
+ st.download_button(
455
+ label="Download Historical Performance",
456
+ data=csv,
457
+ file_name='performance_for_30m_model.csv',
458
+ )
459
 
460
  elif option == 'โณ 60 Mins':
461
  if st.button('๐Ÿƒ๐Ÿฝโ€โ™‚๏ธ Run'):
 
631
  return 'โŒ'
632
  else:
633
  return '๐ŸŸจ'
634
+
635
+ def get_acc_text(t, p):
636
+ if t == False and p <= 0.4:
637
+ return 'Correct'
638
+ elif t == True and p > 0.6:
639
+ return 'Correct'
640
+ elif t == False and p > 0.6:
641
+ return 'Incorrect'
642
+ elif t == True and p <= 0.4:
643
+ return 'Incorrect'
644
+ else:
645
+ return 'No Action'
646
 
647
  perf_daily = res1.copy()
648
+ perf_daily['TargetDate'] = perf_daily.index + BDay(1)
649
  perf_daily['Accuracy'] = [get_acc(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
650
+ perf_daily['AccuracyText'] = [get_acc_text(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]
651
+ perf_daily['ConfidenceScore'] = [x if x > 0.6 else 1-x if x <= 0.4 else x for x in perf_daily['Predicted']]
652
+ perf_daily = perf_daily[['TargetDate','Predicted','True','Accuracy','AccuracyText','ConfidenceScore']]
653
+
654
+ def convert_df(df):
655
+ # IMPORTANT: Cache the conversion to prevent computation on every rerun
656
+ return df.to_csv()
657
+
658
+ csv = convert_df(perf_daily)
659
+
660
+ with tab1:
661
+ st.subheader(f'Pred for {curr_date} as of 7:30AM PST')
662
+ st.write(results)
663
+ st.write(df_probas)
664
+ with tab2:
665
+ st.subheader('Latest Data for Pred')
666
+ st.write(new_pred)
667
+ with tab3:
668
+ st.subheader('Historical Data')
669
+ st.write(df_final)
670
+ with tab4:
671
+ st.subheader('Performance')
672
+ st.write(df_performance)
673
+ st.write(perf_daily[['TargetDate','Predicted','True','Accuracy']])
674
+ st.download_button(
675
+ label="Download Historical Performance",
676
+ data=csv,
677
+ file_name='performance_for_60m_model.csv',
678
+ )
model_30m.py CHANGED
@@ -305,7 +305,6 @@ def get_data():
305
  data['CurrentHigh30toClose'] = (data['CurrentHigh30'] / data['Close']) - 1
306
  data['CurrentLow30toClose'] = (data['CurrentLow30'] / data['Close']) - 1
307
  data['CurrentClose30toClose'] = (data['CurrentClose30'] / data['Close']) - 1
308
-
309
  data['CurrentRange30'] = (data['CurrentHigh30'] - data['CurrentLow30']) / data['Close']
310
  data['GapFill30'] = [low <= prev_close if gap > 0 else high >= prev_close for high, low, prev_close, gap in zip(data['CurrentHigh30'], data['CurrentLow30'], data['Close'], data['CurrentGap'])]
311
 
 
305
  data['CurrentHigh30toClose'] = (data['CurrentHigh30'] / data['Close']) - 1
306
  data['CurrentLow30toClose'] = (data['CurrentLow30'] / data['Close']) - 1
307
  data['CurrentClose30toClose'] = (data['CurrentClose30'] / data['Close']) - 1
 
308
  data['CurrentRange30'] = (data['CurrentHigh30'] - data['CurrentLow30']) / data['Close']
309
  data['GapFill30'] = [low <= prev_close if gap > 0 else high >= prev_close for high, low, prev_close, gap in zip(data['CurrentHigh30'], data['CurrentLow30'], data['Close'], data['CurrentGap'])]
310