-
Notifications
You must be signed in to change notification settings - Fork 0
/
sample.py
121 lines (103 loc) · 4.5 KB
/
sample.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# # total_ticks = int(len(price_list))*0.2
# tick_interval = int(len(price_list))/(int(len(price_list))*0.2)
# # for i in range(len(price_list)):
# # print(i)
# print([price_list[i] for i in range(1, len(price_list), int(tick_interval))])
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import plotly.plotly as py
import plotly.graph_objs as go
import pandas as pd
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
df = pd.read_csv('test.csv',usecols=['Price','Mountain_neutral_view','Current'])
app = dash.Dash(__name__,external_stylesheets=external_stylesheets)
app.layout = html.Div(className='wrapper',style={'height':'80vh'},children=[
html.H1(children='Staggered Orders Overview'),
html.H2(children='A mountain based visualisation of (base asset/quote asset)'),
dcc.Input(id='input1', type='text'), #Price
dcc.Input(id='input2', type='text'), #Order size
html.Button(id='submit-button', n_clicks=0, children='Submit'),
html.Div(id='output-figure')
])
@app.callback(Output('output-figure','children'),
[Input('submit-button', 'n_clicks')],
[State('input1', 'value'),
State('input2', 'value')])
def update_figure(n_clicks, input1,input2):
bar_background_colors_initial = []
bar_background_colors_current = []
initial_dict = {}
current_dict = {}
for x,y,z in zip(df.Price,df.Mountain_neutral_view,df.Current):
initial_dict[round(x,3)]=y
current_dict[round(x,3)]=z
print(initial_dict.keys())
if not input1 in [None,'']:
# input1 is not None and not '': # NEEDS TO BE ADDED: if not input1 == ''
input_price = float(input1)
if input_price in list(initial_dict.keys()):
# print(current_dict[float(input1)])
current_dict[input_price] += float(input2)
initial_dict[input_price] -= float(input2)
for item in initial_dict:
item = round(item,3)
if item < 1:
bar_background_colors_initial.append('rgba(58, 98, 87, 0.5)')
bar_background_colors_current.append('rgba(51, 204, 51, 0.9)')
else:
if item == 1:
bar_background_colors_initial.append('rgba(217,217,217,0.5)')
bar_background_colors_current.append('rgba(242,242,242,0.9)')
else:
bar_background_colors_initial.append('rgba(230, 0, 0, 0.5)')
bar_background_colors_current.append('rgba(255, 0, 0, 0.9)')
print(list(current_dict.values()))
data=[
go.Bar(
x=[i for i in range(len(list(df.Price)))], # length of the dict (len(dict))
y=list(current_dict.values()), # all values from current_dict
name='Buy',
marker=go.bar.Marker(
color=bar_background_colors_current
)
),
go.Bar(
x=[i for i in range(len(list(df.Price)))], # length of the dict
y=list(initial_dict.values()), # all values from mountain_dict
name='Sell',
marker=go.bar.Marker(
color=bar_background_colors_initial
)
)
]
#print(data)
return dcc.Graph(
id='my-figure',
figure=go.Figure(
data=data,
layout=go.Layout(
autosize=True,
xaxis=dict(
title='BTS/USD',
zerolinecolor='rgba(153,153,153,0.2)'
),
yaxis=dict(
title='Order size',
gridcolor='rgba(153,153,153,0.2)'
),
barmode='stack',
plot_bgcolor='rgb(21,43,42)',
paper_bgcolor='rgb(21,43,42)',
font={
'color':'white'
}
)
),
style={'height':'100%','width':'60vw','display':'inline-block'}
)
else:
print('PLEASE INSERT AN EXISTING PRICE')
if __name__ == '__main__':
app.run_server(debug=True)