-
Notifications
You must be signed in to change notification settings - Fork 1
/
index_interface.py
89 lines (71 loc) · 3.25 KB
/
index_interface.py
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
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)
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(share=args.share)