wnstnb commited on
Commit
3f1f433
Β·
1 Parent(s): f0d37cf

add avg perg and vix em

Browse files
Files changed (3) hide show
  1. app.py +232 -24
  2. model_1h.py +1 -1
  3. model_90m.py +1 -1
app.py CHANGED
@@ -126,7 +126,7 @@ with st.form("choose_model"):
126
  operator = '<='
127
  score = red_proba
128
  # How many with this score?
129
- cond = (res1['Predicted'] <= red_proba)
130
  num_obs = len(res1.loc[cond])
131
  # How often green?
132
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
@@ -152,8 +152,13 @@ with st.form("choose_model"):
152
 
153
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
154
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
155
- df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum]})
156
- df_probas.columns = ['PctGreen','NumObs','NumGreen']
 
 
 
 
 
157
 
158
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
159
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
@@ -225,12 +230,59 @@ with st.form("choose_model"):
225
 
226
  check = data.tail(1)
227
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  with tab1:
229
- st.subheader(f'Pred for {curr_date} as of 7AM PST')
230
  st.write(results)
231
  st.write(df_probas)
232
- st.text('For checking only πŸ‘‡πŸ½')
233
- st.write(check)
234
  with tab2:
235
  st.subheader('Latest Data for Pred')
236
  st.write(new_pred)
@@ -352,7 +404,7 @@ with st.form("choose_model"):
352
  operator = '<='
353
  score = red_proba
354
  # How many with this score?
355
- cond = (res1['Predicted'] <= red_proba)
356
  num_obs = len(res1.loc[cond])
357
  # How often green?
358
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
@@ -378,9 +430,14 @@ with st.form("choose_model"):
378
 
379
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
380
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
381
- df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum]})
382
- df_probas.columns = ['PctGreen','NumObs','NumGreen']
383
-
 
 
 
 
 
384
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
385
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
386
  recall_score_all = recall_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
@@ -451,12 +508,59 @@ with st.form("choose_model"):
451
 
452
  check = data.tail(1)
453
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
454
  with tab1:
455
  st.subheader(f'Pred for {curr_date} as of 7AM PST')
456
  st.write(results)
457
  st.write(df_probas)
458
- st.text('For checking only πŸ‘‡πŸ½')
459
- st.write(check)
460
  with tab2:
461
  st.subheader('Latest Data for Pred')
462
  st.write(new_pred)
@@ -578,7 +682,7 @@ with st.form("choose_model"):
578
  operator = '<='
579
  score = red_proba
580
  # How many with this score?
581
- cond = (res1['Predicted'] <= red_proba)
582
  num_obs = len(res1.loc[cond])
583
  # How often green?
584
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
@@ -603,8 +707,13 @@ with st.form("choose_model"):
603
  # st.subheader('New Prediction')
604
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
605
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
606
- df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum]})
607
- df_probas.columns = ['PctGreen','NumObs','NumGreen']
 
 
 
 
 
608
 
609
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
610
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
@@ -676,12 +785,59 @@ with st.form("choose_model"):
676
 
677
  check = data.tail(1)
678
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
679
  with tab1:
680
  st.subheader(f'Pred for {curr_date} as of 7:30AM PST')
681
  st.write(results)
682
  st.write(df_probas)
683
- st.text('For checking only πŸ‘‡πŸ½')
684
- st.write(check)
685
  with tab2:
686
  st.subheader('Latest Data for Pred')
687
  st.write(new_pred)
@@ -696,7 +852,7 @@ with st.form("choose_model"):
696
  # label="Download Historical Performance",
697
  # data=csv,
698
  fname='performance_for_60m_model.csv'
699
- # )
700
 
701
  elif option == 'πŸ•° 90 Mins':
702
  # run60 = st.button('πŸƒπŸ½β€β™‚οΈ Run')
@@ -803,7 +959,7 @@ with st.form("choose_model"):
803
  operator = '<='
