Overview
Many financial products/assets are composed of two or more instruments (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
Equity
For easier nomenclature, let’s represent multilevel chains from top to bottom, as demonstrated by the above example: 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 position as: DR > PreferredEquity.
In more complex cases, we might see examples of financial assets with the following constructions:
Future > Index > PreferredEquity > Equity
In the above example, the PreferredEquity would be a convertible preferred instrument.
Understanding Functions
LookthroughWhere
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 were 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 rule in question.
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
HasAssetClassInDescendants allows a particular asset construction to be included or excluded in a rule based on whether an instrument type makes up part of the holding.
Using the previous example again (Future > Index > PreferredEquity > Equity), if the function were 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 were 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 were defined as HasAssetClassInDescendant('Index', 'Unit')
, the dataview would include the holding as it contains the asset class Index within the construction.
This function is beneficial when distinguishing between holdings in which indices, baskets, or ETFs are present and those in which they are absent.