Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #* i Have a stock list
- stocks= ['AMZN', 'BAC']
- #* the stock data
- #? Stock[0] OHLC Trace Data
- stocks0_ohlc_df_time = [1,2,3,4]
- stocks0_ohlc_df_open= [2,3,4,5]
- stocks0_ohlc_df_close= [3,4,5,6]
- stocks0_ohlc_df_high= [4,5,6,7]
- stocks0_ohlc_df_low= [1,2,3,4]
- #? Stock[0] volume Trace Data
- stocks0_volume_df_time = [1,2,3,4]
- stocks0_volume_df_volume= [6,7,8,9]
- #? Stock[0] Figure Trace Data
- #? Stock[1] OHLC Trace Data
- stocks1_ohlc_df_time = [1,2,3,4]
- stocks1_ohlc_df_open= [4,5,6,7]
- stocks1_ohlc_df_close= [4,5,6,7]
- stocks1_ohlc_df_high= [5,6,7,8]
- stocks1_ohlc_df_low= [2,3,4,5]
- #? Stock[1] volume Trace Data
- stocks1_volume_df_time = [1,2,3,4]
- stocks1_volume_df_volume= [4,1,8,5]
- #? Stock[1] Figure Trace Data
- #*stock traces i created before app
- stocks0_volume_trace = go.Bar(x=stocks0_volume_df_time, y=stocks0_volume_df_volume, name='Volume1', showlegend=False, marker={'color': 'Green'})
- stocks0_ohlc_trace = go.Candlestick(x=stocks0_ohlc_df_time,open=stocks0_ohlc_df_open,high=stocks0_ohlc_df_high,low=stocks0_ohlc_df_low,close=stocks0_ohlc_df_close, name= 'ohlc1',showlegend=False)
- stocks1_volume_trace = go.Bar(x=stocks1_volume_df_time, y=stocks1_volume_df_volume, name='Volume2', showlegend=False, marker={'color': 'Green'})
- stocks1_ohlc_trace = go.Candlestick(x=stocks1_ohlc_df_time,open=stocks1_ohlc_df_open,high=stocks1_ohlc_df_high,low=stocks1_ohlc_df_low,close=stocks1_ohlc_df_close, name= 'ohlc2',showlegend=False)
- main_fig_volume_trace = go.Bar(x=[], y=[], name='Volume', showlegend=False, marker={'color': 'Green'})
- main_fig_ohlc_trace = go.Candlestick(x=[],open=[],high=[],low=[],close=[], name= 'ohlc',showlegend=False)
- #* an empty figure i will use as main fig
- #? Main Figure
- main_fig = make_subplots(rows=2, cols=1, shared_xaxes=True)
- main_fig.add_trace(main_fig_ohlc_trace, row=1, col=1)
- main_fig.add_trace(main_fig_volume_trace, row=2, col=1)
- main_fig.update_layout(
- xaxis=dict(zerolinecolor="grey",zerolinewidth=1,showticklabels=True,gridcolor="grey",autorange=True, fixedrange=False),
- yaxis=dict(zerolinecolor="grey",zerolinewidth=1, gridcolor="grey", tickfont=dict(color='white'),side='right',autorange=True),
- margin=dict(l=5, r=90, t=35, b=20),
- xaxis_rangeslider_visible=False,
- )
- #? Dash App
- app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP],
- suppress_callback_exceptions=True)
- app.layout = html.Div([
- dcc.Location(id='url', refresh=False),
- dcc.Interval(id='interval-component-stock-data',interval=1*1000, n_intervals=0),
- dcc.Store(id='stocks_store', data=stocks),
- dcc.Store(id='stocks0_volume_trace', data=stocks0_volume_trace.to_plotly_json()),
- dcc.Store(id='stocks1_volume_trace', data=stocks1_volume_trace.to_plotly_json()),
- dcc.Store(id='stocks0_ohlc_trace', data=stocks0_ohlc_trace.to_plotly_json()),
- dcc.Store(id='stocks1_ohlc_trace', data=stocks1_ohlc_trace.to_plotly_json()),
- html.Div(id='page-content'),
- ],style={'width': '100vw', 'height': '100vh'})
- page_1_layout = html.Div([
- html.Div([
- dcc.Dropdown(id='stock-selector', options=[{'label': stock, 'value': stock} for stock in stocks], value=stocks[0])
- ], style={'width': '50%', 'display': 'inline-block'}),
- dcc.Graph(id='main_fig',figure=main_fig, style={'width': '100vw', 'height': '100vh'}),
- ], style={'width': '100vw', 'height': '100vh'})
- #todo Create new pages
- @app.callback(Output('page-content', 'children'),
- [Input('url', 'pathname')])
- def display_page(pathname):
- if pathname == '/page-1':
- return page_1_layout
- else:
- return html.Div([])
- #* Read my picked value and set it as main figure
- @app.callback(
- Output('main_fig', 'figure'),
- Input('stock-selector', 'value'),
- State('stocks0_volume_trace', 'data'),
- State('stocks1_volume_trace', 'data'),
- State('stocks0_ohlc_trace', 'data'),
- State('stocks1_ohlc_trace', 'data'),
- )
- def update_main_ohlc_fig(selected_stock, stocks0_volume_trace, stocks1_volume_trace, stocks0_ohlc_trace, stocks1_ohlc_trace):
- stock_index = stocks.index(selected_stock)
- if stock_index == 0:
- ohlc_trace = stocks0_ohlc_trace
- print(stocks0_ohlc_trace)
- volume_trace = stocks0_volume_trace
- else:
- ohlc_trace = stocks1_ohlc_trace
- volume_trace = stocks1_volume_trace
- print(volume_trace)
- main_fig['data'][0]['x'] = ohlc_trace['x']
- main_fig['data'][0]['open'] = ohlc_trace['open']
- main_fig['data'][0]['high'] = ohlc_trace['high']
- main_fig['data'][0]['low']= ohlc_trace['low']
- main_fig['data'][0]['close'] =ohlc_trace['close']
- main_fig['data'][1]['x'] = volume_trace['x']
- main_fig['data'][1]['y'] = volume_trace['y']
- return main_fig
- #* Update main figure data every n interva;s
- @app.callback(
- Output('main_fig', 'extendData'),
- Input('interval-component-stock-data', 'n_intervals'),
- State('stock-selector', 'value'),
- )
- def update_main_ohlc_fig2(n_intervals, selected_stock):
- #* example value for stock 1
- extra_ohlc_time_data = 5
- extra_ohlc_open_data = 5
- extra_ohlc_high_data = 10
- extra_ohlc_low_data = 4
- extra_ohlc_close_data = 6
- extra_volume_x_data = 5
- extra_volume_y_data = 7
- #* example value for stock 2
- extra_ohlc_time_data2 = 5
- extra_ohlc_open_data2 = 6
- extra_ohlc_high_data2 = 11
- extra_ohlc_low_data2 = 5
- extra_ohlc_close_data2 = 7
- extra_volume_x_data2 = 5
- extra_volume_y_data2 = 8
- stock_index = stocks.index(selected_stock)
- if stock_index == 0:
- return (
- {
- 'x': extra_ohlc_time_data,
- 'open': extra_ohlc_open_data,
- 'high': extra_ohlc_high_data,
- 'low': extra_ohlc_low_data,
- 'close': extra_ohlc_close_data,
- },
- {
- 'x': extra_volume_x_data,
- 'y': extra_volume_y_data,
- },
- )
- else:
- return (
- {
- 'x': extra_ohlc_time_data2,
- 'open': extra_ohlc_open_data2,
- 'high': extra_ohlc_high_data2,
- 'low': extra_ohlc_low_data2 ,
- 'close': extra_ohlc_close_data2,
- },
- {
- 'x': extra_volume_x_data2,
- 'y': extra_volume_y_data2,
- },
- )
- if __name__== '__main__':
- app.run_server(debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement