Trade
Type CDM 7.2.0Defines the output of a financial transaction between parties - a Business Event. A Trade impacts the financial position (i.e. the balance sheet) of involved parties.
Attributes
8 declared on Trade, 5 inherited. Cardinality in amber is required.
| Name | Type | Card. | Description | From |
|---|---|---|---|---|
| product | NonTransferableProduct | 1..1 | The underlying product to be included in a contract or execution. | TradableProduct |
| 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. | TradableProduct |
| 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. | TradableProduct |
| 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. | TradableProduct |
| 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. | TradableProduct |
| tradeIdentifier | TradeIdentifier | 1..* | Represents the identifier(s) that uniquely identify a trade for an identity issuer. A trade can include multiple identifiers, for example a trade that is reportable to both the CFTC and ESMA, and then has an associated USI (Unique Swap Identifier) UTI (Unique Trade Identifier). | — |
| tradeDate | date | 1..1 | Specifies the date which the trade was agreed. | — |
| tradeTime | TimeZone | 0..1 | Denotes the trade time and timezone as agreed by the parties to the trade. | — |
| party | Party | 0..* | Represents the parties to the trade. The cardinality is optional to address the case where the trade is defined within a BusinessEvent data type, in which case the party is specified in BusinessEvent. | — |
| partyRole | PartyRole | 0..* | Represents the role each specified party takes in the trade. further to the principal roles, payer and receiver. | — |
| executionDetails | ExecutionDetails | 0..1 | Represents information specific to trades that arose from executions. | — |
| contractDetails | ContractDetails | 0..1 | Represents information specific to trades involving contractual products. | — |
| collateral | Collateral | 0..1 | Represents the collateral obligations of a party. | — |
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 SettlementPayoutOnlyExists(product -> economicTerms -> payout)
then partyRole -> role contains PartyRoleEnum -> Buyer
and partyRole -> role contains PartyRoleEnum -> Seller
and tradeLot -> priceQuantity -> price exists if executionDetails -> packageReference exists
then executionDetails -> packageReference -> componentId -> assignedIdentifier contains tradeIdentifier -> assignedIdentifier if (contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType all <> MatrixTypeEnum -> CreditDerivativesPhysicalSettlementMatrix
or contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType is absent)
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations exists
then (product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> notSubordinated exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> specifiedCurrency exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> notSovereignLender exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> notDomesticCurrency exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> notDomesticLaw exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> notContingent exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> notDomesticIssuance exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> assignableLoan exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> consentRequiredLoan exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> transferable exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> maximumMaturity exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> notBearer exists)
and (product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> fullFaithAndCreditObLiability exists
or product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> generalFundObligationLiability exists
or product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> revenueObligationLiability exists) if (contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType all <> MatrixTypeEnum -> CreditDerivativesPhysicalSettlementMatrix
or contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType is absent)
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations exists
then (product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> notSubordinated exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> notSovereignLender exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> notDomesticLaw exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> notDomesticIssuance exists)
and (product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> fullFaithAndCreditObLiability exists
or product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> generalFundObligationLiability exists
or product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> revenueObligationLiability exists) if (contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType all <> MatrixTypeEnum -> CreditDerivativesPhysicalSettlementMatrix
or contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType is absent)
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents exists
then (product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> bankruptcy exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> obligationDefault exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> obligationAcceleration exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> repudiationMoratorium exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> governmentalIntervention exists) if (contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType all <> MatrixTypeEnum -> CreditDerivativesPhysicalSettlementMatrix
or contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix -> matrixType is absent)
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> restructuring exists
then product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> restructuring -> multipleHolderObligation exists if ((product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> referenceObligation -> security -> securityType any = Debt
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> referenceObligation -> security -> debtType -> debtEconomics -> secured -> securedType any = AssetBacked)
or contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualTermsSupplement -> contractualTermsSupplementType contains ContractualSupplementTypeEnum -> CDSonMBS)
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents exists
then (product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents -> additionalFixedPayments -> interestShortfallReimbursement exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents -> additionalFixedPayments -> principalShortfallReimbursement exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents -> additionalFixedPayments -> writedownReimbursement exists) if ((product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> referenceObligation -> security -> securityType any = Debt
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> referenceObligation -> security -> debtType -> debtEconomics -> secured -> securedType any = AssetBacked)
or contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualTermsSupplement -> contractualTermsSupplementType contains ContractualSupplementTypeEnum -> CDSonMBS)
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents exists
then (product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents -> failureToPayPrincipal exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents -> writedown exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> floatingAmountEvents -> impliedWritedown exists) if ((product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> referenceObligation -> security -> securityType any = Debt
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> referenceObligation -> security -> debtType -> debtEconomics -> secured -> securedType any = AssetBacked)
or contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualTermsSupplement -> contractualTermsSupplementType contains ContractualSupplementTypeEnum -> CDSonMBS)
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents exists
then (product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> failureToPayPrincipal exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> failureToPayInterest exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> distressedRatingsDowngrade exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> maturityExtension exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> writedown exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> impliedWritedown exists) if partyRole -> role contains PartyRoleEnum -> HedgingParty
then FilterPartyRole(partyRole, PartyRoleEnum -> HedgingParty) count <= 2 if partyRole -> role contains PartyRoleEnum -> DeterminingParty
then FilterPartyRole(partyRole, PartyRoleEnum -> DeterminingParty) count <= 2 if partyRole -> role contains PartyRoleEnum -> BarrierDeterminationAgent
then FilterPartyRole(partyRole, PartyRoleEnum -> BarrierDeterminationAgent) count <= 1 if product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
then tradeDate < product -> economicTerms -> effectiveDate -> adjustableDate -> unadjustedDate or tradeDate < product -> economicTerms -> effectiveDate -> adjustableDate -> adjustedDate if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> masterConfirmationType is absent
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
then product -> economicTerms -> payout as InterestRatePayout -> calculationPeriodDates -> effectiveDate -> adjustableDate -> dateAdjustments exists or tradeDate < product -> economicTerms -> effectiveDate -> adjustableDate -> adjustedDate if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> masterConfirmationType is absent
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
then product -> economicTerms -> terminationDate -> adjustableDate -> dateAdjustments exists if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> masterConfirmationType is absent
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualDefinitionsType any = ContractualDefinitionsEnum -> ISDA2003CreditDerivatives
then product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> allGuarantees exists if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualDefinitionsType any = ContractualDefinitionsEnum -> ISDA1999CreditDerivatives
then product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> creditEventNotice -> businessCenter is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> restructuring -> multipleHolderObligation is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> restructuring -> multipleCreditEventNotices is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> allGuarantees is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> indexReferenceInformation is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> substitution is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> modifiedEquityDelivery is absent if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualDefinitionsType any = ContractualDefinitionsEnum -> ISDA2003CreditDerivatives
then product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations -> notContingent is absent if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> masterConfirmationType is absent
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
then product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> cashSettlementTerms exists
or product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms exists if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> masterConfirmationType is absent
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
then product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> creditEvents -> creditEventNotice exists
and product -> economicTerms -> payout as CreditDefaultPayout -> protectionTerms -> obligations exists
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation -> referencePrice exists if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> masterConfirmationType is absent
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms exists
then product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> settlementCurrency exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> physicalSettlementPeriod exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> escrow exists
and product -> economicTerms -> payout as CreditDefaultPayout -> settlementTerms -> physicalSettlementTerms -> deliverableObligations -> accruedInterest exists if contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> masterConfirmationType is absent
and contractDetails -> documentation -> legalAgreementIdentification -> agreementName -> contractualMatrix is absent
and product -> economicTerms -> payout as CreditDefaultPayout -> generalTerms -> referenceInformation exists
and product -> economicTerms -> payout as InterestRatePayout -> priceQuantity exists
and tradeLot -> priceQuantity -> quantity -> value exists
then product -> economicTerms -> payout as InterestRatePayout -> dayCountFraction exists if contractDetails -> documentation -> agreementTerms -> agreement -> transactionAdditionalTerms -> equityAdditionalTerms -> extraordinaryEvents exists
then (product -> economicTerms -> payout as PerformancePayout -> returnTerms -> priceReturnTerms exists
or product -> economicTerms -> payout as OptionPayout exists)
and Qualify_AssetClass_Equity(product -> economicTerms) if contractDetails -> documentation -> agreementTerms -> agreement -> transactionAdditionalTerms -> equityAdditionalTerms -> extraordinaryEvents -> additionalDisruptionEvents -> determiningParty exists
then ancillaryParty -> role contains AncillaryRoleEnum -> DisruptionEventsDeterminingParty
and if ancillaryParty -> role contains AncillaryRoleEnum -> DisruptionEventsDeterminingParty
then contractDetails -> documentation -> agreementTerms -> agreement -> transactionAdditionalTerms -> equityAdditionalTerms -> extraordinaryEvents -> additionalDisruptionEvents -> determiningParty exists Referenced by
4 types hold a Trade 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 |
|---|---|---|
| TradeNoExecutionDetails | returns | — |
| ExtractBeforeTrade | returns | — |
| ExtractAfterTrade | returns | — |
| MapTrade | returns | — |
| EquityPerformance | takes | Part 1 Section 12 of the 2018 ISDA CDM Equity Confirmation for Security Equity Swap, Para 75. 'Equity Performance' means, in respect of an Equity Cash Settlement Date, an amount in the Settlement Currency determined by the Calculation Agent as of the Equity Valuation Date to which the Equity Cash Settlement Amount relates, pursuant to the following formula: Equity Performance = (Rate Of Return) Equity Notional Amount. |
| TradeNoExecutionDetails | takes | — |
| FxMarkToMarket | takes | Representation of sample mark to market calculation provided by a member firm. |
| BuildStandardizedSchedule | takes | Takes a trade and uses qualification to extract the relevant information to populate the grid that will be used to calculate the gross initial margin. |
| StandardizedScheduleAssetClass | takes | Identifies the asset class of a trade from qualifying functions, according to the standardized schedule classification. |
| StandardizedScheduleProductClass | takes | Identifies the product class of a trade from qualifying functions, according to the standardized schedule classification. |
| StandardizedScheduleNotional | takes | Extracts the notional amount of a trade, according to the product class-depending extraction method defined in the ISDA industry survey. |
| StandardizedScheduleNotionalCurrency | takes | Extracts the notional currency of a trade, according to the product class-depending extraction method defined in the ISDA industry survey. |
| StandardizedScheduleDuration | takes | Extracts the duration of a trade, according to the product class-depending extraction method defined in the ISDA industry survey. |
Open Trade 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.