viking-data / app.py
rickyds97's picture
Update app.py
d0f8e2d
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
)