Spaces:
Sleeping
Sleeping
File size: 3,433 Bytes
e958f2a 5d435b4 e958f2a 5d435b4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
import gradio as gr
import plotly.express as px
from cryptoindex import *
import pandas as pd
from updater import *
from time import sleep
from functools import partial
import argparse
last_start_date = None
last_end_date = None
is_current = False
v = None
t = 0
real_time_data = None
is_historical = False
update_weights1()
""" def mytimer(interval=60):
while True:
print("Timer: ", t)
t += 1
sleep(interval)
threading.Thread(target=mytimer, daemon=True).start()
"""
def plot_index_prices(start_date, end_date, **kwargs):
global last_start_date, last_end_date, is_current, v
if start_date != last_start_date or end_date != last_end_date:
last_start_date = start_date
last_end_date = end_date
is_current = False
if not is_current:
cryptodf = fetch_crypto_data(start_date = start_date, end_date = end_date, **kwargs)
v, _ = get_crypto_index(cryptodf, func = np.sqrt)
v.to_csv("/tmp/cryptoindex.csv")
is_current = True
_, _, _, output = do_sharpe(v.close)
fig = px.line(v, x=v.index, y='close', title='Index Prices')
fig.update_xaxes(rangeslider_visible=True)
return fig, output
def realtime_update_weighted_prices(fname="/tmp/wts.csv"):
if should_update_weights():
# If it's time to update the weights, spawn a thread to do so
threading.Thread(target=update_weights1, daemon=True).start()
last_day = pd.read_csv(fname, parse_dates=["date"])
prices = update_day(last_day)
_, _, _, output = do_sharpe(prices, days = False)
fig = px.line(prices, x=prices.index, y=prices.values, title='Index Today')
return fig, output
def make_graph(choice, start_date = None, end_date = None, fname = "/tmp/wts.csv", **kwargs):
if choice == "Historical":
fig,stats = plot_index_prices(start_date, end_date, **kwargs)
else:
fig, stats =realtime_update_weighted_prices(fname)
return gr.Plot(fig), gr.Markdown(stats)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--data_file" , default="/tmp/wts.csv", help="Weights for realtime computation")
parser.add_argument("--locale", default = 'global', help="the locale")
parser.add_argument("--market_type", default = 'crypto', help="the market type")
parser.add_argument("--share", action = "store_true", help="share the interface")
args = parser.parse_args()
make_graph_flex = partial(make_graph, fname = args.data_file, locale = args.locale, market_type = args.market_type)
update_weights1(fname=args.data_file, locale = args.locale, market_type = args.market_type)
with gr.Blocks() as iface: # Use () for context manager
startdatebox = gr.Textbox(label="Start Date")
enddatebox = gr.Textbox(label="End Date")
radio = gr.Radio(choices=["Historical", "Real-time"], label="graph type")
update_button = gr.Button("Update Graph") # Add a button to trigger the graph update
theplot = gr.Plot()
thestats = gr.Markdown()
radio.change(fn = make_graph_flex, inputs = [radio, startdatebox, enddatebox], outputs = [theplot, thestats])
update_button.click(fn = make_graph_flex, inputs = [radio, startdatebox, enddatebox], outputs = [theplot, thestats])
iface.launch(server_port=7860, server_name="0.0.0.0")
#iface.launch(share=args.share)
|