BMClogo

app = dash.Dash(__name__, external_stylesheets=(dbc.themes.BOOTSTRAP))


app.layout = dbc.Container((
   dbc.Row((
       dbc.Col((
           html.H1("📊 Advanced Financial Dashboard", className="text-center mb-4"),
           html.P(f"Interactive dashboard with {len(df)} data points across {len(stock_names)} stocks",
                  className="text-center text-muted"),
           html.Hr()
       ))
   )),
  
   dbc.Row((
       dbc.Col((
           dbc.Card((
               dbc.CardBody((
                   html.H5("🎛️ Dashboard Controls", className="card-title"),
                  
                   html.Label("Select Stocks:", className="fw-bold mt-3"),
                   dcc.Dropdown(
                       id='stock-dropdown',
                       options=({'label': f'{stock} ({base_prices(stock)})', 'value': stock}
                               for stock in stock_names),
                       value=('AAPL', 'GOOGL'), 
                       multi=True,
                       placeholder="Choose stocks to analyze..."
                   ),
                  
                   html.Label("Date Range:", className="fw-bold mt-3"),
                   dcc.DatePickerRange(
                       id='date-picker-range',
                       start_date="2023-06-01",
                       end_date="2024-06-01",
                       display_format="YYYY-MM-DD",
                       style={'width': '100%'}
                   ),
                  
                   html.Label("Chart Style:", className="fw-bold mt-3"),
                   dcc.RadioItems(
                       id='chart-type',
                       options=(
                           {'label': ' Line Chart', 'value': 'line'},
                           {'label': ' Area Chart', 'value': 'area'},
                           {'label': ' Scatter Plot', 'value': 'scatter'}
                       ),
                       value="line",
                       labelStyle={'display': 'block', 'margin': '5px'}
                   ),
                  
                   dbc.Checklist(
                       id='show-ma',
                       options=({'label': ' Show Moving Average', 'value': 'show'}),
                       value=(),
                       style={'margin': '10px 0'}
                   ),
               ))
           ), className="h-100")
       ), width=3),
      
       dbc.Col((
           dbc.Card((
               dbc.CardHeader("📈 Stock Price Analysis"),
               dbc.CardBody((
                   dcc.Graph(id='main-chart', style={'height': '450px'})
               ))
           ))
       ), width=9)
   ), className="mb-4"),
  
   dbc.Row((
       dbc.Col((
           dbc.Card((
               dbc.CardBody((
                   html.H4(id="avg-price", className="text-primary mb-0"),
                   html.Small("Average Price", className="text-muted")
               ))
           ))
       ), width=3),
       dbc.Col((
           dbc.Card((
               dbc.CardBody((
                   html.H4(id="total-volume", className="text-success mb-0"),
                   html.Small("Total Volume", className="text-muted")
               ))
           ))
       ), width=3),
       dbc.Col((
           dbc.Card((
               dbc.CardBody((
                   html.H4(id="price-range", className="text-info mb-0"),
                   html.Small("Price Range", className="text-muted")
               ))
           ))
       ), width=3),
       dbc.Col((
           dbc.Card((
               dbc.CardBody((
                   html.H4(id="data-points", className="text-warning mb-0"),
                   html.Small("Data Points", className="text-muted")
               ))
           ))
       ), width=3)
   ), className="mb-4"),
  
   dbc.Row((
       dbc.Col((
           dbc.Card((
               dbc.CardHeader("📊 Trading Volume"),
               dbc.CardBody((
                   dcc.Graph(id='volume-chart', style={'height': '300px'})
               ))
           ))
       ), width=6),
       dbc.Col((
           dbc.Card((
               dbc.CardHeader("📉 Returns Distribution"),
               dbc.CardBody((
                   dcc.Graph(id='returns-chart', style={'height': '300px'})
               ))
           ))
       ), width=6)
   ), className="mb-4"),
  
   dbc.Row((
       dbc.Col((
           dbc.Card((
               dbc.CardHeader("📋 Latest Stock Data"),
               dbc.CardBody((
                   dash_table.DataTable(
                       id='data-table',
                       columns=(
                           {'name': 'Stock', 'id': 'Stock'},
                           {'name': 'Date', 'id': 'Date'},
                           {'name': 'Price ($)', 'id': 'Price', 'type': 'numeric',
                            'format': {'specifier': '.2f'}},
                           {'name': 'Volume', 'id': 'Volume', 'type': 'numeric',
                            'format': {'specifier': ',.0f'}},
                           {'name': 'Daily Return (%)', 'id': 'Returns', 'type': 'numeric',
                            'format': {'specifier': '.2%'}}
                       ),
                       style_cell={'textAlign': 'center', 'fontSize': '14px', 'padding': '10px'},
                       style_header={'backgroundColor': 'rgb(230, 230, 230)', 'fontWeight': 'bold'},
                       style_data_conditional=(
                           {
                               'if': {'filter_query': '{Returns} > 0'},
                               'backgroundColor': '#d4edda'
                           },
                           {
                               'if': {'filter_query': '{Returns} < 0'},
                               'backgroundColor': '#f8d7da'
                           }
                       ),
                       page_size=15,
                       sort_action="native",
                       filter_action="native"
                   )
               ))
           ))
       ))
   ))
), fluid=True)

Source link