804
  score = red_proba
805
  # How many with this score?
806
- cond = (res1['Predicted'] <= red_proba)
807
  num_obs = len(res1.loc[cond])
808
  # How often green?
809
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
@@ -828,8 +984,13 @@ with st.form("choose_model"):
828
  # st.subheader('New Prediction')
829
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
830
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
831
- df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum]})
832
- df_probas.columns = ['PctGreen','NumObs','NumGreen']
 
 
 
 
 
833
 
834
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
835
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
@@ -901,12 +1062,59 @@ with st.form("choose_model"):
901
 
902
  check = data.tail(1)
903
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
904
  with tab1:
905
  st.subheader(f'Pred for {curr_date} as of 8AM PST')
906
  st.write(results)
907
  st.write(df_probas)
908
- st.text('For checking only πŸ‘‡πŸ½')
909
- st.write(check)
910
  with tab2:
911
  st.subheader('Latest Data for Pred')
912
  st.write(new_pred)
@@ -921,7 +1129,7 @@ with st.form("choose_model"):
921
  # label="Download Historical Performance",
922
  # data=csv,
923
  fname='performance_for_90m_model.csv'
924
- # )
925
 
926
  if submitted:
927
  st.download_button(
 
126
  operator = '<='
127
  score = red_proba
128
  # How many with this score?
129
+ cond = (res1['Predicted'] <= seq_proba[0])
130
  num_obs = len(res1.loc[cond])
131
  # How often green?
132
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
 
152
 
153
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
154
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
155
+
156
+ data['ClosePct'] = (data['Close'] / data['PrevClose']) - 1
157
+ data['ClosePct'] = data['ClosePct'].shift(-1)
158
+ res1 = res1.merge(data['ClosePct'], left_index=True,right_index=True)
159
+ df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum],'ClosePct':[np.mean]})
160
+ df_probas.columns = ['PctGreen','NumObs','NumGreen','AvgPerf']
161
+ df_probas['AvgPerf'] = df_probas['AvgPerf'].apply(lambda x: f'{x:.2%}')
162
 
163
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
164
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
 
230
 
231
  check = data.tail(1)
232
 
