Streamlit app to check historical (sector) allocation

Hi community,

I created and hosted a simple streamlit app to visualize historical allocation based on conditional sell rules.

While the setup is a bit annoying, it gives you maximum flexibility to check historical class allocation based on sell notes. Sectors, Industries, Countries, Size Buckets, Metric Splits… Full flexibility based on the sell ruleset you prepare.

An introduction, a subsector ruleset and an example can be found in my new substack blogpost:

Here is the link to the app:

Enjoy!

Cheers,

Tony

2 Likes

Rule set examples:

Sectors

[Utility] RankPos > 100 &  FHist("Sector = UTIL", Trunc(NoDays/7))
[Finance] RankPos > 100 &  FHist("Sector = FINANCIAL", Trunc(NoDays/7))
[Cons Noncyc] RankPos > 100 &  FHist("Sector = NONCYCLICAL", Trunc(NoDays/7))
[Cons Cyc] RankPos > 100 &  FHist("Sector = CYCLICALS", Trunc(NoDays/7))
[Bus Serv] RankPos > 100 &  FHist("Sector = BIZSVCE", Trunc(NoDays/7))
[Cons Serv] RankPos > 100 &  FHist("Sector = CONSUMERSVCE", Trunc(NoDays/7))
[Energy] RankPos > 100 &  FHist("Sector = ENERGY", Trunc(NoDays/7))
[Materials] RankPos > 100 &  FHist("Sector = MATERIALS", Trunc(NoDays/7))
[Tech] RankPos > 100 &  FHist("Sector = TECH", Trunc(NoDays/7))
[Industrials] RankPos > 100 &  FHist("Sector = INDUSTRIAL", Trunc(NoDays/7))
[Healthcare] RankPos > 100 &  FHist("Sector = HEALTHCARE", Trunc(NoDays/7))
[Other] RankPos > 100 &  FHist("Sector = OTHER", Trunc(NoDays/7))

Holding Periods

[<2W] RankPos > 100 & NoDays <= 14
[2-4W] RankPos > 100 & NoDays > 14 & NoDays <= 31
[1-3M] RankPos > 100 & NoDays > 31 & NoDays <= 91
[3-6M] RankPos > 100 & NoDays > 91 & NoDays <= 182
[6-12M] RankPos > 100 & NoDays > 182 & NoDays <= 365
[1-2Y] RankPos > 100 & NoDays > 365 & NoDays <= 730
[2-5Y] RankPos > 100 & NoDays > 730 & NoDays <= 1825
[>5Y] RankPos > 100 & NoDays > 1825

Nearness of sell date to Earnings Week:

[Earnings Week] RankPos > 100 & (WeeksToQ = 0 OR WeeksIntoQ = 0)
[1W after EA] RankPos > 100 & WeeksIntoQ = 1
[2W after EA] RankPos > 100 & WeeksIntoQ = 2
[3W after EA] RankPos > 100 & WeeksIntoQ = 3
[1W before EA] RankPos > 100 & WeeksToQ = 1
[2W before EA] RankPos > 100 & WeeksToQ = 2
[3W before EA] RankPos > 100 & WeeksToQ = 3
[Other] RankPos > 100 & !InSet(WeeksToQ, 0,1,2,3) & !InSet(WeeksIntoQ, 0,1,2,3)