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 )