233
+ data['VIX_EM'] = data['Close'] * (data['Close_VIX']/100) * (np.sqrt( 1 ) / np.sqrt(252))
234
+ data['VIX_EM_High'] = data['Close'] + data['VIX_EM']
235
+ data['VIX_EM_Low'] = data['Close'] - data['VIX_EM']
236
+
237
+ data['VIX_EM_125'] = data['VIX_EM'] * 1.25
238
+ data['VIX_EM_125_High'] = data['Close'] + data['VIX_EM_125']
239
+ data['VIX_EM_125_Low'] = data['Close'] - data['VIX_EM_125']
240
+
241
+ data['VIX_EM_15'] = data['VIX_EM'] * 1.5
242
+ data['VIX_EM_15_High'] = data['Close'] + data['VIX_EM_15']
243
+ data['VIX_EM_15_Low'] = data['Close'] - data['VIX_EM_15']
244
+
245
+ data['VIX_EM'] = data['VIX_EM'].shift(1)
246
+ data['VIX_EM_High'] = data['VIX_EM_High'].shift(1)
247
+ data['VIX_EM_Low'] = data['VIX_EM_Low'].shift(1)
248
+
249
+ data['VIX_EM_15'] = data['VIX_EM_15'].shift(1)
250
+ data['VIX_EM_15_High'] = data['VIX_EM_15_High'].shift(1)
251
+ data['VIX_EM_15_Low'] = data['VIX_EM_15_Low'].shift(1)
252
+
253
+ data['VIX_EM_125'] = data['VIX_EM_125'].shift(1)
254
+ data['VIX_EM_125_High'] = data['VIX_EM_125_High'].shift(1)
255
+ data['VIX_EM_125_Low'] = data['VIX_EM_125_Low'].shift(1)
256
+
257
+ df_em = pd.DataFrame(columns=['EM','Low','High','WithinRange','Tested'])
258
+ df_em.loc['EM 1X'] = [
259
+ data['VIX_EM'].iloc[-1].round(2),
260
+ data['VIX_EM_Low'].iloc[-1].round(2),
261
+ data['VIX_EM_High'].iloc[-1].round(2),
262
+ f"{len(data.query('Close <= VIX_EM_High & Close >= VIX_EM_Low')) / len(data):.1%}",
263
+ f"{len(data.query('High > VIX_EM_High | Low < VIX_EM_Low')) / len(data):.1%}"
264
+ ]
265
+ df_em.loc['EM 1.25X'] = [
266
+ data['VIX_EM_125'].iloc[-1].round(2),
267
+ data['VIX_EM_125_Low'].iloc[-1].round(2),
268
+ data['VIX_EM_125_High'].iloc[-1].round(2),
269
+ f"{len(data.query('Close <= VIX_EM_125_High & Close >= VIX_EM_125_Low')) / len(data):.1%}",
270
+ f"{len(data.query('High > VIX_EM_125_High | Low < VIX_EM_125_Low')) / len(data):.1%}"
271
+ ]
272
+ df_em.loc[f"EM 1.5X"] = [
273
+ data['VIX_EM_15'].iloc[-1].round(2),
274
+ data['VIX_EM_15_Low'].iloc[-1].round(2),
275
+ data['VIX_EM_15_High'].iloc[-1].round(2),
276
+ f"{len(data.query('Close <= VIX_EM_15_High & Close >= VIX_EM_15_Low')) / len(data):.1%}",
277
+ f"{len(data.query('High > VIX_EM_15_High | Low < VIX_EM_15_Low')) / len(data):.1%}"
278
+ ]
279
+
280
  with tab1:
281
+ st.subheader(f'Pred for {curr_date} as of 6:30AM PST')
282
  st.write(results)
283
  st.write(df_probas)
284
+ st.text('VIX EM')
285
+ st.write(df_em)
286
  with tab2:
287
  st.subheader('Latest Data for Pred')
288
  st.write(new_pred)
 
404
  operator = '<='
405
  score = red_proba
406
  # How many with this score?
407
+ cond = (res1['Predicted'] <= seq_proba[0])
408
  num_obs = len(res1.loc[cond])
409
  # How often green?
410
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
 
430
 
431
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
432
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
433
+
434
+ data['ClosePct'] = (data['Close'] / data['PrevClose']) - 1
435
+ data['ClosePct'] = data['ClosePct'].shift(-1)
436
+ res1 = res1.merge(data['ClosePct'], left_index=True,right_index=True)
437
+ df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum],'ClosePct':[np.mean]})
438
+ df_probas.columns = ['PctGreen','NumObs','NumGreen','AvgPerf']
439
+ df_probas['AvgPerf'] = df_probas['AvgPerf'].apply(lambda x: f'{x:.2%}')
440
+
441
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
442
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
443
  recall_score_all = recall_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
 
508
 
509
  check = data.tail(1)
510
 
