Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
holoviz
GitHub Repository: holoviz/panel
Path: blob/main/examples/apps/django_multi_apps/stockscreener/pn_model.py
2014 views
1
import datetime as dt
2
3
import hvplot.pandas
4
import param
5
6
import panel as pn
7
8
9
class StockScreener(param.Parameterized):
10
11
df = param.DataFrame(precedence=-1)
12
13
index = param.ListSelector()
14
15
normalize = param.Boolean(default=True)
16
17
start = param.Date()
18
19
def __init__(self, df, **params):
20
start = dt.date(year=df.index[0].year, month=df.index[0].month, day=df.index[0].day)
21
end = dt.date(year=df.index[-1].year, month=df.index[-1].month, day=df.index[-1].day)
22
super().__init__(df=df, start=start, **params)
23
self.param.start.bounds = (start, end)
24
columns = list(self.df.columns)
25
self.param.index.objects = columns
26
self.index = columns[:5]
27
28
@param.depends('index', 'normalize', 'start')
29
def update_plot(self):
30
pos = self.df.index.get_loc(self.start, method='bfill')
31
dfp = self.df.iloc[pos:][self.index]
32
if self.normalize:
33
dfp = 100 * dfp / dfp.iloc[0]
34
return dfp.hvplot(group_label='Ticker')
35
36
def panel(self):
37
return pn.Row(
38
pn.panel(self.param, widgets={'start': pn.widgets.DateSlider}),
39
self.update_plot
40
)
41
42