Spaces:
Running
Running
import panel as pn | |
from sidebar import SideNavBar | |
from sqlalchemy import create_engine | |
import appComponents | |
import db_operation as db | |
pn.extension('mathjax') | |
pn.extension('plotly') | |
pn.extension('tabulator') | |
db_url = 'sqlite:///instance/local.db' | |
engine = create_engine(db_url) | |
analytic_p = db.get_portfolio_analytic_df() | |
analytic_b = db.get_benchmark_analytic_df() | |
if len(analytic_p) == 0: | |
app = [ | |
pn.pane.Str('No portfolio data found, please update portfolio first')] | |
else: | |
stock_overview = appComponents.BestAndWorstStocks( | |
analytic_df=analytic_p) | |
composation_card = appComponents.PortfolioComposationCard( | |
analytic_p) | |
monthly_return_card = appComponents.HistReturnCard( | |
calculated_p_stock=analytic_p, calculated_b_stock=analytic_b) | |
total_return_card = appComponents.TotalReturnCard(name='Range', | |
b_stock_df=analytic_b, | |
p_stock_df=analytic_p, | |
value=(0, 20)) | |
drawdown_card = appComponents.DrawDownCard( | |
calculated_p_stock=analytic_p) | |
top_header = appComponents.TopHeader( | |
eval_df=analytic_p, | |
) | |
app = [pn.Row(top_header), | |
pn.Row( | |
pn.Column(monthly_return_card, stock_overview, | |
width=500, margin=(10, 10, 10, 10)), | |
pn.Column(total_return_card, drawdown_card, margin=(10, 10, 10, 10)), | |
pn.Column(composation_card, margin=(10, 10, 10, 10)), | |
)] | |
template = pn.template.FastListTemplate( | |
title="Portfolio一览", | |
# sidebar=[freq, phase], | |
) | |
template.sidebar.append(SideNavBar()) | |
# template.main.extend([drawdown_card, stock_overview, composation_card, monthly_return_card, total_return_card]) | |
template.main.extend(app) | |
template.servable() | |