There are many financial products/assets which are composed of two or more instruments (as actual or referential underlying instruments) in what we call a multi-level asset.
A simple example of a multi-level asset is a Depository Receipt. A Depository Receipt is composed of two “levels” (from top to bottom):
- Depository Receipt
For easier nomenclature, let’s represent multilevel chains from top to bottom, demonstrated by the standard Depository Receipt example as: DR > Equity
However, a Depository Receipt isn’t constrained to having a straight equity underlier. It might have a preferred share (FundApps: PreferredEquity) as a single underlier. In this case, we could represent the asset as: DR > PreferredEquity
In more complex cases, we might see examples of financial assets with the following constructions:
Future > Index > PreferredEquity > Equity
(note here the PreferredEquity would be a convertible preferred)
In FundApps, in the Disclosure detail screen, you can view the complete multi-level chain for an asset in the Portfolio/Entity Viewer by clicking on the + icon:
Understanding the functions
LookthroughWhere() will look down through an asset construction from the top level instrument, until an instrument within the holding matches the criteria stated within the function. Rather than looking all the way through to the bottom level instrument as in the 'lookthrough' function, LookthroughWhere allows FundApps to stop at a specific level in the construction.
An example may be a Future > Index > PreferredEquity > Equity (i.e. an index future which contains a preferred equity which has a possible conversion to an equity as an underlier.)
If the function was defined as LookthroughWhere(AssetClass = 'PreferredEquity'), the LookthroughWhere function will stop at the preferred equity level to decipher if the holding falls in or out of scope for the regime.
In a similar vein, the function could also be defined as LookthroughWhere(AssetClass = 'Equity') and the dataview will look all the way to the bottom level for an equity.
HasAssetClassInDescendants explicitly allows particular asset construction to be included or excluded in a rule based on whether a particular instrument type makes up part of the holding.
Using the previous example again (Future > Index > PreferredEquity > Equity), if the function was defined as HasAssetClassInDescendant('Index'), the dataview would include the holding as the multi-level chain of instruments contains the asset class Index within its construction.
If the function was defined as HasAssetClassInDescendant('Option'), the dataview wouldn't include the Future holding as it does not contain an option within the construction.
If the function was defined as HasAssetClassInDescendant('Index', 'Unit'), the dataview would include the holding as it contains the asset class Index within the construction.
This function is particularly useful in FundApps to distinguish between holdings where indices, baskets, or ETFs make up part of the holding and when they don't.