portfolio_management / index_page.py
huggingface112's picture
enhanced async, and notification for debugging
29f1ee3
raw
history blame
No virus
1.85 kB
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()