Spaces:
Runtime error
Runtime error
| import plost | |
| import streamlit as st | |
| import pandas as pd | |
| import numpy as np | |
| import jsonlines as jsl | |
| import datetime | |
| import altair as alt | |
| from utils import * | |
| trade_ibkr_dict = { | |
| 'usd_cad':['USDCAD',False,'normal'], | |
| 'usd_chf':['CHFUSD',True,'normal'], | |
| 'usdt_chf':['CHFUSD',True,'normal'], | |
| 'dai_usdt':['stable',False,'stable'], | |
| 'eur_usd':['EURUSD',False,'normal'], | |
| 'usdt_eur':['EURUSD',True,'normal'], | |
| 'usdt_cad':['USDCAD',False,'normal'], | |
| 'usdc_eur':['EURUSD',True,'normal'], | |
| 'usdt_gbp':['GBPUSD',True,'normal'], | |
| 'gbp_usd':['GBPUSD',False,'normal'], | |
| 'eur_chf':['cross',False,'cross'], | |
| 'aud_usd':['AUDUSD',False,'normal'], | |
| 'dai_eur':['EURUSD',True,'normal'], | |
| 'usdc_usdt':['stable',False,'stable'], | |
| 'usdt_aud':['AUDUSD',True,'normal'], | |
| 'dai_usd':['stable',False,'stable'], | |
| 'eur_gbp':['cross',False,'cross'], | |
| 'usdc_gbp':['GBPUSD',True,'normal'], | |
| 'usdt_usd':['stable',False,'stable'], | |
| 'usdc_usd':['stable',False,'stable'], | |
| 'paxg_eur':['cross',False,'cross'], | |
| 'usdc_aud':['AUDUSD',True,'normal'], | |
| 'paxg_usd':['XAUUSD',False,'normal'] | |
| } | |
| balance_df,keys = get_balance_data() | |
| st.title("Assets Changes") | |
| options = st.multiselect( | |
| 'Select Assets', | |
| list(keys),) | |
| plost.line_chart( | |
| balance_df, | |
| x='timestamp', | |
| y=(options), | |
| # 👈 This is magic! | |
| ) | |
| trade_df = get_trade_parquet() | |
| ibkr_df = get_ibkr_parquet() | |
| st.title('Trades') | |
| st.markdown('**Premium**') | |
| trade_opt = st.selectbox( | |
| 'Select Trade Pair', | |
| list(trade_df.currency_pair.unique()) | |
| ) | |
| params = trade_ibkr_dict[trade_opt] | |
| trade_for_vis = trade_df[trade_df.currency_pair==trade_opt] | |
| if params[2] == 'normal': | |
| tmp_df = fx_pair(trade_df,ibkr_df,trade_opt,params[0],inv=params[1]) | |
| min_y = tmp_df.premium.min() | |
| max_y = tmp_df.premium.max() | |
| c = alt.Chart(tmp_df).mark_circle().encode( | |
| x='time', y=alt.Y('premium', scale=alt.Scale(domain=[min_y, max_y])), | |
| size='amount', color='side', tooltip=['time', 'premium', 'side','amount']) | |
| #st.altair_chart(c.interactive(), use_container_width=True) | |
| if params[1]: | |
| ibkr_tmp = 1/ibkr_df[ibkr_df.currency_pair==params[0]][['price']].resample('60s').agg('last') | |
| else: | |
| ibkr_tmp = ibkr_df[ibkr_df.currency_pair==params[0]][['price']].resample('60s').agg('last') | |
| ibkr_tmp['time'] = ibkr_tmp.index | |
| min_ibkr = ibkr_tmp.price.min() | |
| max_ibkr = ibkr_tmp.price.max() | |
| line = alt.Chart(ibkr_tmp).mark_line(stroke='#c95785').encode( | |
| alt.Y('price', | |
| axis=alt.Axis(title='Price', titleColor='#c95785'),scale=alt.Scale(domain=[min_ibkr, max_ibkr])) | |
| ,alt.X('time')) | |
| #st.altair_chart(line.interactive(),use_container_width=True) | |
| op = alt.layer(c, line).resolve_scale( | |
| y = 'independent' | |
| ) | |
| st.altair_chart(op.interactive(),use_container_width=True) | |
| elif params[2] == 'stable': | |
| tmp_df = trade_df[trade_df.currency_pair==trade_opt] | |
| min_y = tmp_df.price.min() | |
| max_y = tmp_df.price.max() | |
| c = alt.Chart(tmp_df).mark_circle().encode( | |
| x='time', y=alt.Y('price', scale=alt.Scale(domain=[min_y, max_y])), | |
| size='amount', color='side', tooltip=['time', 'price', 'side','amount']) | |
| st.altair_chart(c.interactive(), use_container_width=True) | |
| elif params[2] == 'cross': | |
| composite = get_cross(trade_opt,ibkr_df) | |
| tmp_df = fx_pair(trade_df,ibkr_df,trade_opt,'cross',composite) | |
| min_y = tmp_df.premium.min() | |
| max_y = tmp_df.premium.max() | |
| c = alt.Chart(tmp_df).mark_circle().encode( | |
| x='time', y=alt.Y('premium', scale=alt.Scale(domain=[min_y, max_y])), | |
| size='amount', color='side', tooltip=['time', 'premium', 'side','amount']) | |
| composite = composite.resample('60s').agg('last') | |
| min_fp = composite.fp.min() | |
| max_fp = composite.fp.max() | |
| line = alt.Chart(composite).mark_line(stroke='#c95785').encode( | |
| alt.Y('fp', | |
| axis=alt.Axis(title='Price', titleColor='#c95785'),scale=alt.Scale(domain=[min_fp, max_fp])) | |
| ,alt.X('time')) | |
| #st.altair_chart(line.interactive(),use_container_width=True) | |
| op = alt.layer(c, line).resolve_scale( | |
| y = 'independent' | |
| ) | |
| st.altair_chart(op.interactive(), use_container_width=True) | |
| if params[2] != 'stable': | |
| st.markdown('**Price**') | |
| trade_for_vis = trade_for_vis.loc[str(ibkr_df.index[0]):str(ibkr_df.index[-1])] | |
| trade_min = trade_for_vis['price'].min() | |
| trade_max = trade_for_vis['price'].max() | |
| trade_sc = alt.Chart(trade_for_vis).mark_circle().encode( | |
| x='time', y=alt.Y('price', scale=alt.Scale(domain=[trade_min, trade_max])), | |
| size='amount', color='side', tooltip=['time', 'price', 'side','amount'] | |
| ) | |
| layered = alt.layer(trade_sc,line) | |
| st.altair_chart(layered.interactive(),use_container_width=True) | |
| #show_df = trade_df[trade_df.currency_pair==trade_opt] | |
| # plost.scatter_chart( | |
| # data=show_df, | |
| # x='time', | |
| # y=show_df[['buy','sell']]['price'], | |
| # size='amount', | |
| # ) | |
| st.title('Prediction Data') | |
| resample_rate = st.slider('Set Resample Rate(In Minutes)', 1,30,1) | |
| vol_data,fp_data,vol_keys,fp_keys,vol_time,fp_time = get_predict_data() | |
| vol_opts = st.selectbox( | |
| 'Select Volatility Pair', | |
| list(vol_keys), | |
| ) | |
| vol_df = pd.DataFrame({vol_opts:vol_data[vol_opts]}) | |
| vol_df['time'] = pd.to_datetime(vol_time[vol_opts],utc=False) - datetime.timedelta(hours=8) | |
| vol_df.index = vol_df.time | |
| vol_df = vol_df.resample(f'{resample_rate*60}s').agg('last') | |
| plost.line_chart( | |
| vol_df, | |
| x='time', | |
| y=(vol_opts), | |
| opacity=0.5 | |
| ) | |
| fp_opts = st.selectbox( | |
| 'Select FP Prediction', | |
| list(fp_keys), | |
| ) | |
| fp_df = pd.DataFrame({fp_opts:fp_data[fp_opts]}) | |
| fp_df['time'] = pd.to_datetime(fp_time[fp_opts],utc=False)- datetime.timedelta(hours=8) | |
| fp_df.index = fp_df.time | |
| fp_df = fp_df.resample(f'{resample_rate*60}s').agg('last') | |
| plost.line_chart( | |
| fp_df, | |
| x='time', | |
| y=(fp_opts), | |
| opacity=0.5 | |
| ) | |