511
+ data['VIX_EM'] = data['Close'] * (data['Close_VIX']/100) * (np.sqrt( 1 ) / np.sqrt(252))
512
+ data['VIX_EM_High'] = data['Close'] + data['VIX_EM']
513
+ data['VIX_EM_Low'] = data['Close'] - data['VIX_EM']
514
+
515
+ data['VIX_EM_125'] = data['VIX_EM'] * 1.25
516
+ data['VIX_EM_125_High'] = data['Close'] + data['VIX_EM_125']
517
+ data['VIX_EM_125_Low'] = data['Close'] - data['VIX_EM_125']
518
+
519
+ data['VIX_EM_15'] = data['VIX_EM'] * 1.5
520
+ data['VIX_EM_15_High'] = data['Close'] + data['VIX_EM_15']
521
+ data['VIX_EM_15_Low'] = data['Close'] - data['VIX_EM_15']
522
+
523
+ data['VIX_EM'] = data['VIX_EM'].shift(1)
524
+ data['VIX_EM_High'] = data['VIX_EM_High'].shift(1)
525
+ data['VIX_EM_Low'] = data['VIX_EM_Low'].shift(1)
526
+
527
+ data['VIX_EM_15'] = data['VIX_EM_15'].shift(1)
528
+ data['VIX_EM_15_High'] = data['VIX_EM_15_High'].shift(1)
529
+ data['VIX_EM_15_Low'] = data['VIX_EM_15_Low'].shift(1)
530
+
531
+ data['VIX_EM_125'] = data['VIX_EM_125'].shift(1)
532
+ data['VIX_EM_125_High'] = data['VIX_EM_125_High'].shift(1)
533
+ data['VIX_EM_125_Low'] = data['VIX_EM_125_Low'].shift(1)
534
+
535
+ df_em = pd.DataFrame(columns=['EM','Low','High','WithinRange','Tested'])
536
+ df_em.loc['EM 1X'] = [
537
+ data['VIX_EM'].iloc[-1].round(2),
538
+ data['VIX_EM_Low'].iloc[-1].round(2),
539
+ data['VIX_EM_High'].iloc[-1].round(2),
540
+ f"{len(data.query('Close <= VIX_EM_High & Close >= VIX_EM_Low')) / len(data):.1%}",
541
+ f"{len(data.query('High > VIX_EM_High | Low < VIX_EM_Low')) / len(data):.1%}"
542
+ ]
543
+ df_em.loc['EM 1.25X'] = [
544
+ data['VIX_EM_125'].iloc[-1].round(2),
545
+ data['VIX_EM_125_Low'].iloc[-1].round(2),
546
+ data['VIX_EM_125_High'].iloc[-1].round(2),
547
+ f"{len(data.query('Close <= VIX_EM_125_High & Close >= VIX_EM_125_Low')) / len(data):.1%}",
548
+ f"{len(data.query('High > VIX_EM_125_High | Low < VIX_EM_125_Low')) / len(data):.1%}"
549
+ ]
550
+ df_em.loc[f"EM 1.5X"] = [
551
+ data['VIX_EM_15'].iloc[-1].round(2),
552
+ data['VIX_EM_15_Low'].iloc[-1].round(2),
553
+ data['VIX_EM_15_High'].iloc[-1].round(2),
554
+ f"{len(data.query('Close <= VIX_EM_15_High & Close >= VIX_EM_15_Low')) / len(data):.1%}",
555
+ f"{len(data.query('High > VIX_EM_15_High | Low < VIX_EM_15_Low')) / len(data):.1%}"
556
+ ]
557
+
558
  with tab1:
559
  st.subheader(f'Pred for {curr_date} as of 7AM PST')
560
  st.write(results)
561
  st.write(df_probas)
562
+ st.text('VIX EM')
563
+ st.write(df_em)
564
  with tab2:
565
  st.subheader('Latest Data for Pred')
566
  st.write(new_pred)
 
682
  operator = '<='
683
  score = red_proba
684
  # How many with this score?
685
+ cond = (res1['Predicted'] <= seq_proba[0])
686
  num_obs = len(res1.loc[cond])
687
  # How often green?
688
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
 
707
  # st.subheader('New Prediction')
708
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
709
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
710
+
711
+ data['ClosePct'] = (data['Close'] / data['PrevClose']) - 1
712
+ data['ClosePct'] = data['ClosePct'].shift(-1)
713
+ res1 = res1.merge(data['ClosePct'], left_index=True,right_index=True)
714
+ df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum],'ClosePct':[np.mean]})
715
+ df_probas.columns = ['PctGreen','NumObs','NumGreen','AvgPerf']
716
+ df_probas['AvgPerf'] = df_probas['AvgPerf'].apply(lambda x: f'{x:.2%}')
717
 
718
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
719
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
 
785
 
786
  check = data.tail(1)
787
 
788
+ data['VIX_EM'] = data['Close'] * (data['Close_VIX']/100) * (np.sqrt( 1 ) / np.sqrt(252))
789
+ data['VIX_EM_High'] = data['Close'] + data['VIX_EM']
790
+ data['VIX_EM_Low'] = data['Close'] - data['VIX_EM']
791
+
792
+ data['VIX_EM_125'] = data['VIX_EM'] * 1.25
793
+ data['VIX_EM_125_High'] = data['Close'] + data['VIX_EM_125']
794
+ data['VIX_EM_125_Low'] = data['Close'] - data['VIX_EM_125']
795
+
796
+ data['VIX_EM_15'] = data['VIX_EM'] * 1.5
797
+ data['VIX_EM_15_High'] = data['Close'] + data['VIX_EM_15']
798
+ data['VIX_EM_15_Low'] = data['Close'] - data['VIX_EM_15']
799
+
800
+ data['VIX_EM'] = data['VIX_EM'].shift(1)
801
+ data['VIX_EM_High'] = data['VIX_EM_High'].shift(1)
802
+ data['VIX_EM_Low'] = data['VIX_EM_Low'].shift(1)
803
+
804
+ data['VIX_EM_15'] = data['VIX_EM_15'].shift(1)
805
+ data['VIX_EM_15_High'] = data['VIX_EM_15_High'].shift(1)
806
+ data['VIX_EM_15_Low'] = data['VIX_EM_15_Low'].shift(1)
807
+
808
+ data['VIX_EM_125'] = data['VIX_EM_125'].shift(1)
809
+ data['VIX_EM_125_High'] = data['VIX_EM_125_High'].shift(1)
810
+ data['VIX_EM_125_Low'] = data['VIX_EM_125_Low'].shift(1)
811
+
812
+ df_em = pd.DataFrame(columns=['EM','Low','High','WithinRange','Tested'])
813
+ df_em.loc['EM 1X'] = [
814
+ data['VIX_EM'].iloc[-1].round(2),
815
+ data['VIX_EM_Low'].iloc[-1].round(2),
816
+ data['VIX_EM_High'].iloc[-1].round(2),
817
+ f"{len(data.query('Close <= VIX_EM_High & Close >= VIX_EM_Low')) / len(data):.1%}",
818
+ f"{len(data.query('High > VIX_EM_High | Low < VIX_EM_Low')) / len(data):.1%}"
819
+ ]
820
+ df_em.loc['EM 1.25X'] = [
821
+ data['VIX_EM_125'].iloc[-1].round(2),
822
+ data['VIX_EM_125_Low'].iloc[-1].round(2),
823
+ data['VIX_EM_125_High'].iloc[-1].round(2),
824
+ f"{len(data.query('Close <= VIX_EM_125_High & Close >= VIX_EM_125_Low')) / len(data):.1%}",
825
+ f"{len(data.query('High > VIX_EM_125_High | Low < VIX_EM_125_Low')) / len(data):.1%}"
826
+ ]
827
+ df_em.loc[f"EM 1.5X"] = [
828
+ data['VIX_EM_15'].iloc[-1].round(2),
829
+ data['VIX_EM_15_Low'].iloc[-1].round(2),
830
+ data['VIX_EM_15_High'].iloc[-1].round(2),
831
+ f"{len(data.query('Close <= VIX_EM_15_High & Close >= VIX_EM_15_Low')) / len(data):.1%}",
832
+ f"{len(data.query('High > VIX_EM_15_High | Low < VIX_EM_15_Low')) / len(data):.1%}"
833
+ ]
834
+
835
  with tab1:
836
  st.subheader(f'Pred for {curr_date} as of 7:30AM PST')
