Advertisement
srcveiga

Untitled

May 4th, 2023
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.48 KB | None | 0 0
  1. #* i Have a stock list
  2. stocks= ['AMZN', 'BAC']
  3. #* the stock data
  4. #? Stock[0] OHLC Trace Data
  5. stocks0_ohlc_df_time = [1,2,3,4]
  6. stocks0_ohlc_df_open= [2,3,4,5]
  7. stocks0_ohlc_df_close= [3,4,5,6]
  8. stocks0_ohlc_df_high= [4,5,6,7]
  9. stocks0_ohlc_df_low= [1,2,3,4]
  10. #? Stock[0] volume Trace Data
  11. stocks0_volume_df_time = [1,2,3,4]
  12. stocks0_volume_df_volume= [6,7,8,9]
  13. #? Stock[0] Figure Trace Data
  14.  
  15. #? Stock[1] OHLC Trace Data
  16. stocks1_ohlc_df_time = [1,2,3,4]
  17. stocks1_ohlc_df_open= [4,5,6,7]
  18. stocks1_ohlc_df_close= [4,5,6,7]
  19. stocks1_ohlc_df_high= [5,6,7,8]
  20. stocks1_ohlc_df_low= [2,3,4,5]
  21. #? Stock[1] volume Trace Data
  22. stocks1_volume_df_time = [1,2,3,4]
  23. stocks1_volume_df_volume= [4,1,8,5]
  24. #? Stock[1] Figure Trace Data
  25.  
  26. #*stock traces i created before app
  27. stocks0_volume_trace = go.Bar(x=stocks0_volume_df_time, y=stocks0_volume_df_volume, name='Volume1', showlegend=False, marker={'color': 'Green'})
  28. 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)
  29. stocks1_volume_trace = go.Bar(x=stocks1_volume_df_time, y=stocks1_volume_df_volume, name='Volume2', showlegend=False, marker={'color': 'Green'})
  30. 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)
  31. main_fig_volume_trace = go.Bar(x=[], y=[], name='Volume', showlegend=False, marker={'color': 'Green'})
  32. main_fig_ohlc_trace = go.Candlestick(x=[],open=[],high=[],low=[],close=[], name= 'ohlc',showlegend=False)
  33.  
  34. #* an empty figure i will use as main fig
  35. #? Main Figure
  36. main_fig = make_subplots(rows=2, cols=1, shared_xaxes=True)
  37. main_fig.add_trace(main_fig_ohlc_trace, row=1, col=1)
  38. main_fig.add_trace(main_fig_volume_trace, row=2, col=1)
  39. main_fig.update_layout(
  40. xaxis=dict(zerolinecolor="grey",zerolinewidth=1,showticklabels=True,gridcolor="grey",autorange=True, fixedrange=False),
  41. yaxis=dict(zerolinecolor="grey",zerolinewidth=1, gridcolor="grey", tickfont=dict(color='white'),side='right',autorange=True),
  42. margin=dict(l=5, r=90, t=35, b=20),
  43. xaxis_rangeslider_visible=False,
  44. )
  45.  
  46. #? Dash App
  47. app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP],
  48. suppress_callback_exceptions=True)
  49.  
  50. app.layout = html.Div([
  51. dcc.Location(id='url', refresh=False),
  52.  
  53. dcc.Interval(id='interval-component-stock-data',interval=1*1000, n_intervals=0),
  54. dcc.Store(id='stocks_store', data=stocks),
  55. dcc.Store(id='stocks0_volume_trace', data=stocks0_volume_trace.to_plotly_json()),
  56. dcc.Store(id='stocks1_volume_trace', data=stocks1_volume_trace.to_plotly_json()),
  57. dcc.Store(id='stocks0_ohlc_trace', data=stocks0_ohlc_trace.to_plotly_json()),
  58. dcc.Store(id='stocks1_ohlc_trace', data=stocks1_ohlc_trace.to_plotly_json()),
  59. html.Div(id='page-content'),
  60.  
  61. ],style={'width': '100vw', 'height': '100vh'})
  62.  
  63. page_1_layout = html.Div([
  64. html.Div([
  65. dcc.Dropdown(id='stock-selector', options=[{'label': stock, 'value': stock} for stock in stocks], value=stocks[0])
  66. ], style={'width': '50%', 'display': 'inline-block'}),
  67.  
  68. dcc.Graph(id='main_fig',figure=main_fig, style={'width': '100vw', 'height': '100vh'}),
  69. ], style={'width': '100vw', 'height': '100vh'})
  70.  
  71.  
  72. #todo Create new pages
  73. @app.callback(Output('page-content', 'children'),
  74. [Input('url', 'pathname')])
  75.  
  76. def display_page(pathname):
  77. if pathname == '/page-1':
  78. return page_1_layout
  79. else:
  80. return html.Div([])
  81.  
  82.  
  83. #* Read my picked value and set it as main figure
  84. @app.callback(
  85. Output('main_fig', 'figure'),
  86. Input('stock-selector', 'value'),
  87. State('stocks0_volume_trace', 'data'),
  88. State('stocks1_volume_trace', 'data'),
  89. State('stocks0_ohlc_trace', 'data'),
  90. State('stocks1_ohlc_trace', 'data'),
  91. )
  92. def update_main_ohlc_fig(selected_stock, stocks0_volume_trace, stocks1_volume_trace, stocks0_ohlc_trace, stocks1_ohlc_trace):
  93. stock_index = stocks.index(selected_stock)
  94. if stock_index == 0:
  95. ohlc_trace = stocks0_ohlc_trace
  96. print(stocks0_ohlc_trace)
  97. volume_trace = stocks0_volume_trace
  98. else:
  99. ohlc_trace = stocks1_ohlc_trace
  100. volume_trace = stocks1_volume_trace
  101. print(volume_trace)
  102.  
  103. main_fig['data'][0]['x'] = ohlc_trace['x']
  104. main_fig['data'][0]['open'] = ohlc_trace['open']
  105. main_fig['data'][0]['high'] = ohlc_trace['high']
  106. main_fig['data'][0]['low']= ohlc_trace['low']
  107. main_fig['data'][0]['close'] =ohlc_trace['close']
  108.  
  109. main_fig['data'][1]['x'] = volume_trace['x']
  110. main_fig['data'][1]['y'] = volume_trace['y']
  111.  
  112. return main_fig
  113.  
  114.  
  115. #* Update main figure data every n interva;s
  116. @app.callback(
  117. Output('main_fig', 'extendData'),
  118. Input('interval-component-stock-data', 'n_intervals'),
  119. State('stock-selector', 'value'),
  120. )
  121.  
  122. def update_main_ohlc_fig2(n_intervals, selected_stock):
  123.  
  124. #* example value for stock 1
  125. extra_ohlc_time_data = 5
  126. extra_ohlc_open_data = 5
  127. extra_ohlc_high_data = 10
  128. extra_ohlc_low_data = 4
  129. extra_ohlc_close_data = 6
  130. extra_volume_x_data = 5
  131. extra_volume_y_data = 7
  132.  
  133. #* example value for stock 2
  134. extra_ohlc_time_data2 = 5
  135. extra_ohlc_open_data2 = 6
  136. extra_ohlc_high_data2 = 11
  137. extra_ohlc_low_data2 = 5
  138. extra_ohlc_close_data2 = 7
  139. extra_volume_x_data2 = 5
  140. extra_volume_y_data2 = 8
  141.  
  142. stock_index = stocks.index(selected_stock)
  143.  
  144. if stock_index == 0:
  145. return (
  146. {
  147. 'x': extra_ohlc_time_data,
  148. 'open': extra_ohlc_open_data,
  149. 'high': extra_ohlc_high_data,
  150. 'low': extra_ohlc_low_data,
  151. 'close': extra_ohlc_close_data,
  152. },
  153. {
  154. 'x': extra_volume_x_data,
  155. 'y': extra_volume_y_data,
  156. },
  157. )
  158.  
  159. else:
  160. return (
  161. {
  162. 'x': extra_ohlc_time_data2,
  163. 'open': extra_ohlc_open_data2,
  164. 'high': extra_ohlc_high_data2,
  165. 'low': extra_ohlc_low_data2 ,
  166. 'close': extra_ohlc_close_data2,
  167. },
  168. {
  169. 'x': extra_volume_x_data2,
  170. 'y': extra_volume_y_data2,
  171. },
  172. )
  173.  
  174. if __name__== '__main__':
  175. app.run_server(debug=True)
  176.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement