fixes
This commit is contained in:
parent
f74c686be0
commit
40a8e5fa5c
96
finance.py
96
finance.py
@ -67,7 +67,8 @@ stock_info_in_time_period_df = pd.DataFrame(columns=stock_list, index=["średnia
|
|||||||
|
|
||||||
mean_prices_and_dividends = fullTableDf[['Close', 'Dividends']].mean(axis=0).unstack(level=0)
|
mean_prices_and_dividends = fullTableDf[['Close', 'Dividends']].mean(axis=0).unstack(level=0)
|
||||||
mean_prices_and_dividends_and_market_cap = pd.concat([mean_prices_and_dividends, market_cap], axis=1)
|
mean_prices_and_dividends_and_market_cap = pd.concat([mean_prices_and_dividends, market_cap], axis=1)
|
||||||
mean_prices_and_dividends_figure = px.scatter(mean_prices_and_dividends_and_market_cap.reset_index(), size="marketCap", x='Dividends', y='Close', text="index", template='plotly_dark')
|
mean_prices_and_dividends_figure = px.scatter(mean_prices_and_dividends_and_market_cap.reset_index(), size="marketCap",
|
||||||
|
x='Dividends', y='Close', text="index", template='plotly_dark')
|
||||||
|
|
||||||
|
|
||||||
def make_gauge(title, min_v, value, max_v):
|
def make_gauge(title, min_v, value, max_v):
|
||||||
@ -151,7 +152,8 @@ app.layout = html.Div(
|
|||||||
dcc.Graph(id='timeseries', config={'displayModeBar': False}, animate=True),
|
dcc.Graph(id='timeseries', config={'displayModeBar': False}, animate=True),
|
||||||
]),
|
]),
|
||||||
dcc.Tab(id='tab-2', label='Chart 2', value='tab-2', children=[
|
dcc.Tab(id='tab-2', label='Chart 2', value='tab-2', children=[
|
||||||
dcc.Graph(id='price-dividends', figure=mean_prices_and_dividends_figure, config={'displayModeBar': False}, animate=True),
|
dcc.Graph(id='price-dividends', figure=mean_prices_and_dividends_figure,
|
||||||
|
config={'displayModeBar': False}, animate=True),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
dash_table.DataTable(
|
dash_table.DataTable(
|
||||||
@ -167,6 +169,7 @@ app.layout = html.Div(
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Callback for downloading file
|
# Callback for downloading file
|
||||||
@app.callback(
|
@app.callback(
|
||||||
Output("download-data", "data"),
|
Output("download-data", "data"),
|
||||||
@ -178,6 +181,7 @@ def create_download_file(n_clicks, selected_table):
|
|||||||
global selected_stock_in_table_df
|
global selected_stock_in_table_df
|
||||||
return dcc.send_data_frame(selected_stock_in_table_df.to_csv, "data-{table}.csv".format(table=selected_table))
|
return dcc.send_data_frame(selected_stock_in_table_df.to_csv, "data-{table}.csv".format(table=selected_table))
|
||||||
|
|
||||||
|
|
||||||
# Callback for timeseries price
|
# Callback for timeseries price
|
||||||
@app.callback(Output('timeseries', 'figure'), [Input('stockselector', 'value')])
|
@app.callback(Output('timeseries', 'figure'), [Input('stockselector', 'value')])
|
||||||
def update_graph(selected_dropdown_value):
|
def update_graph(selected_dropdown_value):
|
||||||
@ -190,16 +194,56 @@ def update_graph(selected_dropdown_value):
|
|||||||
return figure
|
return figure
|
||||||
|
|
||||||
|
|
||||||
@app.callback([Output("stock_price_table", "data"), Output('stock_price_table', 'columns')],
|
@app.callback([Output("stock_price_table", "data"),
|
||||||
[Input('table_selector', 'value')])
|
Output('stock_price_table', 'columns'),
|
||||||
def update_table(selected_dropdown_value):
|
Output('average_gauge', 'figure'),
|
||||||
|
Output('volatility_gauge', 'figure'),
|
||||||
|
Output('info_in_time_period', 'data')],
|
||||||
|
[Input('timeseries', 'relayoutData'),
|
||||||
|
Input('table_selector', 'value')])
|
||||||
|
def common_table_callback(callback_data_time_period, callback_data_table_selector):
|
||||||
global selected_stock_in_table
|
global selected_stock_in_table
|
||||||
global selected_stock_in_table_df
|
global selected_stock_in_table_df
|
||||||
selected_stock_in_table = selected_dropdown_value
|
global from_time
|
||||||
|
global to_time
|
||||||
|
global average_gauge
|
||||||
|
global volatility_gauge
|
||||||
|
global stock_info_in_time_period_df
|
||||||
|
selected_stock_in_table_changed = False
|
||||||
|
change_time_period = False
|
||||||
|
for trigger in dash.callback_context.triggered:
|
||||||
|
if trigger['prop_id'] == 'table_selector.value':
|
||||||
|
selected_stock_in_table_changed = True
|
||||||
|
if trigger['prop_id'] == 'timeseries.relayoutData':
|
||||||
|
change_time_period = True
|
||||||
|
if selected_stock_in_table_changed:
|
||||||
|
selected_stock_in_table = callback_data_table_selector
|
||||||
selected_stock_in_table_df = fullTableDf.xs(selected_stock_in_table, axis=1, level=1)
|
selected_stock_in_table_df = fullTableDf.xs(selected_stock_in_table, axis=1, level=1)
|
||||||
data = selected_stock_in_table_df.to_dict('records')
|
if change_time_period:
|
||||||
columns = [{"name": i, "id": i} for i in selected_stock_in_table_df.columns]
|
if "xaxis.range[0]" in callback_data_time_period and "xaxis.range[1]" in callback_data_time_period:
|
||||||
return data, columns
|
from_time = callback_data_time_period["xaxis.range[0]"]
|
||||||
|
to_time = callback_data_time_period["xaxis.range[1]"]
|
||||||
|
else:
|
||||||
|
from_time = selected_stock_in_table_df.index.min()
|
||||||
|
to_time = selected_stock_in_table_df.index.max()
|
||||||
|
from_time = round_to_nearest_weekday(from_time)
|
||||||
|
to_time = round_to_nearest_weekday(to_time)
|
||||||
|
if change_time_period or selected_stock_in_table_changed:
|
||||||
|
full_table_in_time_period = fullTableDf.loc[from_time:to_time]
|
||||||
|
mean = full_table_in_time_period.mean(axis=0)
|
||||||
|
mean = mean.xs('Close', level=0)
|
||||||
|
std = full_table_in_time_period.std(axis=0)
|
||||||
|
std = std.xs('Close', level=0)
|
||||||
|
time_period = selected_stock_in_table_df.loc[from_time:to_time]
|
||||||
|
mean = time_period.mean(axis=0)
|
||||||
|
std = time_period.std(axis=0)
|
||||||
|
# TODO: oblicz stock_info_in_time_period_df tutuaj !!!
|
||||||
|
average_gauge = make_gauge('średnia', 0, mean['Close'], 400)
|
||||||
|
volatility_gauge = make_gauge('wolatylność', 0, std['Close'], 400)
|
||||||
|
stock_price_table_data = selected_stock_in_table_df.to_dict('records')
|
||||||
|
stock_price_table_columns = [{"name": i, "id": i} for i in selected_stock_in_table_df.columns]
|
||||||
|
return stock_price_table_data, stock_price_table_columns, average_gauge, volatility_gauge, stock_info_in_time_period_df.T.to_dict(
|
||||||
|
'records')
|
||||||
|
|
||||||
|
|
||||||
average_gauge = make_gauge('średnia', 0, 0, 400)
|
average_gauge = make_gauge('średnia', 0, 0, 400)
|
||||||
@ -225,39 +269,5 @@ def round_to_nearest_weekday(date):
|
|||||||
return date
|
return date
|
||||||
|
|
||||||
|
|
||||||
@app.callback([Output('average_gauge', 'figure'),
|
|
||||||
Output('volatility_gauge', 'figure'),
|
|
||||||
Output('info_in_time_period', 'data')],
|
|
||||||
Input('timeseries', 'relayoutData'))
|
|
||||||
def change_time_period(selectedData):
|
|
||||||
global from_time
|
|
||||||
global to_time
|
|
||||||
global average_gauge
|
|
||||||
global volatility_gauge
|
|
||||||
global stock_info_in_time_period_df
|
|
||||||
if selectedData is not None:
|
|
||||||
if "xaxis.range[0]" in selectedData and "xaxis.range[1]" in selectedData:
|
|
||||||
from_time = selectedData["xaxis.range[0]"]
|
|
||||||
to_time = selectedData["xaxis.range[1]"]
|
|
||||||
else:
|
|
||||||
from_time = selected_stock_in_table_df.index.min()
|
|
||||||
to_time = selected_stock_in_table_df.index.max()
|
|
||||||
from_time = round_to_nearest_weekday(from_time)
|
|
||||||
to_time = round_to_nearest_weekday(to_time)
|
|
||||||
full_table_in_time_period = fullTableDf.loc[from_time:to_time]
|
|
||||||
mean = full_table_in_time_period.mean(axis=0)
|
|
||||||
mean = mean.xs('Close', level=0)
|
|
||||||
std = full_table_in_time_period.std(axis=0)
|
|
||||||
std = std.xs('Close', level=0)
|
|
||||||
time_period = selected_stock_in_table_df.loc[from_time:to_time]
|
|
||||||
mean = time_period.mean(axis=0)
|
|
||||||
std = time_period.std(axis=0)
|
|
||||||
# TODO: oblicz stock_info_in_time_period_df tutuaj !!!
|
|
||||||
average_gauge = make_gauge('średnia', 0, mean['Close'], 400)
|
|
||||||
volatility_gauge = make_gauge('wolatylność', 0, std['Close'], 400)
|
|
||||||
return average_gauge, volatility_gauge, stock_info_in_time_period_df.T.to_dict('records')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run_server(debug=True)
|
app.run_server(debug=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user