837
  st.write(results)
838
  st.write(df_probas)
839
+ st.text('VIX EM')
840
+ st.write(df_em)
841
  with tab2:
842
  st.subheader('Latest Data for Pred')
843
  st.write(new_pred)
 
852
  # label="Download Historical Performance",
853
  # data=csv,
854
  fname='performance_for_60m_model.csv'
855
+ # )
856
 
857
  elif option == 'πŸ•° 90 Mins':
858
  # run60 = st.button('πŸƒπŸ½β€β™‚οΈ Run')
 
959
  operator = '<='
960
  score = red_proba
961
  # How many with this score?
962
+ cond = (res1['Predicted'] <= seq_proba[0])
963
  num_obs = len(res1.loc[cond])
964
  # How often green?
965
  historical_proba = 1 - res1.loc[cond, 'True'].mean()
 
984
  # st.subheader('New Prediction')
985
  int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']
986
  # df_probas = res1.groupby(pd.qcut(res1['Predicted'],5)).agg({'True':[np.mean,len,np.sum]})
987
+
988
+ data['ClosePct'] = (data['Close'] / data['PrevClose']) - 1
989
+ data['ClosePct'] = data['ClosePct'].shift(-1)
990
+ res1 = res1.merge(data['ClosePct'], left_index=True,right_index=True)
991
+ df_probas = res1.groupby(pd.cut(res1['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum],'ClosePct':[np.mean]})
992
+ df_probas.columns = ['PctGreen','NumObs','NumGreen','AvgPerf']
993
+ df_probas['AvgPerf'] = df_probas['AvgPerf'].apply(lambda x: f'{x:.2%}')
994
 
995
  roc_auc_score_all = roc_auc_score(res1['True'].astype(int), res1['Predicted'].values)
996
  precision_score_all = precision_score(res1['True'].astype(int), res1['Predicted'] > 0.5)
 
1062
 
1063
  check = data.tail(1)
1064
 
1065
+ data['VIX_EM'] = data['Close'] * (data['Close_VIX']/100) * (np.sqrt( 1 ) / np.sqrt(252))
1066
+ data['VIX_EM_High'] = data['Close'] + data['VIX_EM']
1067
+ data['VIX_EM_Low'] = data['Close'] - data['VIX_EM']
1068
+
1069
+ data['VIX_EM_125'] = data['VIX_EM'] * 1.25
1070
+ data['VIX_EM_125_High'] = data['Close'] + data['VIX_EM_125']
1071
+ data['VIX_EM_125_Low'] = data['Close'] - data['VIX_EM_125']
1072
+
1073
+ data['VIX_EM_15'] = data['VIX_EM'] * 1.5
1074
+ data['VIX_EM_15_High'] = data['Close'] + data['VIX_EM_15']
1075
+ data['VIX_EM_15_Low'] = data['Close'] - data['VIX_EM_15']
1076
+
1077
+ data['VIX_EM'] = data['VIX_EM'].shift(1)
1078
+ data['VIX_EM_High'] = data['VIX_EM_High'].shift(1)
1079
+ data['VIX_EM_Low'] = data['VIX_EM_Low'].shift(1)
1080
+
1081
+ data['VIX_EM_15'] = data['VIX_EM_15'].shift(1)
1082
+ data['VIX_EM_15_High'] = data['VIX_EM_15_High'].shift(1)
1083
+ data['VIX_EM_15_Low'] = data['VIX_EM_15_Low'].shift(1)
1084
+
1085
+ data['VIX_EM_125'] = data['VIX_EM_125'].shift(1)
1086
+ data['VIX_EM_125_High'] = data['VIX_EM_125_High'].shift(1)
1087
+ data['VIX_EM_125_Low'] = data['VIX_EM_125_Low'].shift(1)
1088
+
1089
+ df_em = pd.DataFrame(columns=['EM','Low','High','WithinRange','Tested'])
1090
+ df_em.loc['EM 1X'] = [
1091
+ data['VIX_EM'].iloc[-1].round(2),
1092
+ data['VIX_EM_Low'].iloc[-1].round(2),
1093
+ data['VIX_EM_High'].iloc[-1].round(2),
1094
+ f"{len(data.query('Close <= VIX_EM_High & Close >= VIX_EM_Low')) / len(data):.1%}",
1095
+ f"{len(data.query('High > VIX_EM_High | Low < VIX_EM_Low')) / len(data):.1%}"
1096
+ ]
1097
+ df_em.loc['EM 1.25X'] = [
1098
+ data['VIX_EM_125'].iloc[-1].round(2),
1099
+ data['VIX_EM_125_Low'].iloc[-1].round(2),
1100
+ data['VIX_EM_125_High'].iloc[-1].round(2),
1101
+ f"{len(data.query('Close <= VIX_EM_125_High & Close >= VIX_EM_125_Low')) / len(data):.1%}",
1102
+ f"{len(data.query('High > VIX_EM_125_High | Low < VIX_EM_125_Low')) / len(data):.1%}"
1103
+ ]
1104
+ df_em.loc[f"EM 1.5X"] = [
1105
+ data['VIX_EM_15'].iloc[-1].round(2),
1106
+ data['VIX_EM_15_Low'].iloc[-1].round(2),
1107
+ data['VIX_EM_15_High'].iloc[-1].round(2),
1108
+ f"{len(data.query('Close <= VIX_EM_15_High & Close >= VIX_EM_15_Low')) / len(data):.1%}",
1109
+ f"{len(data.query('High > VIX_EM_15_High | Low < VIX_EM_15_Low')) / len(data):.1%}"
1110
+ ]
1111
+
1112
  with tab1:
1113
  st.subheader(f'Pred for {curr_date} as of 8AM PST')
1114
  st.write(results)
1115
  st.write(df_probas)
1116
+ st.text('VIX EM')
1117
+ st.write(df_em)
1118
  with tab2:
1119
  st.subheader('Latest Data for Pred')
1120
  st.write(new_pred)
 
1129
  # label="Download Historical Performance",
1130
  # data=csv,
1131
  fname='performance_for_90m_model.csv'
1132
+ # )
1133
 
1134
  if submitted:
1135
  st.download_button(
model_1h.py CHANGED
@@ -236,7 +236,7 @@ def get_data():
236
  last_date = last_date + datetime.timedelta(days=1)
237
  # Get incremental data
238
  spx1 = yf.Ticker('^GSPC')
239
- yfp = spx1.history(start=last_date, interval='60m')
240
  # Concat current and incremental
241
  df_30m = pd.concat([fr, yfp])
242
  # Get the first 30 minute bar
 
236
  last_date = last_date + datetime.timedelta(days=1)
237
  # Get incremental data
238
  spx1 = yf.Ticker('^GSPC')
239
+ yfp = spx1.history(start=last_date, interval='30m')
240
  # Concat current and incremental
241
  df_30m = pd.concat([fr, yfp])
242
  # Get the first 30 minute bar
model_90m.py CHANGED
@@ -236,7 +236,7 @@ def get_data():
236
  last_date = last_date + datetime.timedelta(days=1)
237
  # Get incremental data
238
  spx1 = yf.Ticker('^GSPC')
239
- yfp = spx1.history(start=last_date, interval='90m')
240
  # Concat current and incremental
241
  df_30m = pd.concat([fr, yfp])
242
  # Get the first 30 minute bar
 
236
  last_date = last_date + datetime.timedelta(days=1)
237
  # Get incremental data
238
  spx1 = yf.Ticker('^GSPC')
239
+ yfp = spx1.history(start=last_date, interval='30m')
240
  # Concat current and incremental
241
  df_30m = pd.concat([fr, yfp])
242
  # Get the first 30 minute bar