TradableProduct
Type CDM 7.2.0Definition of a product as ready to be traded, i.e. included in an execution or contract, by associating a specific price and quantity to this product plus an (optional) mechanism for any potential future quantity adjustment.
Attributes
All 5 declared on TradableProduct. Cardinality in amber is required.
| Name | Type | Card. | Description |
|---|---|---|---|
| product | NonTransferableProduct | 1..1 | The underlying product to be included in a contract or execution. |
| tradeLot | TradeLot | 1..* | Specifies the price, quantity and effective date of each trade lot, when the same product may be traded multiple times in different lots with the same counterparty. In a trade increase, a new trade lot is added to the list, with the corresponding effective date. In a trade decrease, the existing trade lot(s) are decreased of the corresponding quantity (and an unwind fee may have to be settled). The multiple cardinality and the ability to increase existing trades is used for Equity Swaps in particular. |
| counterparty | Counterparty | 2..2 | Specifies the parties which are the two counterparties to the transaction. The product is agnostic to the actual parties to the transaction, with the party references abstracted away from the product definition and replaced by the counterparty enum (e.g. CounterpartyEnum values Party1 or Party2). The counterparty enum can then be positioned in the product (e.g. to specify which counterparty is the payer, receiver etc) and this counterparties attribute, which is positioned outside of the product definition, allows the counterparty enum to be associated with an actual party reference. |
| ancillaryParty | AncillaryParty | 0..* | Specifies the parties with ancillary roles in the transaction. The product is agnostic to the actual parties involved in the transaction, with the party references abstracted away from the product definition and replaced by the AncillaryRoleEnum. The AncillaryRoleEnum can then be positioned in the product and this AncillaryParty type, which is positioned outside of the product definition, allows the AncillaryRoleEnum to be associated with an actual party reference. |
| adjustment | NotionalAdjustmentEnum | 0..1 | Specifies the conditions that govern the adjustment to the quantity of a product being traded: e.g. execution, portfolio rebalancing etc. It is typically used in the context of Equity Swaps. |
Conditions
Validation rules the model enforces on this type, in Rune. An instance that breaks one of these is invalid CDM, whatever produced it.
if adjustment exists
then product -> economicTerms -> payout as PerformancePayout -> returnTerms -> priceReturnTerms exists
or product -> economicTerms -> payout as PerformancePayout exists if product -> economicTerms -> payout as PerformancePayout -> returnTerms -> dividendReturnTerms -> extraordinaryDividendsParty exists
then ancillaryParty -> role contains AncillaryRoleEnum -> ExtraordinaryDividendsParty
and if ancillaryParty -> role contains AncillaryRoleEnum -> ExtraordinaryDividendsParty
then product -> economicTerms -> payout as PerformancePayout -> returnTerms -> dividendReturnTerms -> extraordinaryDividendsParty exists if product -> economicTerms -> payout as OptionPayout -> settlementTerms -> physicalSettlementTerms -> predeterminedClearingOrganizationParty exists
then ancillaryParty -> role contains AncillaryRoleEnum -> PredeterminedClearingOrganizationParty if product -> economicTerms -> payout as SettlementPayout -> settlementTerms -> physicalSettlementTerms -> predeterminedClearingOrganizationParty exists
then ancillaryParty -> role contains AncillaryRoleEnum -> PredeterminedClearingOrganizationParty if ancillaryParty -> role contains AncillaryRoleEnum -> PredeterminedClearingOrganizationParty
then product -> economicTerms -> payout as SettlementPayout -> settlementTerms -> physicalSettlementTerms -> predeterminedClearingOrganizationParty exists
or product -> economicTerms -> payout as OptionPayout -> settlementTerms -> physicalSettlementTerms -> predeterminedClearingOrganizationParty exists if product -> economicTerms -> payout as OptionPayout -> exerciseTerms -> exerciseProcedure -> manualExercise -> exerciseNotice -> exerciseNoticeReceiver exists
then ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyManual
and if ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyManual
then product -> economicTerms -> payout as OptionPayout -> exerciseTerms -> exerciseProcedure -> manualExercise -> exerciseNotice -> exerciseNoticeReceiver exists if product -> economicTerms -> terminationProvision -> earlyTerminationProvision -> optionalEarlyTermination -> exerciseNotice -> exerciseNoticeReceiver exists
then ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyOptionalEarlyTermination
and if ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyOptionalEarlyTermination
then product -> economicTerms -> terminationProvision -> earlyTerminationProvision -> optionalEarlyTermination -> exerciseNotice -> exerciseNoticeReceiver exists if product -> economicTerms -> terminationProvision -> cancelableProvision -> exerciseNotice -> exerciseNoticeReceiver exists
then ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyCancelableProvision
and if ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyCancelableProvision
then product -> economicTerms -> terminationProvision -> cancelableProvision -> exerciseNotice -> exerciseNoticeReceiver exists if product -> economicTerms -> terminationProvision -> extendibleProvision -> exerciseNotice -> exerciseNoticeReceiver exists
then ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyExtendibleProvision
and if ancillaryParty -> role contains AncillaryRoleEnum -> ExerciseNoticeReceiverPartyExtendibleProvision
then product -> economicTerms -> terminationProvision -> extendibleProvision -> exerciseNotice -> exerciseNoticeReceiver exists if product -> economicTerms -> calculationAgent -> calculationAgentParty exists
then ancillaryParty -> role contains AncillaryRoleEnum -> CalculationAgentIndependent
and if ancillaryParty -> role contains AncillaryRoleEnum -> CalculationAgentIndependent
then product -> economicTerms -> calculationAgent -> calculationAgentParty exists if product -> economicTerms -> terminationProvision -> earlyTerminationProvision -> optionalEarlyTermination -> calculationAgent -> calculationAgentParty exists
then ancillaryParty -> role contains AncillaryRoleEnum -> CalculationAgentOptionalEarlyTermination
and if ancillaryParty -> role contains AncillaryRoleEnum -> CalculationAgentOptionalEarlyTermination
then product -> economicTerms -> terminationProvision -> earlyTerminationProvision -> optionalEarlyTermination -> calculationAgent -> calculationAgentParty exists if product -> economicTerms -> terminationProvision -> earlyTerminationProvision -> mandatoryEarlyTermination -> calculationAgent -> calculationAgentParty exists
then ancillaryParty -> role contains AncillaryRoleEnum -> CalculationAgentMandatoryEarlyTermination
and if ancillaryParty -> role contains AncillaryRoleEnum -> CalculationAgentMandatoryEarlyTermination
then product -> economicTerms -> terminationProvision -> earlyTerminationProvision -> mandatoryEarlyTermination -> calculationAgent -> calculationAgentParty exists Referenced by
1 type holds a TradableProduct as an attribute.
Functions
Model functions that produce or consume this type. These are the CDM's own behaviour — the logic a correct implementation has to match.
| Function | Role | Description |
|---|---|---|
| AddTradeLot | returns | Add a TradeLot to an existing list of TradeLots. |
| ExtractTradePurchasePrice | takes | — |
| ExtractTradeCollateralQuantity | takes | — |
| ExtractTradeCollateralPrice | takes | — |
| AddTradeLot | takes | Add a TradeLot to an existing list of TradeLots. |
Open TradableProduct in the Model Browser
Walk the tree and the reference graph interactively, and switch releases to see how the type has changed. Free, no signup.