-
Notifications
You must be signed in to change notification settings - Fork 59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FRAGMOS - BespokePayoutFormula ( ex- Structured Product) #2941
Comments
This was referenced May 31, 2024
Closed
Closed
Closed
Closed
FRAGMOS * whole Model benefit + required for Struct * - Enum type refactoring 3 - TimeTypeEnum
#2524
Closed
JBZ-Fragmos
changed the title
FRAGMOS - BespokePayoutFormula ( ex- Structured Product) ******* DRAFT *******
FRAGMOS - BespokePayoutFormula ( ex- Structured Product)
Jun 4, 2024
12 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Background
The initial set of core components referred to in prior descriptions as "StructuredPayout" has been refactored into "BespokePayoutFormula"
What is "BespokePayoutFormula" ?
BespokePayoutFormula is a set of components that introduce in CDM
Importantly :
each attribute is described with details in below sections
BespokePayoutFormula is primarily introduced as an optional attribute of existing Payout terms, one may consider it as a local extension of existing Payout terms, whenever there is a need to represent related terms details at more granular level.
example in OptionPayout :
example in PerformancePayout (attached per each returnTerms type)
example in InterestRatePayout :
Other business cases beyond trade description may be contemplated, for instance the BespokePayoutComponent would be re-used in Event model - hereunder an example to build new Event say "PayoutCalculation"
hereunder "payoutFormula" is actually type object "BespokePayoutFormula"
Why refactoring previous proposal StructuredPayout ?
because of some limitations or issues encountered, and based on WG feedbacks :
What benefits with new proposal BespokePayoutFormula ?
Enlarge the Scope of Business Cases
(i.e. no reason to restrict the outcome of the new modelling proposal to so called "structured/exotic" products)
(1) benefits also exists for "vanilla"/"standard" products, depending business background
(2) there are benefits beyond Product model at Trade inception, for instance in Event model as well
(3) implementation of CDM SmartContract : this kind of artefact requires granular inputs and outputs, all together both human-readable, machine-executable and legally-executable all of which being by design features coming with BespokePayoutFormula
Strengthen Model Consistency :
the flexibility that BespokePayoutFormula introduces in the model does not at all contradict with strong objective of ensuring standard Payout terms. To the opposite, new proposal is precisely strengthening model consistency :
Smooth Change Management in order to facilitate/accelerate release for Prod :
Trade Samples Distribution
The sample files are attached in #3038
We shall start with Product model by providing a Trade File Distribution for the set of product below, selected by the WG given business interest (e.g. trading volumes) and educational interest in terms of booking model for good range of features, wrapper and asset classes :
Sample of "structured/exotic" products :
Sample of "classic" products (though not considered "structured", some features involve calculations which details can be described with BespokePayoutFormula - that may be notably required when no Master Confirmation Agreement or no ISDA reference documentation exists where such details would be sufficiently described)
Roadmap
For clarity, highlevel target timeline is as below :
Already Done : root BespokePayoutFormula has pushed in PR as new optional attribute of 3 main legacy Payout :
for clarity, as far as structured products per se are concerned, most of them also requires two specific components
July 2024 :
Aug-Nov-Dec 2024 :
**H1-2025 ** :
Proposal Overview
"BespokePayoutFormula" is a generic set of composable features to describe formula and features of Payout terms at custom granular level, by emulating a "payout algebra" (a) inside Product model (b) :
Overview of core components :
1 set of 3 types which composable logic permits to represent basic arthmetic operation :
1 component which represents the method for ValueAggregation that the model requires to exist whenever there is multiple instance of given node value to be aggregated into single one, which main attribute is an Enum object e.g. Sum, Multiply, Min, Max, Average
1 component to represent ValueOperation that is a set of 3 components, each corresponding to "classic" structuring feature, based on Derivatives Domain Language (as an indication, these components were referred to as "StructuredFeatures" in prior proposal under StructuredPayout) :
1 component CalculatedValue which purpose is to capture the resolved value at each node, when any (which leave end-value is logically of same type than resolvable value i.e. type PriceSchedule or QuantitySchedule)
1 component BespokeName that is of type string which permits implementors to define any custom name in context (that without compromising the backend calculation logic of the model, of course ! since the implementation is based on considering the type object per se, thus is agnostic to any string value that might be defined as an attribute of any type).
Proposal Details
BespokePayoutFormula is a Payout Algebra inside Product model of CDM, which relies on 6 pillars :
(Pillar 1) CorePayoutValue : a set of three atomic root functional operations, composable within each others :
The type for Long, Short, Numerator, Denominator is actually same as BespokePayoutFormula, which implements the composable logic of the model.
Any composition necessarily ends with a BaseValue node where the end-value is defined, which in essence consists in a required choice condition between
Both fixedPrice and observablePrice are of same type PriceSchedule, both with metadata annotation for referencing related values in TradeLot->PriceQuantity or in any Event Primitive Instruction where the presence of such end-value component would be needed (e.g. refactoring observationEvent, create new event payoutCalculation, etc. that is actually opening a lot of possibilities for further re-use of BespokePayoutFormula components accross Product-to-Event model).
From a functional standpoint, Enum value represents which method is used to turn multiple value into one single value.
Importantly, the ValueAggregation not only exist when multiplity is visible as an immediate value series in array but also whenever multiplicity comes from time series i.e. when ever type DatedValue is embedded, typically in PriceSchedule that is ultimate type of the BaseValue.
That is to say aggregation may apply along two dimensions :
value series (given one date, logically the date on which aggregation is performed) :
time series (given one observable with datedValue, typically PriceSchedule with value observations)
Interestingly, examples above are showing how the model is leveraging generic bottum-up logic, in accordance with CDM Design Principles e.g. same type "AggregationMethodEnum", moreover with same value "Min" is used for modelling distinct business features.
In essence, combining CorePayoutValue and ValueAggregation components is the core engine of the algebra.
Considering that the functional signification of each respective type is both human-readeable and machine-executable, the algebra components from the Product model are ready-made inputs for implementing any Process model i.e. func object with a [calculation] annotation.
Additionally, the core algebra is extended with typical operations inherited from derivative business (3) and with a way to represent basic logical conditions (4) :
(Pillar 3) business operations are represented with type ValueOperator, mostly inspired from usual features found in structured product terms :
CapFloor : represents the functional operation [ F(X,Cap) = min(X,Cap) ] or the functional operation [ F(X,Floor) = max(X,Floor) ] where : [Cap] or [Floor] is the value of the barrierLevel for the given barrierType i.e. Cap or Floor and [X] is the value of the object for which CapFloor is defined as an attribute.
KnockCondition : represents the funtional operation [ F(X,In) = X x (Boolean) ] or the functional operation [ F(X,Out) = X x (1 - Boolean) ] where : [In] or [Out] designates the knockType, [Boolean] equals [1] when the triggerCondition is verified as "true", else equals [0], and [X] is the value of the object for which KnockCondition is defined as an attribute. Accordingly, this specifies that the existence of the parent object for which KnockCondition is defined as an attribute is contigent, either because it does not exists until the condition is verified as true, which is defined as the Knock-In type, or because it does exist unless the condition is verified as true, which is defined as the Knock-Out type.
MultiplierDivisor : represents the functional operation [ F(X) = X x M ] or the functional operation [ F(X) = X x 1/D ] where: [M] is the value of a Multiplier, [D] is the value of a Divisor and [X] is the value of the object for which Divisor is defined as an attribute. If any, multiple instances represent a straight concatenation of the same functional operation e.g. say Multiplier[M1], Multiplier[M2], ..., Multiplier[Mn] exist, also possiby with Divisor[D1], Divisor[D2], ..., Divisor[Dm] then this represents the functional operation [ F(X) = X x M1 x M2 x .... x Mn x 1/D1 x 1/D2 x .... x 1/Dm ].
(Pillar 4) not any object per se, but an intrepretation of the 'branching logic' at stake i.e. the types of nodes relationship that may result from the composable logic, that consists in considering whether (a) multiple instance exist at same node in array, else (b) multiple instances exist as series of nested nodes :
(Pillar 5) component CalculatedValue which purpose is to capture the resolved value at each node, when any (which leave end-value is logically of same type than resolvable value i.e. type PriceSchedule or QuantitySchedule)
(Pillar 6) component BespokeName that is of type string which permits implementors to define any custom name in context (that without compromising the backend calculation logic of the model, of course ! since the implementation is based on considering the type object per se, thus is agnostic to any string value that might be defined as an attribute of any type).
Compatibility
Importantly, this refactoring also consisted in ensuring backward-compatibility - hence related PR is drafted directly under CDM Prod. version (that is so say any changes in PR shall be new types only or re-using existing types with optional cardinality as need be).
Model Benefits vs. CDM Design Principles
The text was updated successfully, but these errors were encountered: