Path: blob/main/examples/apps/django_multi_apps/stockscreener/pn_model.py
2014 views
import datetime as dt12import hvplot.pandas3import param45import panel as pn678class StockScreener(param.Parameterized):910df = param.DataFrame(precedence=-1)1112index = param.ListSelector()1314normalize = param.Boolean(default=True)1516start = param.Date()1718def __init__(self, df, **params):19start = dt.date(year=df.index[0].year, month=df.index[0].month, day=df.index[0].day)20end = dt.date(year=df.index[-1].year, month=df.index[-1].month, day=df.index[-1].day)21super().__init__(df=df, start=start, **params)22self.param.start.bounds = (start, end)23columns = list(self.df.columns)24self.param.index.objects = columns25self.index = columns[:5]2627@param.depends('index', 'normalize', 'start')28def update_plot(self):29pos = self.df.index.get_loc(self.start, method='bfill')30dfp = self.df.iloc[pos:][self.index]31if self.normalize:32dfp = 100 * dfp / dfp.iloc[0]33return dfp.hvplot(group_label='Ticker')3435def panel(self):36return pn.Row(37pn.panel(self.param, widgets={'start': pn.widgets.DateSlider}),38self.update_plot39)404142