Spaces:
Sleeping
Sleeping
add avg perg and vix em
Browse files- app.py +232 -24
- model_1h.py +1 -1
- 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'] <=
|
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 |
-
|
156 |
-
|
|
|
|
|
|
|
|
|
|
|
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
|
230 |
st.write(results)
|
231 |
st.write(df_probas)
|
232 |
-
st.text('
|
233 |
-
st.write(
|
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'] <=
|
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 |
-
|
382 |
-
|
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('
|
459 |
-
st.write(
|
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'] <=
|
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 |
-
|
607 |
-
|
|
|
|
|
|
|
|
|
|
|
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('
|
684 |
-
st.write(
|
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'] <=
|
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 |
-
|
832 |
-
|
|
|
|
|
|
|
|
|
|
|
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('
|
909 |
-
st.write(
|
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='
|
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='
|
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
|