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)