Build Number: 6; Document built: Tue 08/07/2012 20:12:18.91
Copyright (c) 1999 - 2012 by International Swaps and Derivatives Association, Inc.
Financial Products Markup Language is subject to the FpML® Public License.
FpML® is a registered trademark of the International Swaps and Derivatives Association, Inc.
A copy of this license is available at http://www.fpml.org/license/license.html
The FpML specifications provided are without warranty of any kind, either expressed or implied, including, without limitation, warranties that FpML, or the FpML specifications are free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the specifications is with you. Should any of the FpML specifications prove defective in any respect, you assume the cost of any necessary servicing or repair. Under no circumstances and under no legal theory, whether tort (including negligence), contract, or otherwise, shall ISDA, any of its members, or any distributor of documents or software containing any of the FpML specifications, or any supplier of any of such parties, be liable to you or any other person for any indirect, special, incidental, or consequential damages of any character including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses, even if such party shall have been informed of the possibility of such damages.
1 INTRODUCTION AND OVERVIEW
1.1 STATUS OF THIS DOCUMENT
1.2 ORGANIZATION OF THE DOCUMENTATION
1.2.1 Schema Reference
1.2.2 Other Documents in the Specification
1.2.3 Diagram Notation
1.3 WORKING GROUP MEMBERS AND ACKNOWLEDGEMENTS
1.3.1 Architecture Working Group
1.3.2 Business Process Working Group
1.3.3 Regulatory Reporting Working Group
1.3.4 Validation Working Group
1.3.5 IRD Products Working Group
1.3.6 Credit Derivatives Working Group
1.3.7 FX Working Group
1.3.8 Equity Derivatives Working Group
1.3.9 Commodity Derivatives Working Group
1.3.10 Pricing and Risk Working Group
1.3.11 Collateral Working Group
1.4 FpML INTRODUCTION
1.5 REQUESTED FEEDBACK
1.5.1 New Regulatory Reporting Views
1.5.2 Message Framework/Correlation ID
1.5.3 Providing Feedback
1.6 CHANGES IN THIS VERSION
1.6.1 Changes compared to FpML 5.2 Recommendation 2011-11-22
1.6.2 Changes compared to FpML 5.1 Recommendation (build 9)
1.6.3 Incompatible changes compared to FpML 5.1
1.7 SCOPE
1.7.1 Architecture Framework
1.7.2 Business Process Scope
1.7.2.1 Generic processes:
1.7.2.1.1 Post-trade
1.7.2.2 Generic (Multi-Event) Flows
1.7.3 Validation Scope
1.7.4 IRD Scope
1.7.5 Credit Derivatives Scope
1.7.6 FX Scope
1.7.7 Equity Derivative Options and Forwards Scope
1.7.8 Return Swaps Scope
1.7.9 Correlation Derivatives Scope
1.7.10 Variance Derivatives Scope
1.7.11 Dividend Derivatives Scope
1.7.12 Commodity Derivative Product Scope
1.8 CHARACTER ENCODING AND CHARACTER REPERTOIRE
1.8.1 Character Encoding
1.8.2 Character Repertoire
1.9 TOOLS AND VALIDATION
1.9.1 Schema and Example Validation
2 FpML OVERVIEW
2.1 FpML
2.2 Overview of FpML views
2.3 Overview of the organization of the master schema
2.4 Overview of Document Types
2.5 Using FpML
2.6 The FpML root element
2.7 Annotations
2.7.1 eCore
2.8 Main Components
2.8.1 The DataDocument type
2.8.2 The Trade Component
2.8.2.1 tradeHeader
2.8.2.1.1 Primary Trade Identifier
2.8.2.1.2 Party Trade Information
2.8.2.2 product
2.8.2.2.1 Product Identification
2.8.2.3 otherPartyPayment
2.8.2.4 brokerPartyReference
2.8.2.5 calculationAgent
2.8.2.6 documentation
2.8.2.6.1 contractualMatrix
2.8.2.6.1.1 Examples of using the contractualMatrix structure
2.8.2.7 collateral
2.8.2.7.1 independentAmount
2.8.2.8 governingLaw
2.8.3 The Portfolio Component
2.8.4 The Party Component
2.8.5 The Account Component
2.8.6 The Product Component
2.8.7 The Strategy Component
2.9 More Background on FpML's Design
2.9.1 Rationale for Structured Approach
2.9.2 Component Framework
2.9.3 Coding Schemes
3 BUSINESS PROCESS ARCHITECTURE
3.1 Introduction
3.1.1 Why Business Messaging?
3.2 The Messaging Framework
3.2.1 Introduction
3.2.2 Issues in FpML 4 Messaging Framework
3.2.3 Design Assumptions
3.2.3.1 Highly Assured Transport
3.2.3.2 No Preservation of Message Sequence
3.2.3.3 Long-Running Processes
3.2.3.4 Observable Completion
3.2.3.5 Consistent Message Correlation
3.2.3.6 Consistent Error Reporting
3.2.3.7 Consistent correction and retraction mechanism
3.2.3.8 Consistent Processes Across Trades and Post-trade Events
3.2.3.9 Transport Characteristics
3.2.3.9.1 Purpose
3.2.3.9.2 Layers
3.2.3.9.3 Reliable Mode
3.2.3.9.4 Bulk Transfer Mode
3.2.4 Transport Independence
3.2.4.1 Business Process
3.2.4.2 Document
3.2.4.3 Messaging
3.2.4.4 Transport
3.2.5 Identification of Purpose
3.2.5.1 By Namespace (not used by FpML)
3.2.5.2 By Element Name (used by FpML 5.x)
3.2.5.3 By Element Type (used by FpML 4.x)
3.2.6 General Pattern of Messages
3.2.7 Naming Conventions
3.2.8 Acknowledgements
3.2.9 Message correlation
3.2.10 Message sequencing
3.2.11 Correlation ID optionality
3.2.12 Multi-Event Workflows
3.2.13 Other topics
3.2.13.1 onBehalfOf
3.2.13.2 party roles
3.2.13.3 separation of party and account
3.3 Regulatory Reporting Processes
3.4 Business Processes
3.4.1 FpML 5 Business Processes
3.4.2 Transaction life cycle
3.4.3 Generic (Multi-Event) Flows
3.4.3.1 Execution Notification Flow
3.4.3.1.1 Execution Notification
3.4.3.1.2 Execution Notification Correction
3.4.3.1.3 Execution Retraction
3.4.3.2 Execution Advice Flow
3.4.3.2.1 Execution Advice
3.4.3.2.2 Execution Advice Correction
3.4.3.2.3 Execution Advice Retraction
3.4.3.3 Trade Change Advice Flow
3.4.3.3.1 Trade Change Advice
3.4.3.3.2 Trade Change Advice Correction
3.4.3.3.3 Trade Change Advice Retraction
3.4.3.4 Trade Reference Information Update Flow
3.4.3.4.1 Trade Reference Information Update
3.4.3.4.2 Trade Reference Information Update Correction
3.4.3.4.3 Trade Reference Information Update Retraction
3.4.3.5 Consent Negotiation Flow
3.4.3.5.1 Purpose
3.4.3.5.2 Trade Novation
3.4.3.5.3 Clearing
3.4.3.6 Confirmation
3.4.3.6.1 Message Diagrams
3.4.3.6.1.1 requestConfirmation
3.4.3.6.1.2 requestConfirmationRetracted
3.4.3.6.1.3 confirmationAcknowledgement
3.4.3.6.1.4 confirmationException
3.4.3.6.1.5 confirmationStatus
3.4.3.6.1.6 confirmationAgreed
3.4.3.6.1.7 confirmationDisputed
3.4.3.6.2 Scenarios
3.4.3.6.2.1 Normal Operation
3.4.3.6.2.2 Exception
3.4.3.6.2.3 Correction Possible
3.4.3.6.2.4 Correction Not Possible
3.4.3.6.2.5 Retraction Possible
3.4.3.6.2.6 Retraction Not Possible
3.4.3.7 Clearing
3.4.3.7.1 Scenarios
3.4.3.7.1.1 Normal Operation
3.4.3.7.1.2 Exception
3.4.3.7.1.3 Correction Possible
3.4.3.7.1.4 Correction Not Possible
3.4.3.7.1.5 Retraction Possible
3.4.3.7.1.6 Retraction Not Possible
3.4.3.7.1.7 Clearing Status Notification (clearingStatus)
3.4.3.7.1.8 Request to de-clear
3.4.3.7.1.9 Compression Activity
3.4.3.8 Allocation
3.4.3.8.1 Scenarios
3.4.3.8.1.1 Normal Operation
3.4.3.8.1.2 Exception
3.4.3.8.1.3 Correction Possible
3.4.3.8.1.4 Correction Not Possible
3.4.3.8.1.5 Retraction Possible
3.4.3.8.1.6 Retraction Not Possible
3.4.4 Description of Business Events
3.4.4.1 Novation
3.4.4.2 Increase
3.4.4.3 Termination
3.4.4.4 Amendment
3.4.4.5 Allocation
3.4.4.5.1 Linking Mechanism
3.4.4.5.1.1 Design Assumptions
3.4.4.5.1.2 Implementation
3.4.4.5.1.3 Examples
3.4.4.5.1.3.1 Normal Trade
3.4.4.5.1.3.2 Normal trade that is subsequently split/allocated into two trades
3.4.4.5.1.3.3 Each of the resulting allocated trades
3.4.4.5.1.4 N-Level Allocations
3.4.4.5.2 Short Form Representation of Allocations
3.4.4.6 Option Exercise / Expiry
3.4.4.6.1 Scenarios
3.4.4.6.2 Modeling
3.4.4.6.3 Order Placement
3.4.4.7 Clearing / deClear
3.4.4.7.1 Clearing
3.4.4.7.2 DeClear
3.4.5 Portfolio-type Processes
3.4.5.1 Business Requirements
3.4.5.2 Portfolio Reference
4 VALIDATION ARCHITECTURE
4.1 Validation Rules
4.2 Reference Implementations
4.2.1 Java and C#
4.2.2 Java/XPath
4.2.3 CLiX
4.3 Test Cases
4.4 Target Audience
4.5 Background
4.6 Rule Specifications
4.6.1 General Principles and Guidelines
4.6.2 Mathematical Notation
4.6.3 Rule Definition and Layout
4.6.4 Defining New Terms as Functions
4.6.4.1 How to use functions?
4.6.5 Formatting
4.7 Technical Guidelines
4.7.1 Implementations
4.7.2 Evaluation of Dates
4.7.3 Contains
4.8 Revision and Publication Process
4.9 Normativity and its Implications
5 CROSS-ASSET PRODUCT ARCHITECTURE
5.1 Cross-Asset Products Scope
5.2 Overall Architecture
5.3 The Strategy Component
5.4 The InstrumentTrade Details Component
6 INTEREST RATE DERIVATIVE PRODUCT ARCHITECTURE
6.1 Interest Rate Swap
6.1.1 Relative Swap
6.1.2 Non-Deliverable Settlement Provision
6.2 Asset Swap
6.2.1 Implementation
6.2.2 Design Rationale
6.3 Inflation Swap
6.3.1 Design Approach
6.3.2 Implementation
6.3.2.1 Inflation Terms
6.4 Forward Rate Agreement
6.5 Option Components
6.5.1 European Exercise
6.5.2 American Exercise
6.5.3 Bermuda Exercise
6.5.4 Early Termination Provision
6.5.5 Cancelable Provision
6.5.6 Extendible Provision
6.5.7 Swaption
6.5.8 Cap / Floor
6.6 Cash Settlement
7 CREDIT DERIVATIVE PRODUCT ARCHITECTURE
7.1 Introduction
7.1.1 credit default swap
7.1.2 credit default swap index
7.1.3 credit default swap basket
7.1.4 mortgage credit default swap
7.1.4.1 Main differences between Mortgage and Corporate CDS
7.1.4.2 The Pay-As-You-Go model
7.1.5 loan credit default swap
7.1.6 credit default swap option
7.2 creditDefaultSwap
7.3 generalTerms
7.3.1 referenceObligation
7.3.1.1 bond and convertibleBond
7.3.1.2 mortgage
7.3.1.3 loan
7.3.2 referenceInformation
7.3.3 indexReferenceInformation
7.3.3.1 Index Tranche
7.3.3.2 Settled Entity Matrix
7.3.4 basketReferenceInformation
7.3.4.1 Basket Tranche and Nth to Default
7.4 feeLeg
7.4.1 Credit default swap
7.4.2 Credit default swap index
7.4.3 Mortgage derivatives
7.5 protectionTerms
7.5.1 Mortgage derivatives
7.6 physicalSettlementTerms and cashSettlementTerms
7.7 creditDefaultSwapOption
7.7.1 Option Components
7.7.1.1 OptionBase
7.7.1.2 OptionBaseExtended
7.7.1.2.1 Premium
7.8 Appendix A: Naming differences between FpML 5.2 Credit Derivatives Subschema and 2003 ISDA Credit Derivatives Definitions
8 FX PRODUCT ARCHITECTURE
8.1 FX Scope
8.2 Foreign Exchange Spot and Forward
8.2.1 Exchanged Currency
8.2.1.1 Settlement Information
8.2.1.1.1 Settlement Instruction
8.2.1.1.1.1 Correspondent Information
8.2.1.1.1.2 Intermediary Information
8.2.1.1.1.3 Beneficiary Information
8.2.1.1.1.4 Beneficiary Bank
8.2.1.1.1.5 Split Settlement
8.2.2 Exchange Rate
8.2.3 Non Deliverable Settlement
8.3 Foreign Exchange Swap
8.3.1 FX Swap Leg
8.4 Foreign Exchange Option
8.4.1 FX Option Exercise
8.4.1.1 American Exercise
8.4.1.2 European Exercise
8.4.2 FX Features
8.4.2.1 Fx Barrier Feature
8.4.2.2 Fx Asian Feature
8.4.3 Premium
8.4.4 Cash Settlement
8.5 Foreign Exchange Binary and Digital Options
8.5.1 European Exercise and trigger
8.5.2 American Exercise and touch
8.6 Term Deposit
8.6.1 Term Deposit Features
8.7 Trade Strategies
9 EQUITY DERIVATIVE OPTIONS PRODUCT ARCHITECTURE
9.1 Equity Derivative Options and Forwards Scope
9.2 Overall Architecture
9.2.1 brokerEquityOption
9.2.2 equityForward
9.2.3 equityOption
9.2.4 equityOptionTransactionSupplement
9.3 Component Descriptions
9.3.1 Underlyer
9.3.2 Equity Exercise
9.3.2.1 European Exercise
9.3.2.2 American Exercise
9.3.2.3 Bermuda Exercise
9.3.3 Features
9.3.3.1 Equity Option Feature
9.3.3.1.1 asian
9.3.3.1.2 Barrier and Knock
9.3.3.1.3 Pass Through
9.3.3.1.3.1 Alternate Approaches
9.3.3.1.4 Dividend Adjustment
9.3.3.2 Fx Feature
9.3.3.3 Strategy Feature
9.3.4 Equity Premium
9.3.5 Adjustment of dates in Equity Options
10 RETURN SWAPS PRODUCT ARCHITECTURE
10.1 Return Swaps Scope
10.2 Introduction
10.2.1 The structure of the generic Return Swap
10.2.2 Equity Swap Transaction Supplement
10.3 Component Descriptions
10.3.1 The return leg
10.3.1.1 The payer and receiver party
10.3.1.2 The effective date and the termination date
10.3.1.3 The underlyer
10.3.1.3.1 The equity:
10.3.1.3.2 The index:
10.3.1.3.3 The mutual fund:
10.3.1.3.4 The exchange-traded fund:
10.3.1.3.5 The future contract:
10.3.1.3.6 The convertible bond:
10.3.1.3.7 The commodity:
10.3.1.4 The valuation
10.3.1.5 The notional amount
10.3.1.6 The amount
10.3.1.7 The return
10.3.1.8 The notional adjustment
10.3.1.9 The FX Feature (old FX terms)
10.3.2 The interest leg
10.3.2.1 The payer and receiver party
10.3.2.2 The calculation dates
10.3.2.3 The notional amount
10.3.2.4 The interest amount
10.3.2.5 The interest calculation
10.3.3 The initial and final stub
10.3.4 The principal exchange
10.3.5 The additional payments when involving the principal parties to the trade
10.3.6 The optional early termination
11 VARIANCE PRODUCT ARCHITECTURE
11.1 Variance Derivatives Scope
11.2 Overall Architecture
11.2.1 varianceSwap
11.2.2 varianceSwapTransactionSupplement
11.2.3 VarianceLeg
11.2.4 varianceOptionTransactionSupplement
12 DIVIDEND PRODUCT ARCHITECTURE
12.1 Dividend Derivatives Scope
12.2 Overall Architecture
12.2.1 dividendSwapTransactionSupplement
12.2.2 dividendLeg
12.2.3 fixedLeg
13 CORRELATION PRODUCT ARCHITECTURE
13.1 Correlation Derivatives Scope
13.2 Overall Architecture
13.2.1 correlationSwap
13.2.2 correlationLeg
14 BOND OPTIONS PRODUCT ARCHITECTURE
14.1 Introduction
14.1.1 bondOption
14.2 Shared Option Components
14.2.1 OptionBase
14.2.2 OptionBaseExtended
14.2.2.1 Premium
14.2.2.2 Exercise
14.2.2.3 The ExerciseProcedure construct
14.2.2.4 The Notional construct
14.2.2.5 The Denomination construct
14.3 The Option on Bond and Convertible Bond
14.3.1 The strike
14.3.2 The convertible bond underlyer
15 LOAN PRODUCT ARCHITECTURE
16 COMMODITY DERIVATIVE PRODUCT ARCHITECTURE
16.1 Introduction
16.2 Commodity Underlyer
16.3 commoditySwap
16.3.1 fixedLeg
16.3.2 floatingLeg
16.3.2.1 calculation
16.3.3 Physical Leg
16.3.3.1 Coverage
16.3.3.2 Product Representation
16.3.3.2.1 Gas Physical Leg
16.3.3.2.1.1 gasPhysicalLeg - deliveryPeriods
16.3.3.2.1.2 gasPhysicalLeg - product
16.3.3.2.1.3 gasPhysicalLeg - deliveryConditions
16.3.3.2.1.4 gasPhysicalLeg - deliveryQuantity
16.3.3.2.2 Oil Physical Leg
16.3.3.2.2.1 oilPhysicalLeg - deliveryPeriods
16.3.3.2.2.2 oilPhysicalLeg - product
16.3.3.2.2.3 oilPhysicalLeg - deliveryConditions
16.3.3.2.2.4 oilPhysicalLeg - deliveryQuantity
16.3.3.2.3 Electricity Physical Leg
16.3.3.2.3.1 electricityPhysicalLeg - deliveryPeriods
16.3.3.2.3.2 electricityPhysicalLeg - product
16.3.3.2.3.3 electricityPhysicalLeg - deliveryConditions
16.3.3.2.3.4 electricityPhysicalLeg - deliveryQuantity
16.3.3.2.4 Coal Physical Leg
16.3.3.2.4.1 coalPhysicalLeg - deliveryPeriods
16.3.3.2.4.2 coalPhysicalLeg - product
16.3.3.2.4.3 coalPhysicalLeg - deliveryConditions
16.3.3.2.4.4 coalPhysicalLeg - deliveryQuantity
16.4 commodityOption
16.4.1 CommodityFinancialOption
16.4.2 CommodityPhysicalOption
16.5 commodityForward
16.5.1 fixedLeg
16.5.2 bullionPhysicalLeg
19 CHANGES IN THIS VERSION
19.1 Changes compared to FpML 5.2 Recommendation 2011-11-22
19.2 Changes compared to FpML 5.1 Recommendation (build 9)
19.3 Incompatible changes compared to FpML 5.1
20 SCHEMA REFERENCE
21 SCHEMA AND EXAMPLES
23 SCHEME DEFINITIONS
This is the FpML 5.2 Reccomendation #2 for review by the public and by FpML members and working groups.
The FpML Working Groups encourage reviewing organizations to provide feedback as early as possible. Comments on this document should be sent by filling in the form at the following link: http://www.fpml.org/issues. An archive of the comments is available at http://www.fpml.org/issues/
There are also asset class-specific mailing lists; you can join them at the following link:
A list of current FpML Recommendations and other technical documents can be found at
This document has been produced as part of the FpML 5.2 activity and is part of the Standards Approval Process.
The FpML documentation is organized into a number of subsections.
This section provides an overview of the specification.
These are automatically generated reference documents detailing the contents of the various sections in the FpML schema.
Most diagrams in this specification come from TIBCO's XML Turbo application which is used to batch generate the pictures in the documentation. The notation follows the pattern:
This document was produced by the following working groups:
Voting Members
Non-Voting Members
The Financial Products Markup Language (FpML) is the industry standard enabling e-business activities in the field of financial derivatives and structured products. The development of the standard, controlled by ISDA (the International Swaps and Derivatives Association), will ultimately allow the electronic integration of a range of services, from electronic trading and confirmations to portfolio specification for risk analysis. All types of over-the-counter (OTC) derivatives will, over time, be incorporated into the standard.
FpML is an application of XML, an internet standard language for describing data shared between computer applications.
The FpML Reporting Working Group has defined two new views, "Transparency" and "Recordkeeping", to support parties and execution facilities reporting trading activity into Swaps Data Repositories (SDRs), as required by the Commodities Futures Trading Commission's 17 CFR 43 and 45, and similar requirements from the Securities and Exchange Commission in 17 CFR 240. The FpML Standards Committee invites comments on the proposed materials including schemas, examples, and documentation.
In WD#2, a number of new products have been added to Transparency view. The changes versus Confirmation view have been modeled on other products in WD#1, but the product representations have not yet been reviewed in detail in the working group. The FpML Reporting Working Group invites feedback on the detailed contents in Transparency view of any product.
The FpML Business Process Working Group has adjusted the multiplicity of the correlation IDs and is seeking feedback on this change. In particular, is there a need for multiple correlation IDs if the correlation ID on original requests is made optional?
Comments on this document should be sent by filling in the form at the following link: http://www.fpml.org/issues.
View PDF for details on schema changes
View PDF for details on validation rules changes
View SCHEME DEFINITIONS for details on coding schemes changes
The scope of FpML 5.2 includes broadened BusinessProcess/Messaging coverage and additional product support, specifically:
The various Working Groups have developed FpML 5.2 within the FpML Architecture 3.0 Specification defined by the Architecture Working Group. This document defines that standards and principles on which the FpML grammatical definitions are based.
The FpML Architecture 3.0 builds upon the earlier FpML Architecture specifications and the conventions of FpML 1.02b before that. The refinement of the FpML architecture is an evolutionary process bought about by changes in the XML technology upon which it is based and the requirements of the standard as its scope expands.
The FpML Messaging Task Force group was formed to define a new messaging framework that insures consistent processes across trades and post-trade events, observable completion, consistent message correlation, consistent error reporting, consistent correction and retraction.
Most of the FpML 5 business processes are “generic” processes that can apply to new trades and/or any post-trade events. This means that the message name indicates the business process (e.g. confirmation, execution notification, etc.) but not the type of event (e.g. trade, amendment, etc.). The payload of the message indicates the type of the event.
The business processes currently supported include:
All the processes described in this section are applied to the following events:
To support these business processes, a number of messages have been defined. Please see the "Business Process Architecture" section for more information.
The Validation Working Group provides semantic, or business-level validation rules for FpML 5.2. These validation rules, which are aimed at normalizing the use of elements within FpML, are issued as part of the FpML Specification in the validation section of this document.
The validation working group publishes with its releases:
The current specification includes a set of rules for Interest Rate Derivatives, Equity Derivatives, Credit Derivatives, Loans, FX, and for shared components. The rules for the different asset classes will be further enhanced in future versions.
In FpML 5.2 Reccomendation #2 the following Interest Rate Derivative products are covered:
In FpML 5.2 Reccomendation #2 the following Credit Derivative products are covered:
The Scope of FpML 5.2 Reccomendation #2 includes redesigned FX product model developed by the Modeling Task Force (MTF) and FX Working Group to make it more consistent with other FpML product representations and to facilitate its further development. As a result of this work many of an original 4.x model’s issues were addressed:
In FpML 5.2 Reccomendation #2 the following FX products are covered:
In addition, support for the following money market instrument is also provided:
The EQD Products Working Group has extended the FpML standard to cover the following Equity Derivative products
FpML provides generic Return Swaps support including "long form" Equity Swap representations, as well as Total Return Swaps. A separate product element called equitySwapTransactionSupplement supports "short form" Equity Swap Transaction Supplement.
Return-type Swaps have 1-to-many Legs, all of which must be derived from the ReturnSwapLeg type. Instances of Legs are returnLeg, interestLeg. Other Leg types may be derived from ReturnSwapLeg at will, to allow for private extensions to support whatever type of Generic Return Swap is desired.
The scope of this FpML representation for return swaps is to capture the following types of swaps that have equity-related underlyers:
Extraordinary Events terms have been incorporated, to take into consideration the release of the 2002 ISDA Definitions for Equity Derivatives.
Trigger swaps, in which equity risk morphs into a fixed income risk once a certain market level is reached, may be supported in a subsequent release.
The Equity Derivative Working Group extended FpML to cover:
The Equity Derivative Working Group extended FpML to cover:
The Equity Derivative Working Group extended FpML to cover:
The Commodities Working Group will extend the FpML standard to include trade types and products for the OTC commodities markets, following the structure and coverage of the 2005 ISDA Commodity Definitions. The following are included in version 5-2:
Business Process is including Confirmations, Valuations, Reporting
Producers of FpML documents intended for interchange with other parties must encode such documents using either UTF-8 or UTF-16. Consumers of FpML documents must be able to process documents encoded using UTF-8, as well as documents encoded using UTF-16. For more information, see
Unrestricted FpML elements may use any valid XML characters. For more information, see
http://www.w3.org/TR/REC-xml#charsets
Certain elements and attributes (such as scheme URIs) are defined with more restrictive types, such as xsd:normalizedString, xsd:token, or xsd:anyURI. For these types, please see the relevant data type definition in the XML Schema datatypes specification:
FpML is designed based on a number of key principles and conventions. Some of these include:
Although these basic principles have consistently been observed, over the life of the specification there has been some evolution in the details, and as a result there have been some changes in the appearance of FpML. A number of these changes have been introduced to take advantage of the power created by XML schema. The original version of the FpML Architecture is located at FpML Architecture 1.0. The latest version of the FpML architecture principles is described in detail in the FpML Architecture 3.0. That document discusses how to create and extend FpML definitions.
The remainder of this section is intended to describe how the architecture principles were applied in developing FpML, and how to use the resulting spec. Please see the end of this section for a fuller explanation of the motivation for the FpML design approach.
With FpML 5-2 , FpML has been divided into several very closely related schemas to better support different types of business processes. Each of these schemas, called a "view", has a distinct namespace and element and type definitions. However, each view is built from the same source schema, and so shares a number of features, such as element names.
The following features are the SAME across all views:
The following features are DIFFERENT in different views:
In FpML 5-2, the list of supported views includes:
The following diagram shows the relationship of some of these views for Dodd-Frank reporting:
The rationale for the concept of "views" is to provide a consistent representation of key information across many types of business process, while allowing the set of mandatory and optional data to vary between processes. For example, when a firm reporting on an interest rate swap it may not provide information such as: payment date and reset date definitions on the floating side, or the business day adjustments that were used, etc. However, all of these pieces of information are crucial for confirming that swap once it is traded. So for confirmation view we want these pieces of information to be mandatory, while they are optional for pre-trade view.
A present, the concept of views is implemented as follows:
In the reporting view, a firm reporting on an interest rate swap may provide the following elements:
Thus, the FpML for reporting on a 5-year USD-LIBOR-3M swap may look something as follows:
<swap> <productType>InterestRateSwap</productType> <assetClass>InterestRates</assetClass> <swapStream> <payerPartyReference href="hedge_global"/> <calculationPeriodDates id="floatingCalcPeriodDates"> <effectiveDate> <adjustedDate>2009-08-04Z</adjustedDate> </effectiveDate> <terminationDate> <adjustedDate>2021-03-01Z</adjustedDate> </terminationDate> </calculationPeriodDates> <calculationPeriodAmount> <calculation> <notionalSchedule> <notionalStepSchedule> <initialValue>623161.01</initialValue> <step> <stepDate>2009-09-01</stepDate> <stepValue>617840.01</stepValue> </step> <!-- .... intermediate values removed --> <step> <stepDate>2021-01-01</stepDate> <stepValue>9792.01</stepValue> </step> <step> <stepDate>2021-02-01</stepDate> <stepValue>5486.01</stepValue> </step> <currency>USD</currency> </notionalStepSchedule> </notionalSchedule> <floatingRateCalculation> <floatingRateIndex>USD-LIBOR-BBA</floatingRateIndex> <indexTenor> <periodMultiplier>1</periodMultiplier> <period>M</period> </indexTenor> <spreadSchedule> <initialValue>3.40</initialValue> </spreadSchedule> </floatingRateCalculation> <dayCountFraction>ACT/360</dayCountFraction> </calculation> </calculationPeriodAmount> </swapStream> <swapStream> <receiverPartyReference href="hedge_global"/> <calculationPeriodAmount> <calculation> <notionalSchedule> <notionalStepSchedule> <initialValue>623161.01</initialValue> <step> <stepDate>2009-09-01</stepDate> <stepValue>617840.01</stepValue> </step> <!-- .... intermediate values removed --> <step> <stepDate>2021-01-01</stepDate> <stepValue>9792.01</stepValue> </step> <step> <stepDate>2021-02-01</stepDate> <stepValue>5486.01</stepValue> </step> <currency>USD</currency> </notionalStepSchedule> </notionalSchedule> <fixedRateSchedule> <initialValue>0.0711</initialValue> </fixedRateSchedule> <dayCountFraction>ACT/360</dayCountFraction> </calculation> </calculationPeriodAmount> </swapStream> </swap>
In confirmation view, a firm confirming a swap would include, in addition to the above, the following elements:
FpML is divided into several sub-schema files, which organize the definitions into smaller and more maintainable building blocks. These building blocks include:
An FpML document can be either of two categories:
The following documents give a general overview of what is covered in FpML Data Documents and FpML Messages:
Before beginning to use FpML, an architect must answer several questions:
If the application requires a new messaging layer, particularly if it will be used between institutions, the FpML messaging layer is recommended. If the application is primarily a data storage and retrieval application, the DataDocument type is available. For example, to store trades in an XML trade archive, and then retrieve them for a display or to generate, say, a confirmation, the DataDocument format will likely be sufficient. To implement a trade matching service between institutions, you should use the messaging layer.
In FpML 5.0, there is a different root element for each different message or document type. For example, a message to request that a novation be confirmed begins "<requestNovationConfirmation> ...", while a Data Document begins "<dataDocument> ...". Each different root element defines a structure that corresponds to the business requirements of that message or document.
The following short example illustrates this, using a "Request Quote" message from the pre-trade view:
<requestQuote fpmlVersion="5-0" xmlns="http://www.fpml.org/FpML-5-0/pretrade" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.fpml.org/FpML-5-0/pretrade ../fpml-main-5-0.xsd"> <header> <messageId messageIdScheme="http://www.fpml.org/msg-id">123</messageId> <sentBy>DEF</sentBy> <sendTo>ABC</sendTo> <creationTimestamp>2007-04-02T15:38:00-00:00</creationTimestamp> </header> <creditDefaultSwap> <!-- details omitted --> </creditDefaultSwap> </requestQuote>
The simplest FpML document is a "DataDocument" (root='dataDocument'). This is similar to an FpML 3.0 document, and is described in the next section.
The FpML root element contains attributes that specify the FpML version (fpmlVersion='5-0' for FpML 5.0), the schema name and location, the namespace, and related properties. The "version" attribute from previous FpML versions has been renamed to "fpmlVersion" to provide an unambiguous indicator of the beginning of the FpML document that is not reliant on namespaces. Each different view has a different namespace. See the Architecture 2.1 specification for more details on this.
Since version 4.3, the FpML Schema has included a set of eCore annotations. These annotations improve the existing model by providing additional information that W3C Schema is not able to represent.
eCore is part of the Eclipse Modelling Framework. This is the modelling technology Eclipse based on a subset of UML.
eCore annotations add back the model information missing from XML Schema, specifically:
In terms of implementation, the FpML Schema root element includes these additional attributes:
In addition, the ecore annotations specify the specific target of an href attribute:
<xsd:complexType name="AccountReference"> <xsd:annotation> <xsd:documentation xml:lang="en">Reference to an account.</xsd:documentation> </xsd:annotation> <xsd:attribute name="href" type="xsd:IDREF" use="required" ecore:reference="Account"/> </xsd:complexType>
Benefits of eCore annotations include:
More details about eCore annotations are available at: http://www.eclipse.org/modeling/emf/docs/overviews/XMLSchemaToEcoreMapping.pdf
There are a set of elements in FpML that are used across the different message types. These include elements such as trades, portfolios, events and parties.
As mentioned above, the structure of the FpML document depends on the "type" attribute. The simplest FpML document is a "DataDocument", which is similar to an FpML 3.0 document. The DataDocument is used to represent static data. A DataDocument looks like this:
It contains:
Since the introduction of event in FpML 4.1, the content of "DataDocument" was constraint using "xsd:choice" to reduce the number of permutations between the different elements.
The trade is typically a top-level component within an FpML root element. A trade is an agreement between two parties to enter into a financial contract and the trade component in FpML contains the information necessary to execute and confirm that trade. The trade includes a trade header, economic details (enhanced from version 5.2 to allow non-OTC products to be represented), and other legal, operational, and documentation terms.
The information within tradeHeader is common across all types of trade regardless of product. In FpML 5.2 this element contains the trade date and party trade identifiers, as well as party-specific trade information.
In FpML, there is no notion of primary trade or contract identifier. Trade identification is meaningful within the context of a party. That’s why the partyTradeIdentifier structure contains a partyReference element referencing a party. Within the structure, multiple tradeId or versionedTradeId elements can be specified. This is useful for allowing organizations with multiple systems, each one of them generating one or multiple trade identifiers, to be able to record that in the FpML message. Each system is identified by a unique value in the tradeIdScheme attribute.
<partyTradeIdentifier> <partyReference href="INVM1"/> <versionedTradeId> <tradetId contractIdScheme="http://www.investmentmgm.com/coding-scheme/trade-id">CDI290204</tradetId> <version>1</version> </versionedTradetId> <versionedTradeId> <tradeId tradeIdScheme=”valuation-system/trade-id”>VS3456332</tradeId> <version>1</version> </versionedTradeId> </partyTradeIdentifier>
In order to be able to process trade identification information, in absense of a central system, participants should decide on how to store the identification information of the trade:
FpML allows a number of pieces of additional information to be recorded about how the trade was executed and for what purposes. This is contained in partyTradeInformation. The specifics of this type may alter depending on the view.
Product is an abstract concept in FpML and an actual product element is not used. Instead, one of the FpML products will appear directly under trade. From version 5.2, instead of an OTC product it is possible to represent the basic details of a trade of a multiply-traded instrument such as a security; this is provided to allow reporting on non-OTC trades that result from OTC trading activity, for example physical settlements of OTC options on securities.
All FpML products inherit two optional elements from the Product type: productType and productId.
In order to identify the type of product contained within an FpML message, the Standards Committee encourages the use of structural analysis. Structural analysis is based on checking the presence of some specific elements within the message instead of relying on the value of a specific element such as productType.
The presence of some specific elements helps to define the product category of the transaction that is being sent. For example, the presence of the creditDefaultSwap and referenceInformation elements in a message is critical to categorize the product as single name credit default swap.
Product categorization using only the productType element value should be avoided. It should only be used by internal messaging implementations or by service providers. In both cases the code list is well-controlled and commonly understood by all participants.
This component contains additional payments such as brokerage paid to third parties which are not part of the economics of a trade itself.
The brokerPartyReference identifies the party or parties that arranged the trade.
The calculation agent identifies the party or parties responsible for performing calculation duties, such as cash settlement calculations.
The documentation element defines where the legal definitions used for the trade are documented.
The contractualMatrix element is a generic mechanism for making references to ISDA-published matrices within an FpML trade definition.
Specifically it is designed to:
For Interest Rate Derivatives:
To specify that the July 1, 2004 version of the ISDA Definitions Settlement Matrix for Early Terminations and Swaptions is incorporated into the Confirmation:
<documentation> ... <contractualDefinitions>ISDA2000</contractualDefinitions> <contractualMatrix> <matrixType>SettlementMatrix</matrixType> <publicationDate>2004-07-01</publicationDate> </contractualMatrix> </documentation>
For Credit Derivatives:
To specify that the March 7, 2005 version of the Credit Derivatives Physical Settlement Matrix is incorporated into the Confirmation and that the applicable Transaction Type is North American Corporate:
<documentation> ... <contractualDefinitions>ISDA2003Credit</contractualDefinitions> <contractualSupplement>ISDA2003CreditMay2003</contractualSupplement> <contractualSupplement>ISDA2003Credit2005MatrixSupplement</contractualSupplement> <contractualMatrix> <matrixType>CreditDerivativesPhysicalSettlementMatrix</matrixType> <publicationDate>2005-03-07</publicationDate> <matrixTerm matrixTermScheme="http://www.fpml.org/coding-scheme/ credit-matrix-transaction-type-1-0">NorthAmericanCorporate</matrixTerm> </contractualMatrix> </documentation>
The collateral element defines the collateral obligations of a party. The collateral element is an optional child of Trade and Independent Amount is a mandatory child of the Collateral element.
Independent Amount was present at a Product Specific level, being both defined and used within Credit Derivatives. However, the concept of Independent Amount applies across products; it is the method of calculation which varies according to the type of Product. For this reason Independent Amount was moved to the trade level in version 4.1 Last Call Working Draft.
PaymentRule is an abstract type defined for extension purposes. PercentageRule is a derived type from PaymentRule. It contains the payment percentage and a reference to the notional amount. Type substitution mechanism will be used in this case, which makes it extensible in case there is a need to add other calculation methods in the future.
The notionalAmountReference defines a reference to the notional amount. This reference is particularly useful in products like interest rate swaps, in which the leg of the notional needs to be specified. In order to accomplish that, an optional id attribute (IDREF type) has been added to the notional amount elements of the different products.
After some discussion, the Credit Derivatives Working Group decided that people will not use FpML without a CSA being signed, so a collateral party element is not necessary. The Collateral element itself should is a useful container for future work. The independentAmount element may not be required in the presence of CSA, but its optional inclusion should be supported for the avoidance of doubt, and expression of any variation from the CSA
The governingLaw element identifies which legal system will be used to enforce the contract.
The portfolio component specifies a set of trades as a list of tradeIds and a list of sub portfolios. Portfolios can be composed of other portfolios using a composition pattern. By using the tradeId to identify the trade the standard allows for portfolios to be sent around without the full trade record.
The party component holds information about a party in involved any of the trades or portfolios included in the document. Parties can perform multiple roles in a trade lifecycle. For example, the principal parties obligated to make payments from time to time during the term of the trade, but may include other parties involved in, or incidental to, the trade, such as parties acting in the role of novation transferor/transferee, broker, calculation agent, etc. In FpML roles are defined in multiple places within a document.
It should be noted that an FpML document is not 'written' from the perspective of one particular party, i.e. it is symmetrical with respect to the principal parties. The particular role that a party plays in the trade, e.g. buyer, seller, stream payer/receiver, fee payer/receiver, is modeled via the use of references from the component where the role is identified (relatedParty structure) to the party component.
This is a description of the elements:
Example:
... <party id="SKY"> <partyId partyIdScheme="http://www.sky.org/coding-schem/code-id">SkyLTD</partyId> <partyName>Sky Limited</partyName> </party> ...
The Account component holds information about an account that represents any party's account at another party. Parties may be identified by the account at another party.
This is a description of the elements:
Example:
... <account id="GEN478"> <accountId>47896325</accountId> <accountName>Sky General Account</accountName> <accountBeneficiary href="SKY"/> </account> ...
The product component specifies the financial instrument being traded. This component captures the economic details of the trade. It is modeled as a substitution group; each asset class may create one or more product definitions. Some examples of products that different working groups have defined include:
This section provides some additional background on the design of FpML.
FpML incorporates a significant level of structure, rather than being a 'flat' representation of data. This structuring is achieved through the grouping of related elements describing particular features of a trade into components. Components can both contain, and be contained by, other components.
An alternative approach would have been to collect all the required elements in a single large component representing a product or trade. A flat structure of this kind would capture all the relevant information concisely but would also constrain the model in two important respects, namely, ease of implementation and extensibility.
Grouping related elements into components makes it easier to validate that the model is correct, that it is complete and that it doesn't contain redundancy. This is true, both from the perspective of readability to the human eye, and also from the perspective of processing services. Processing services that do not need all the information in a trade definition can isolate components and be sure that the complete set of elements required, and only the elements required, is available for the particular process in hand.
Components additionally serve as the building blocks for a flexible and extensible model. Generally speaking, the complexity of financial products is a result of combining a few simple ideas in a variety of different ways. The component structure supports a trade content definition that is flexible enough to represent the wide variation of features found in traded financial instruments.
It should be noted that the application of the guiding principles of extensibility and ease of use has resulted in a different approach with regard to the forward rate agreement. Because this product is straightforward, commoditized and unlikely to develop further, the advantage to be gained from the extensive use of components is outweighed by the concision of a single component.
The optimum level of granularity is important to FpML. FpML separates the elements which collectively describe a feature of a product or trade into a separate component with each component serving a particular semantic purpose. Every grouping of elements in FpML is regarded as a component and each component is regarded as a container for the elements that describe that component. In the majority of cases each component will contain a mixture of other components and primitive elements, e.g. a date or string, that collectively describe the features of the component. Components are typically represented in the FpML schema as Complex Types.
Generally speaking, the lower level a component is, the more re-usable it will be. FpML makes use of a number of primitive entity components that describe the basic building blocks of financial products, for example, FpML_Money, FpML_AdjustableDate, FpML_BusinessCenters, FpML_Interval, FpML_BusinessDayAdjustments etc. These primitive components are re-used in different business contexts.
Primitive components are contained in higher level components that describe the features of particular products. For this reason these higher level components will tend not to be re-usable to the same extent. Examples within the definition of swapStream are the components required to construct schedules of dates such as calculationPeriodDates, resetDates and paymentDates. However, it should not be inferred from this that any fundamental distinction is drawn between components in usage or structure.
A necessary feature of a portable data standard is both an agreed set of elements and an agreed set of permissible values (the value domain) for those elements. An FpML document exchanged between two parties would not be mutually understandable if either or both of the parties used internal or proprietary coding schemes to populate elements. For FpML 4.0 the handling of coding schemes was changed from previous versions of FpML, with the introduction of the use of enumerations and the elimination of scheme default attributes from the FpML root element. The following description refers to the updated approach.
One possible means of identifying value domains is to include the domain of permitted values within the schema, using an XML Schema enumeration structure. This mechanism was adopted in FpML 4.0 for element values that satisfy the following criteria:
This leave a number of lists of values not meeting the above criteria that are represented by "schemes". "Schemes" are lists of values that can be changed dynamically without affecting the schema. They include items such as currency codes, party identifiers, business calendar locations, floating rate indexes, etc. For these data elements, the "scheme" is a URI, as identified in an FpML attribute, that designates the universe of acceptable values the element may take. This scheme definition list is typically encoded as an XML document, but does not in general need to be. In cases where the ISDA wishes to designate a default scheme, this is recorded as a default attribute value in the schema. In other cases, the scheme attribute is required.
For further details on the architectural framework behind Schemes, refer to the FpML Architecture Version 1.0 and Version 2.0 documents.
The FpML 4.0 Schema was the first release of the specification to place a messaging framework around the product descriptions to describe the context and use to which the information is expected to be put. This section describes a small set of complex types and elements that comprise a simple message framework that is used as the basis for defining business messages and processes suitable for use in a communications process.
These definitions introduce a new set of ideas that previously could not be used in FpML because of its reliance on DTDs as the formal specification of the grammar. The following sections describe the reasoning behind the features used in the framework as well as a description of several business processes.
Increased efficiency in financial markets can only be achieved through greater automation of transaction processing and use of electronic messaging (e.g. the exchange of information directly between computer systems with as little human interaction as possible). In order to achieve this all the parties involved in such communications must agree on four things, namely:
Representation
There must be a common representation of a transaction, product or other reference data item that is accepted by all the parties.
The core FpML grammar defines a standard vocabulary for derivative based transactions and products that can form the basis of a messaging standard. As new messaging applications are considered the scope of the core grammar will need to expand to encompass the additional types of data referenced in these messages.
Semantics
All the parties must have the same interpretation of the information expressed by the representation.
The work of the validation working group provides a set of rules to ensure that a product definition conforms to the market definition for that product. The FpML rule set will expand and evolve over time as new financial products and message types are added to the grammar.
Business Process
All the parties must follow the same business processes and respond appropriately to any communication they receive.
To support the consistency across different business processes and views, the Messaging Task Force defined a new messaging framework that extended the core grammar. This section describes some business processes and shows how they could be implemented as message exchanges. This section describes some business processes and shows how they could be implemented as message exchanges.
Transport
The parties must agree on the communications transport used to interconnect their businesses.
FpML does not endorse any particular messaging transport for communication. The choice of transport is left to the implementer although in practice we expect only a few to be found suitable.
Disagreement over the first three of these features will mean that FpML users will potentially have to implement, maintain and support different software systems for each FpML aware service or application that they use. Supporting multiple communications transports is typically not that difficult although it does incur additional operations costs.
FpML 5 introduces a new messaging framework to address limitations in the version 4 framework.
This new framework does the following:
it consistently implements a set of general principles to make it easier to use the messages to implement real business processes
it adjusts the representation of parties, accounts, and roles to clarify the purpose of messages and the roles of the parties within a message.
The following section describes the new messaging framework.
Following are some of the issues in the FpML messaging framework that the version 5 framework seeks to correct:
Incomplete message set – in many cases not all messages required to implement a business process are defined in the FpML 4 message set. In particular, many requests lack acknowledgements, exception responses, correction capabilities, and in some cases normal responses. Many generic business processes (such as confirmation) have different levels of completeness depending on the specific event that is being covered.
Inconsistent message correlation – different implementations use different features of the FpML 4 framework to link successive messages together, making them incompatible.
Unclear processes – it is not always clear how the version 4 messages are to be combined together to fully implement a business process. For example, which message should be used to acknowledge or respond to a request isn’t always defined. While this could in theory be addressed through documentation, because the message set is incomplete, this is difficult to do.
In order to create the messages and business processes described in this document some design assumptions had to be made, principally:
Throughout this document we have assumed that message exchanges will be carried by a passing of messages over a highly assured transport, such is provided by a messaging queuing system. This form of transport is commonly used today in the finance industry (e.g. AMQP, Apache QPid, FIX engines, MQSeries, MSMQ, RabbitMQ, SwiftNet Interact 'Store and Forward', etc.).
One important consequence of this decision is that error cases related to non-delivery do not have to be considered (e.g. once accepted a guaranteed messaging queuing system WILL ALWAYS deliver a message) although the 'freshness' of the message may need to be considered (e.g. has the message been stuck in a queue waiting to be delivered for a long period of time). Similarly message queuing system can normally eliminate duplicate messages so these are not considered either.
There is no requirement for message sequence to be preserved over the message transport. Message sequence must not be expected to be repeatable nor predictable.
In practise enterprise message buses cannot be expected to halt the enterprise to preserve sequence. Hence this is not a requirement of FpML.
Some of the business processes are 'long-running' in that once initiated they may remain active for a considerable time before completing (e.g. a request to confirm a trade may take many hours as it is dependent on the time of arrival of the matching trade). During this time the process may generate periodic notifications to the originator of the request and/or other parties. Such notifications will appear in the message stream set to a participant intermixed between other response messages.
An implication of such 'long-running' transactions is that the 'service provider' will contain a complex 'state'. The service should make suitable provisions to persistently record its state so that in the event of a software or hardware failure it can recover transparently without its clients having to resend any information.
Principle: All requests should result in an "observable completion", that is a clear (observable by the requester) response.
Implementation: For each request or notification message there should be at least one defined acknowledgement message. In the case where the response to the request might be delayed pending additional information, the recipient of the request should acknowledge the request. [Should we set a guideline here? E.g. acknowledge if resulting action is likely not to occur within 10 seconds?]
Principle: There should be a single, well-defined way to link successive messages (such as corrections or retractions of requests or notifications). This should not rely on message or transport level information, but rather use business-level information.
Implementation: Add an explicit correlation identifier, defined as business object identifier, and a sequence number to link successive messages.
Principle: There should be a standard way of reporting error or exception status for each type of request.
Implementation: Ensure that there is an exception message for each message workflow.
Principle: There should be a consistent way to correct messages containing an error, and to retract (withdraw, cancel) messages when the information is no longer valid or the action is no longer required.
Implementation: Correctable messages will contain an "isCorrection" indicator to indicate whether the message corrects a previous message. Retractable messages should have a corresponding message ending with "Retracted".
Principle: Business processes should work consistently across trading events and post-trade events where possible, so the same messages should be available for each type of event.
Implementation: Most messages will be designed to be able to handle multiple types of events, such as new trades and post-trade events. This allows consistent coverage of a number of post-trade events with a number of business processes.
Implementers attempting to construct software based on these protocols using a non queuing transport (e.g. WebServices, DCOM, CORBA) will need to implement a reliable message layer to encapsulate the current message sequences (e.g. a get/put message interface using sequence numbers to detect lost or duplicated messages and positive/negative acknowledgments). The W3C site contains links to proposals for such extensions for use with WebServices.
The definition of the FpML business processes assumes the use of reliable messaging, meaning high predictability. Generally, increasing reliability increases latency. The assumption of reliable messaging is provided to make it easier to design standard business processes and messages. If the transport characteristics were not defined, the business process definition would be ambiguous.
The protocol that is used for exchanging FpML messages is defined in being in three main layers:
Specifically, the transport characteristics that FpML assumes in order to implement most of its business process definition are defined by:
In some processes such as Portfolio Reconciliation or Position Report, FpML assumes the following transport characteristics:
In general, four layers of specification are contained in a XML Standard. A multi-layer approach allows implementers to choose the most appropriate technology for a given situation. It allows development and modifications within one layer without affecting or requiring changes to the others..
From the top down, the four layers are:
This layer specifies the way in which any business process is defined, such that is understood and executable by people and applications. A business process can be defined as a set of interrelated tasks linked to an activity that spans functional boundaries. Business processes have starting points and ending points, and they are repeatable. Examples of business processes in the derivatives domain are the affirmation process, the confirmation process, and the matching process.
The FpML Specification models business processes in UML sequence diagrams.
This layer corresponds to the FpML document definitions. It provides a set of abstractions specific to financial derivatives but also a set of elements which are not context specific (such as “Party” and “Price”).
The Messaging layer addresses the need to record session and communication settings for message transport in order to enable coordination between parties in a business transaction.
The FpML Schema explicitly models ‘delivery’ related information as part of the message itself. Some transports (i.e. SOAP, ebXML, etc.) allow such information to be placed in the ‘envelope’ that surrounds the message during delivery.
Including a standard header within FpML messages increases consistency by providing a single format for delivering information regardless of the physical transport, ensures that it will be persisted if the message is archived, and allows more flexible use of features such as digital signatures.
The Transport Layer provides a point to point connection so that one server can send messages to another server and they will arrive uncorrupted and in the correct order.
The FpML Message Architecture defines a message structure that is independent of the underlying transport protocol, such as SMTP, File Transfer Protocol (FTP), Standardized Messaging Middleware, HTTP, etc.
The receiver of a message needs to be able to determine the function that the message is invoking. In XML there are three different techniques that can be used for indicating the purpose of a message.
The FpML 5.0 message framework is based on element naming (option 2 - By Element Name). Below is a short explanation of the three techniques:
The receiver can look at the namespace from which the element definitions have been drawn and determine from it the function requested.
<?xml version="1.0"?> <FpML version="4-0" xmlns="http://www.fpml.org/2002/FpML-4-0-TradeConfirmationRequest"> <header> ... Message header </header> ... Business data </FpML>
Using namespaces it would be possible to create a highly extensible framework for FpML but it could lead to documents having to have every FpML element prefixed with a suitable namespace abbreviation although it may be possible to mitigate this by having the 'core' sub-schemas use no namespaces in their definition and take on the namespace of the one they are including into.
There may be further issues with related XML standards such as XPath as the namespace of the same included elements may not be consistent between documents.
The receiver can look at the name associated with an element within the message (the root and one of the first level children) to determine the function requested.
<?xml version="1.0"?> <requestConfirmation fpmlVersion="5-0" xmlns="http://www.fpml.org/FpML-5/confirmation"> <header> ... Message header </header> <trade> ... Business data </trade> ... </requestConfirmation>
In this model the root element is a global element of a type derived from the base FpML Document type, typically a message type.
The receiver can look at the type associated with an element within the message (e.g. the root or a child).
<?xml version="1.0"?> <FpML version="4-0" xmlns="http://www.fpml.org/2002/FpML-4-0" xsi:type="TradeConfirmationRequest"> <header> ... Message header </header> ... Business data </FpML>
An XML schema based instance may use type substitution to replace the content model of any element with another providing that the replacement is derived from the original. Given a framework that provides the appropriate extension points any number of new types can be derived within the name or different namespaces as necessary.
In addition through inheritance the message types can be associated with an appropriate message header content model.
Messages are divided into a series of business processes. For example, consent negotiation (getting permission to do something) is a business process. For each business process, in general the following messages will be available:
process request or notification message – to initiate the process. (In some cases the process may be initiated by a notification message rather than a request message).
process acknowledgment message – to acknowledge that the request or notification was received.
process exception message – to report that a request or notification cannot be processed.
process request/notification retracted message – to withdraw the original request or notification.
possibly, process-specific response messages
In some cases, some of these messages may be intentionally omitted, but in these cases the rationale for omitting the messages will be provided. For example, acknowledgement messages may be omitted where it is expected that all responses will be immediate, and retraction messages may be omitted if there is no need to allow requests to be withdrawn, because the original request would be fulfilled before the retraction could be sent.
For the consent negotiation process, for example, the messages include:
requestConsent – initiating request
consentAcknowledgement - acknowledgement
consentException - exception
requestConsentRetracted – retraction of the request
consentGranted - response
consentRefused – response
Messages follow this naming convention:
requestXxx
xxxAcknowledgement
xxxException
requestXxxRetracted
xxx[Status] or xxx[Response]
Providing each request with a more immediate and guaranteed response allows a more synchronous style of design, such as this:
Here the requester waits for the response before terminating its execution. This would allows easier specification of timeouts related to request processing although as we shall see later has implications for gathering the results of long running processes, such as matching.
The initiator of a business process should allocate a unique correlation identifier for each process instance it begins and any subsequent message related to the same process should contain the same identifier. A qualified scheme based value ensures that participants cannot accidentally re-use an identifier previous generated by another firm.
For example, when used within a trade execution advice it might appear as follows:
... <tradeExecutionAdvice> <messageHeader> </messageHeader> <isCorrection>false</isCorrection> <correlationId correlationIdScheme="http…">BQ/1234 </correlationnId> <sequenceNumber>657</sequenceNumber> <onBehalfOf> <partReference href="PARTYA"/> </onBehalfOf> <execution> <trade> … Lots more here </trade> </execution> <party id="PARTYA">…</party> <party id="PARTYB">…</party> </tradeExecutionAdvice> ...
Any response or follow up to this message should contain the same 'correlationId' definition. This regime allows us to make some other messaging clarifications, namely:
Every message will have a unique message identifier.
The ‘inReplyTo’ element of a response message (or exception) correlates with the ‘messageId’ of the associated request.
The conversationId has been removed.
Retransmission of a message for technical reasons (e.g. the last transmission of the request was not acknowledged or rejected) does not change the message identifier.
Replication of a message for business reasons (e.g. sending data that has been previously acknowledged) generates a new message identifier.
The response to a retransmitted request message should be identical to the original request. (1)
At the start of a long running process the initiating participant must create a unique one-time identifier for each process instance and distribute it to the other messaging party.
Every subsequent message sent by the requester must contain the process identifier.
Messages may contain reference to other business process instances providing their role is clear and unambiguous (e.g. an order MAY reference a previous quotation).
(1) This allows the transport to respond to retransmissions by sending a copy of the earlier cached response, no business process is necessary. This is a standard technique in ONC RPC and WebServices.
In a long running operation it is important to process all of the messages in the correct order. Each message’s ‘messageId’ is element is guaranteed to contain a unique value but the order of messages cannot be inferred by comparing two such identifiers.
The characteristics required by FpML’s transport characteristics states that two messages sent simultaneously, or within a short time of each other, may arrive in any order. Since message order cannot be determined from the message identifiers some other information needs to be added to them message to provide this.
In the SWIFT CUG implementation of the contract notification messages the trade version is used to derive the ordering. Whilst this is a workable solution for the CUG it does not solve the problem generally and some messages must artificially increase the contract version number to maintain order even though no change has actually occurred to the underlying contract.
The simplest solution is to define a type for sequence numbers and use it within messages to provide an orderable value.
It is important to note that although sequence numbers should be consistently increasing in value they do not have to form a gapless sequence. (2)
When combined with the unordered delivery transport characteristics a message processing application can be presented with a series of messages in a jumbled order.
An optimistic message processor should attempt to process the messages in the order they are delivered and unwind actions (or raise exceptions) when conflict is detected.
A pessimistic message processor should record the messages but delay their processing for a short period. This provides a time window during which any earlier messages received out of order can be re-sequenced before processing begins.
It is also important to note that sequence numbers must be qualified with respect to the message sender and the responding part may need to produce messages containing them. For example in the matching processes the messages containing the result should reference the same ‘correlationId’ used in the original request but should use a ‘sequenceNumber’ provided by the matcher rather than the requester.
For example the series of messages for a trade confirmation (including a correction) followed by the resulting match might be identified as follows:
(2) There may be messages within the same business process sent to other participants or internal changes to the business object that affect the sequence number.
Starting from FpML 5.2, the correlation ID is optional in requests. This is intended to more flexibly support a variety of processing models. The original request may omit the correlation ID if the recipient will quickly respond to requests with its own correlation ID. Subsequently requester will need to use the recipient's correlation IDs if it needs to correct or retract a request. The FpML messaging architecture recommends that services support the correlation ID in the original requests, because otherwise requesters cannot correct or retract requests until they receive a reply from the service.
In FpML 5 most workflows are designed to work consistently for a number of events, including new trades and post-trade events such as novations, amendments, and terminations. In addition, the process model is designed to be extensible by allowing implementations to substitute in their own events into the FpML messaging framework.
The FpML neutral view principle when combined with some of the notifications for post-trade processes and a common third party such as a custodian results in situations where the third party can not easily tell which side of the trade he is supposed to be processing.
For example, parties A and B negotiate a trade and then send a contract execution notification to their common custodian C. The custodian may be able to figure out which side of the trade to process by means of the message sender’s identity but as a single sender identity might be used by several legally separate trading divisions within the same company group determining the correct party might require extensive organisational reference data. This approach would also fail for internal book-to-book deals where both sides would originate from the same sender.
What is needed is an explicit indication of the party for whom the trade should be processed included in every message. In the case of book-to-book trades this information should use account references to further qualify the party. For example:
<someRequest> <header> … Basic message details </header> … <onBehalfOf> <partyReference href="JPM"/> <accountReference href="PORTFOLIO1"/> </onBehalfOf> … Request specification here </someRequest>
The 4.x tradeSide structure has been replaced by a simpler implementation adding a new relatedParty element. The role element within the relatedParty defines the list of roles as code list. This allows to customize the roles easier than using the tradeSide structure.
<someRequest> ... <partyTradeInformation> <partyReference href="party3"/> <relatedParty> <partyReference href="party4"/> <role>orderer</role> </relatedParty> <relatedParty> <partyReference href="party4"/> <role>introducer</role> </relatedParty> <relatedParty> <partyReference href="party3"/> <role>executor</role> </relatedParty> <relatedParty> <partyReference href="party4"/> <role>confirmer</role> </relatedParty> <relatedParty> <partyReference href="party6"/> <role>creditor</role> </relatedParty> <relatedParty> <partyReference href="party5"/> <role>settler</role> </relatedParty> <relatedParty> <partyReference href="party6"/> <role>accountant</role> </relatedParty> </partyTradeInformation> ... </someRequest>
Currently accounts are specified within a party definition and the relationship between the two objects depends on the elements present. To simplify the structure and make the relationships clearer the account structure should be moved outside of Party and given a mandatory reference to its beneficiary and an optional reference to its servicer (this is the reverse of the 4.x accounts model).
FpML 5.2 and 5.3 introduce new features to better support regulatory reporting requirements. The following table shows which FpML business processes support which types of regulatory reporting requirements.
FpML Views | |||||
Message Type | Confirmation | Reporting | Transparency | Record Keeping | |
Real Time | X | ||||
PET | X | ||||
Confirmation | X | ||||
Life Cycle | Price Formation | X | X | X | |
Intrinsic | Non Price Formation | X | X | ||
Daily State | X | ||||
Valuation | X | TBD |
Before looking at the current message processes and their associated messages it is worth looking at the overall sequence of business processes for trades.
The first thing to note is that there are two sets of processes; the first set manages the transaction itself during its ‘cradle to grave’ life cycle while the second are repeatable management tasks that may occur several times over the life time of the transaction.
Looking at the states in the life cycle part of the process model there the first thing to note is that there are multiple routes to the creation of trade.
The original model for FpML (and not actually supported in the specification) is the traditional model of direct inter-dealer negotiation (e.g. by phone, over SwapsWire, etc.) followed by an affirmation of the resulting transaction.
Alternatively trades could be created using a more market based approach in which quotes and orders are communicated through an exchange in which more than one market maker may be offering prices for the same quote or order. The terminology of quote, indications of interest, orders and execution is more closely coupled with this market approach.
In the direct negotiation approach the identities of the participants of fully disclosed and this allows pre-agreed exploitation of other party’s credit rating to obtain better prices (within agreed limits). In the market approach pre-order interactions may be anonymous to guarantee best prices are obtained for all market participants.
Messages related to trade negotiation and affirmation need to be capable of recording that these additional parties are being used but in later trade processing stages such ‘give-up’ trades are decomposed in a set of related back-to-back trades.
All the processes described in this section are applied to the following events:
In addition, the "clearing" event can be used in the clearing business processes.
All events use the same messages to support the processes. The additionalEvent element is an extension point to customize FpML and add additional events.
An execution should correlate with the order from which it is derived.
The execution notification may contain mistakes. The ExecutionNotification type allows corrections (provided it is still possible to do so), by sending a corrected execution notification correlated to a prior notification with "isCorrection" element set to "true".
The execution can be retracted (provided it is still possible to do so) by correlating execution retracted message to the execution notification.
The successful execution of a trade or post-trade event (novation, termination, etc.) may need to be distributed to other parties involved in the trade processing and settlement such as custodians. The execution notification messages should be used for communication between investment managers and custodians. They replace the 4.x Contract Notification messages.
Sending the execution advice message should create a unique notification identifier for future correlation.
The trade execution advice may contain mistakes which can be corrected (provided it is still possible to do so) by sending the correct trade execution advice message correlated to a prior execution advice message with "isCorrection" element set to "true".
The execution may have been sent in error so it can be retracted by sending execution advice retracted message.
The trade change advice message describes an external event that is NOT negotiated between the contract parties but affects the economic terms of the contract (e.g. a credit event on a CDS Index constituent entity) and needs to be distributed to other parties involved.
A trade change advice message provides the recipient with the terms for economic changes in the indicated contract resulting from a market event (e.g. index factor information when credit events occur on index constituents).
The trade change advice may contain mistakes which can be corrected by sending the correct trade change advice message correlated to a prior trade change advice message with "isCorrection" element set to "true".
The trade change advice message should not be used to correct a prior trade execution advice message.
Trade change advice retracted message defines the structure for a message retracting a prior change advice.
The trade information update process allows a party to provide updated identification information (such as trade IDs) for a trade that is maintained by another party.
The trade information update request allows a party to provide updated identification information (such as trade IDs).
The trade information update request may contain mistakes which can be corrected by sending the correct trade information update request message correlated to a prior trade information update request message with "isCorrection" element set to "true".
The trade information update request message should not be used to correct a prior trade execution advice message.
Trade information update retracted message defines the structure for a message retracting a prior information update request.
The "Consent" process is used when one party needs to obtain consent from another party before peforming some action, such as novating or clearing a trade. The Consent process can be used for any such process, although most of the documentation will discuss consent required for specific processes such as novating a trade.
The 4.x model for trade novation was based on having all the participants communicate directly with each other. This is overly complex and should be changed in favor of a centralized service provider model.
The first stage in a novation is consent gathering. The idea is to get all the participants to agree that a novation can be performed prior to actually attempting it. This was to address an issue raised by an ISDA Ops committee.
From the point of view of the transferor the consent process executes as follows:
The transferor sends the request to the novation coordinator who sends it on to the other participants.
When responses have been received from the other participants the collective decision can be reported to the transferor.
The process for the transferee and remaining parties is similar. First they must decide whether to accept the novation or not.
As the decision process may take time the initial request should be followed by a subsequent round of response messaging.
There are no cancellation messages associated with the consent gathering process, but the process is benign and creates no financial commitments.
To keep all participants synchronized, request consent messages can be corrected by requester, sending a corrected request consent message with "isCorrection" indicator set to "true", and a unique correlation identifier and a sequence number to link a prior message.
If the consent is no longer required, the requester can retract a request consent message.
When a trade is submitted for clearing, it may be that the clearing service must obtain consent from a clearing firm prior to clearing the trade. In this case, the consent messages may be used to request this consent.
For clearing consent, the overall flow is typically as follows:
The case where consent is refused is similar except that the responses are "consentRefused" followed by "clearingRefused", as shown below.
If there is a technical problem with the consent request (e.g. not implemented, system down, badly formatted request), the "consentException" message is used. This messages indicate to the recipient that there is a technical issue that may require investigation. Normally it would be the responsibility of the technical staff to investigate and resolve this before any further processing would occur.
The standard confirmation process is supported by FpML. The following messages are used to support it:
The confirmation process starts with the requestConfirmation message. The message may be used to request the confirmation of a new trade or any other event supported by FpML such as novation, terminations, amendments, etc.
A requestConfirmation message may be cancelled using the requestConfirmationRetracted message.
A business acknowledgement message to indicate that the previously sent message was sucessfully processed.
A message sent to inform another system that some exception has been detected.
The confirmationStatus message provides the status of the matching process: matched, mismatched, unmatched, or alleged. It may also provide the best fit trade(s) or event(s) as result of the matching process.
The confirmationAgreed message is sent when the matching process returns a proposed match (trade or event) and the Confirmation Requester agrees with it.
The confirmationDisputed message is sent when the matching process returns a proposed match (trade or event) and the Confirmation Requester disputes it.
The following scenarios are used to describe the message exchanges:
The successful confirmation process involves requesting the confirmation from the Confirmation Requester. The Confirmation Provider sends an acknowledgement message immediately.
The Confirmation Provider is then in charge of performing the matching process and sends back a confirmationStatus message with the status of the matching process: matched, mismatched, unmatched, or alleged. The Confirmation Provider sends then an acknowledgement message immediately.
If the Confirmation Requester is ok with the status, it sends a confirmationAgreed message and the Confirmation Provider sends back and acknowledgment to finish the process.
If there is a problem with the the confirmationRequest, the Confirmation Provider sends back a confirmationException message. The message includes the reason of the problem.
The requestConfirmation may contain mistakes which can be corrected by sending the correct requestConfirmation message correlated to a prior requestConfirmation message with "isCorrection" element set to "true".
In some situations the message cannot be corrected and the Confirmation Provider sends back an exception message.
The requestConfirmationRetracted message defines the structure for a message retracting a prior requestConfirmation.
In some situations the message cannot be retracted and the Confirmation Provider sends back an exception message.
The standard clearing process is supported by FpML. The following messages are used to support it:
The following scenarios are used to describe the message exchanges:
The successful clearing process involves requesting the clearing from the Clearing Requester. The Clearing Provider sends an acknowledgement message immediately.
The Clearing Provider is then in charge of deciding whether the clearing is confirmed or refused.
If the clearing is confirmed, the Clearing Provider sends a clearingConfirmed message. This may include either a "trade" payload describing the trade that was cleared, or a "clearing" event which includes details of the submitted trade and the resulting two cleared trades. (The first type may be more appropriate to send to a clearing member firm; the second to an execution facility). Currently, the "clearing" structure is suitable for representing trades that have been allocated in advance by the requester, e.g. SEF, and divided into separate requests for each allocation. In these cases, each clearing request will result in a pair of trades, one for each side. In cases where the trade is allocated by the clearing service, one trade may result in multiple trades after allocation. The current "clearing" event representation cannot represent this, so currently a separate message must be sent to confirm the clearing of each allocation trade. A future version of FpML may extend this structure to support this scenario in a single message, however some clearing services use a sequence of several existing FpML messages to support this scenario.
On the other hand, if the clearing is refused, the Clearing Provider sends a clearingRefused message.
If there is a problem with the the clearingRequest, the Clearing Provider sends back a clearingException message. The message includes the reason of the problem.
The requestClearing may contain mistakes which can be corrected by sending the correct requestClearing message correlated to a prior requestClearing message with "isCorrection" element set to "true".
In some situations the message cannot be corrected and the Clearing Provider sends back an exception message.
The requestClearingRetracted message defines the structure for a message retracting a prior requestClearing.
In some situations the message cannot be retracted and the Clearing Provider sends back an exception message.
The clearingStatus message is to allow the flexibility to support a variety of clearing operational models with the existing FpML clearing business process. The message allows events from the clearing lifecycle to be notified to parties relevant in the process (such as clearing members or intermediary parties).
The process flow shows an example of how the clearingStatus message could be used in a request for clearing process. In this example a status of Pending is returned to the clearing requester after the request is received, which notifies them that the request is pending a particular process or validation in the CCP. In this example it is assumed that the operational model requires such a notification to be made to manage the expectation of the requester.
The example also shows a later clearingStatus message being sent to the original clearing requester (we could rename this clearing member) that shows that the cleared trade is now settled. This for example could be required in an operating model where the CCP is responsible for initiating the settlement process.
The content of the status message and usage is by convention of the operating model of the clearing service. A standard set of statuses can be provided to promote consistency. It is key however to allow flexibility for the CCP to have a status of their choosing to accommodate their specific conventions. Some standard statuses have been defined in a clearing-status-code coding scheme:
Note that the states which explicitly name a status which FpML implicitly communicates with a message type have been included for completeness but are probably not required, for example, 'received' status is implicit in the clearingAcknowledgement message.
the requestClearing message used with a deClear event allows for a trade to be removed from clearing - or ‘de-cleared’
the requestClearing message extends a CorrectableRequestMessageMediated type that allows the inclusion of up to two onBehalfOf elements. This allows the requestClearing message to be sent on behalf of the two original trade counterparties.
There are a large number of variants for the usage of such a de-clear operation, depending on who is sending the request; whether this request is direct or via an intermediary such as a matcher and also on the granularity of the request (both novated trade sides or just one trade side).
The actual process used and trade identification employed would be dependent on the operating model. A couple of example usage scenarios are described below.
The above process flow shows an example of an individual de-clear request (only the happy path is shown). The requester issues a requestClearing message to the CCP containing a de-clear event model. The identity of the trade could be a particular novated trade side since this is a unilateral view from one party. The resulting clearingAcknowledgement and clearingConfirmed messages are as per the existing FpML clearing process. This scenario may be used were the requester sends a de-clear request directly to the CCP independent of a corresponding request from the other trading party. The model is allowing but not advocating that a de-clear can be carried out just on one particular novated trade side.
The following process flow shows a second example (and generally the most likely) where the de-clear requests are matched before being delivered to the CCP. In this example the identification of the trade to be de-cleared would probably be that original trade IDs from the de-clear requesters to the matcher and a clearingID between the matcher and the CCP which encompasses both novated trades.
The compressionActivity structure is available in select messages (e.g., clearingConfirmed and requestConsent) to provide context information about compressions affecting the trade/event. It relates trades together such as trades combined as a result of netting or portfolio compression.
The structure was developed as an alternative to the linkId mechanism available as part of the PartyTradeIdentifier. Some clearing organizations have requirements to provide references to the other trades that were part of the same netting. The linkId is a link identifier allowing the trade to be associated with other related trades, however, it does not allow any qualification on the related trades (e.g., whether a replacement trade or a set of originating trades).
The structure includes the following optional elements:
From a business perspective, there are two scenarios:
The new trade would have references to all the trades that were terminated (i.e., a set of originatingTradeId) and a special reference to the replacement trade (replacementTradeId)
For a netting activity, the following structure might be specified:
<compressionActivity> <compressionType>Netting</compressionType> <replacementTradeId tradeIdScheme="http://www.abc.com/clearing-id">CL000003</replacementTradeId> <originatingTradeId tradeIdScheme="http://www.abc.com/clearing-id">CL000001</originatingTradeId> <originatingTradeId tradeIdScheme="http://www.abc.com/clearing-id">CL000002</originatingTradeId> </compressionActivity>
The standard allocation process is supported by FpML. The following messages are used to support it:
The following scenarios are used to describe the message exchanges:
The successful allocation process involves requesting the allocation from the Allocation Requester. The Allocation Provider sends an acknowledgement message immediately.
The Allocation Provider is then in charge of deciding whether the allocation is approved or refused.
If the allocation is approved, the Allocation Provider sends an allocationApproved message. On the other hand, if the allocation is refused, it sends and allocationRefused message.
If there is a problem with the the allocationRequest, the Allocation Provider sends back an allocationException message. The message includes the reason of the problem.
The requestAllocation may contain mistakes which can be corrected by sending the correct requestAllocation message correlated to a prior requestAllocation message with "isCorrection" element set to "true".
In some situations the message cannot be corrected and the Allocation Provider sends back an exception message.
The requestAllocationRetracted message defines the structure for a message retracting a prior requestAllocation.
In some situations the message cannot be retracted and the Allocation Provider sends back an exception message.
A novation is a transaction in which a ‘transferor’ transfers to a ‘transferee’, with the consent of the ‘remaining party’, all of its rights and obligations under the contract in respect to the novated amount. The effect of the agreement is that for the ‘novated amount’ (i.e. all or part of the outstanding notional amount), the old transaction between the transferor and the remaining party is terminated, and a new transaction is executed between the remaining party and the transferee with economic terms identical to those of the old transaction.
A three-way novation is between a transferee, a transferor and a remaining party. The typical four-way novation is between a transferee, a transferor, a remaining party and a related second remaining party (where remaining party had the deal with the transferor, and the second remaining party is a related company to the remaining party who assumes the deal with the transferee).
The required ‘transferor’, ‘transferee’, and ‘remainingParty’ elements, with the optional ‘otherRemainingParty’ element, indicate the roles in the transaction by providing references to the ‘party’ elements.
The optional ‘otherRemainingParty’ element is not applicable in a three-way novation and should be omitted. In a four-way novation the party referenced is Transferee 2. Transferee 2 means a party which accepts by way of novation the rights, liabilities, duties and obligations of Transferor 2. ISDA 2004 Novation Term: Transferee 2 (four-way novation).
The ‘oldTransaction’ indicates the original trade between the transferor and the remaining party. This can alternately be represented by the ‘oldTransactionReference’. The ‘newTransaction’ indicates the new trade between the transferor and the remaining party (for a 3-way novation) or other remaining party (for a 4-way novation). This can alternately be represented by 'newTransactionReference'.
The ‘novationDate' is the date on which the rights, obligations etc. transfer between the parties. The 'novationTradeDate' is the date on which the parties agree that they will novate. If a 'novationTradeDate' is not specified, the 'novationTradeDate' will be deemed to be the 'novationDate'. The ‘novatedAmount’ (or ‘novatedNumberOfOptions’) by validation rule must be of the same currency and equal to or less than the appropriate notional amount in the product element within the ‘oldTransaction’ between the transferor and the remaining party.
The 'fullFirstCalculationPeriod’ is of type boolean. If its value is 'true', ‘fullFirstCalculationPeriod’ has the implicit value of “applicable” as detailed in the ISDA novation agreement. On the other hand, if its value is 'false', it has the implicit value of "inapplicable".
The 'firstPeriodStartDate' with respect to the Transferee and Remaining Party is included in the Novations message to be able to make sense of the “new transaction” without requiring reference back to the “old transaction”. The 'href' attribute references the relevant party that is making the payments
The 'nonReliance' element corresponds to the non-Reliance section in the 2004 ISDA Novation Definitions, section 2.1 (c) (i). The element appears in the instance document when non-Reliance is applicable
The 'creditDerivativesNotices' element should be specified if one or more of either a Credit Event Notice, Notice of Publicly Available Information, Notice of Physical Settlement or Notice of Intended Physical Settlement, as applicable, has been delivered by or to the Transferor or the Remaining Party. The type of notice or notices that have been delivered should be indicated by setting the relevant boolean element value(s) to true.
The absence of the 'creditDerivativesNotices' element means that no Credit Event Notice, Notice of Publicly Available Information, Notice of Physical Settlement or Notice of Intended Physical Settlement, as applicable, has been delivered by or to the Transferor or the Remaining Party.
If the receiving party agrees with the novation then they should respond with a ‘NovationConsentGranted’ message. The Transferor or the Transferee may include the details of a payment representing the market value of the transaction.
Since the Novation transaction itself is governed by one or more ISDA contractual definitions and supplements these are specified within the Novation structure with the following two elements: 'contractualDefinitions' and 'contractualSupplements'.
For example, for an IRS novation this will typically reference the 2004 ISDA Novation Definitions and the 2000 ISDA Definitions. For Credit Derivatives it references the 2004 ISDA Novation Definitions, the 2003 ISDA Credit Derivatives Definitions and the May Supplement. So for interest rate products, the following values might be specified:
<novation> ... <contractualDefinitions>ISDA2004Novation</contractualDefinitions> <contractualDefinitions>ISDA2000</contractualDefinitions> ... </novation>
And for credit derivatives, the following values might be specified:
<novation> ... <contractualDefinitions>ISDA2004Novation</contractualDefinitions> <contractualDefinitions>ISDA2003Credit</contractualDefinitions> <contractualSupplement>ISDA2003CreditMay2003</contractualSupplement> ... </novation>
The Increase representation in FpML is used for increasing the notional amount of a trade.
The tradeIdentifier is used to reference the previously confirmed trade. The agreementDate is the date on which the parties enter into the increase transaction. The effectiveDate is the date on which the increase becomes effective.
A payment for the right of increase may occur.
Depending on the type of product, the amount of the increase is specified in the changeInNotionalAmount or changeInNumberOfOptions elements. Similarly, the outstanding amount of the trade after the increase is specified in the outstandingNotionalAmount or outstandingNumberOfOptions elements.
The Termination representation in FpML is used for terminating partially or fully a trade. The same business content is used for both full and partial terminations.
The tradeIdentifier is used to reference the previously confirmed trade. The agreementDate is the date on which the parties enter into the termination transaction. The effectiveDate is the date on which the termination becomes effective.
A payment for the right of termination may occur.
Depending on the type of product, the amount of the termination is specified in the changeInNotionalAmount or changeInNumberOfOptions elements. Similarly, the outstanding amount of the trade after the termination is specified in the outstandingNotionalAmount or outstandingNumberOfOptions elements. For a full termination, the outstanding amount will be set to 0.
The Amendment representation in FpML is used for amending the terms of a trade.
The trade element is used to represent the details of the amended trade. (Note that the use of tradeIdentifier is insufficient for providing the amended trade details and is not allowed.) The agreementDate is the date on which the parties enter into the amendment transaction. The effectiveDate is the date on which the amendment becomes effective.
A payment for the right of amendment may occur.
Allocations are the division of a single market trade across two or more investors/funds.
This section describes the way of representing allocations in FpML. This is done using the existing FpML trade structure in order to represent both, the block and the allocated trades.
The implementation uses the PartyTradeIdentifier type. Depending whether the trade is a block or an allocated trade, the allocationTradeId and the blockTradeId elements would be filled out.
This is an analysis of the different situations:
... <tradeHeader> <partyTradeIdentifier> <partyReference href=”BGI”/> <tradeId tradeIdScheme=”http://abc.com”>ABC100</tradeId> </partyTradeIdentifier> </tradeHeader> ...
It is allocated into two trades ABC101 and ABC102. The block trade includes links (allocationTradeId) to the allocated trades.
... <tradeHeader> <partyTradeIdentifier> <partyReference href=”BGI”/> <tradeId tradeIdScheme=”http://abc.com”>ABC100</tradeId> <allocationTradeId> <partyReference href=”Fund1”/> <tradeId tradeIdScheme=”http://abc.com”>ABC101</tradeId> </allocationTradeId> <allocationTradeId> <partyReference href=”Fund2”/> <tradeId tradeIdScheme=”http://abc.com”>ABC102</tradeId> </allocationTradeId> </partyTradeIdentifier> </tradeHeader> ...
Each of the resulting allocated trades is a separate FpML trade element. Each one of the trades is identified as allocated trade with the xsi:type="AllocationTradeIdentifier".
Allocated trade ABC101:
... <tradeHeader> <partyTradeIdentifier> <partyReference href=”Fund1”/> <tradeId tradeIdScheme=”http://abc.com”>ABC101</tradeId> <blockTradeId> <partyReference href=”BGI”/> <tradeId tradeIdScheme=”http://abc.com”>ABC100</tradeId> </blockTradeId> </partyTradeIdentifier> </tradeHeader> ...
Allocated trade ABC102:
... <tradeHeader> <partyTradeIdentifier> <partyReference href=”Fund2”/> <tradeId tradeIdScheme=”http://abc.com”>ABC102</tradeId> <blockTradeId> <partyReference href=”BGI”/> <tradeId tradeIdScheme=”http://abc.com”>ABC100</tradeId> </blockTradeId> </partyTradeIdentifier> </tradeHeader> ...
The PartyTradeIdentifier type supports the representation of N-level allocations in FpML. This basically means the ability to allocate a block trade to multiple allocation trades, and then allocate these in turn to other allocation trades (and so on if desired).
The support of N-Level Allocations is done including the allocationTradeId element and the blockTradeId element at the same time.
This section describes a representation of allocation trades with the following features:
There are two basic design principles:
The agreement of the Messaging Working Group was to place this "short-form" representation within the trade structure in order to use this form of representation across the different post-trade messages.
Option exercise and expiry process is supported by FpML. The following messages are used to support the process:
The following scenarios are used to describe the message exchanges:
Generic option exercise/expiry process
Basic option exercise/expiry process
Cleared option exercise/expiry process
OptionExercise
The optionExercise model supports partial exercise (specify the number of options or amount to exercise), full exercise (use fullExercise flag), as well as the option to request options not to be exercised (use expiry flag)
additional elements are needed:
OptionExpiry
The OptionExpiry event is used to notify a party that options are expiring.
placeOrder message is used by the party that has the exercise decision role to request options to be exercised (or not). "PlaceOrder" makes it possible to initiate an order directly without a prior quote and an optional quote reference should be provided to correlate the processes if required.
The "clearing" and "deClear" events are provided to support clearing processes.
The "clearing" event allows full trade/event details or summary information to be reported about both the original submission (the submitted trade) and the two resulting cleared trades.
Currently, the "clearing" structure is suitable for representing trades that have been allocated in advance by the requester, e.g. SEF, and divided into separate requests for each allocation. In these cases, each clearing request will result in a pair of trades, one for each side. In cases where the trade is allocated by the clearing service, one trade may result in multiple trades after allocation. The current "clearing" event representation cannot represent this, so currently a separate message must be sent to confirm the clearing of each allocation trade. A future version of FpML may extend this structure to support this scenario in a single message, however some clearing services use a sequence of several existing FpML messages to support this scenario.
The "deClear" event allows a firm to request that a trade be removed from clearing, or a clearing service to request consent for this, or to report that is has been done.
Several DCOs have identified very similar requirements to support the processing of portfolios.
Some DCOs wish to have the ability to support clearing of a portfolio and the ability to claim/reject and apply other actions to the whole portfolio instead of one trade at a time. FpML does have the ability to represent simple portfolios (defined as lists of trade IDs), but at the moment that cannot be used together with the request clearing messages. There is no specific portfolio type that includes multiple complete trades.
Some of the cases where portfolios of trades might need to be handled include:
moving a clearing account containing multiple trades from one clearing firm (broker) to another (this is sometimes called “porting”)
transferring (assigning/novating) a portfolio of trades from one market participant to another, for example as a result of an acquisition or a exit from part of a market.
backloading of an existing portfolio of trades.
Some DCOs wish to manage the processing of a portfolio in multiple messages. A portfolio may contain thousands of trades and it is not practical to process one huge message. A solution is needed from a processing perspective.
The messaging solution (but not any given implementation) must be able to handle either of the following two models:
The request is acted on for the portfolio as a whole. For example, in consent negotiation, consent is given or refused to the portfolio as a whole.
The request is acted on for the individual constituent of the portfolio. For example, in consent negotiation, consent may be given for some constituents of the portfolio but not for others.
This portfolio request capability must be provided for the following business processes:
consent negotiation
clearing
Starting with FpML 5.2, a new, optional portfolioReference structure has been added to select messages (i.e., requestConsent, consentGranted, requestClearing, and clearingConfirmed) to group together individual messages that can be acted on at a group level.
The portfolioReference provides:
a way of linking together multiple messages that are part of the same portfolio
a way for the recipient of ensuring all the messages are received
a way to apply actions e.g. grant consent to the bulk container (e.g., on some group identifier rather than at the individual level)
Requests and responses message have a different content model. For the requestConsent, requestClearing, clearingConfirmed messages, the portfolioReference (of type PortfolioReferenceFull) includes:
portfolioName – An identifier that uniquely identifies the portfolio.
sequenceNumber – A sequential (gapless numerical) identifier giving the message sequence within the portfolio. A recipient must ensure that all sequence numbers from 1 to the number of the final request are received to ensure that it has all constituents of the portfolio.
submissionComplete – An optional boolean indicator that specifies whether the last message in the portfolio has been sent. The indicator should be provided for request messages. It should be optional when used in the clearingConfirmed message.
The first constituent of portfolio Port1 may be coded as:
<portfolioReference> <portfolioName portfolioNameScheme=”http://www.clearingsvc.com/portfolioId”>Port1</portfolioId> <sequenceNumber>1</sequenceNumber> <submissionsComplete>false</submissionsComplete> </portfolioReference>
For response messages (e.g. consentGranted), the portfolioReference structure (of type PortfolioReference) just includes the portfolioName and allows the response to reference the portfolioName where the response is at the portfolio level.
If the response is at the individual message level, the portfolioReference does not need to be included; only a reference to the original correlationId.
The consent on an entire portfolio may be coded as:
<consentGranted> … <correlationId correlationIdScheme="http://www.clearingsvc.com/correlationId">123456</correlationId> <sequenceNumber>1</sequenceNumber> <portfolioReference> <portfolioName portfolioNameScheme=”http://www.clearingsvc.com/portfolioId”>Port1</portfolioId> </portfolioReference>
This section defines the business validation rules architecture that was established by the Validation Working Group. It contains introductory and background information about the purpose of validation, a guide to how to make use of the documents published by the Validation Working Group, and serves as a reference point for implementers.
The main documents produced by the Validation Working Group is the set of validation rules, expressed in English:
The validation rules follow the principles and guidelines defined in the Validation Rule Specifications section.
Previous versions of the validation rules, expressed in English:
The Validation Working Group's charter includes a mandate to formalize the validation rules from their plain English representation to a suitable implementation language. The purpose of this decision was to disambiguate the English language representation, to serve as a point of reference for implementers looking for clarification, and to validate the test cases produced by the working group. Reference implementations play an important part in providing quality guarantees to the working group and it is hope that their publication will be useful to implementers.
Provider |
![]() |
Implementation Language | Java and C# |
Implemented Rules | All published FpML rules (plus adjustments for FpML 1.0, 2.0 and 3.0); Additional rules for datatypes (in DTD documents FpML 1.0, 2.0 and 3.0); Additonal rules for schemes (all FpML releases) |
Browse | N/A |
Further Information | http://www.handcoded.com |
Provider |
![]() |
Implementation Language | Xpath/Java |
Implemented Rules | All versions, All rules |
Browse | FpML Reference Implementation |
Further Information | http://www.iona.com/products/artix/standards_libraries.htm |
Provider |
![]() |
Implementation Language | CLiX / Java |
Implemented Rules | http://www.fpml.org/2003/FpML-4-0/validation/2004-04-02:All rules |
Browse | FpML Reference Implementation |
Further Information | http://www.messageautomation.com |
The reference implementations are non-normative and should not be considered publications of the Validation Working Group. Instead, they are contributions provided by members of the working group or other implementers.
Although the working group does not have the means to provide official certification, it expects implementers to demonstrate that they produce the correct results - valid or invalid - for the normative test cases of each implemented rule. There is no requirement to implement all rules, but reference implementations will state clearly which rules are implemented by publishing a list of rule identifiers.
The Validation Working Group also publishes a set of test cases with each rule set release (available above). For each rule, a number of valid examples and a number of invalid counter-examples are given. The test cases for a release will have been validated both manually and against at least one reference implementation to check that they are correct. The test cases have the following properties:
This document should be useful to:
FpML has been designed as a very rich language, with a large amount of optionality in its element and attribute definitions. This richness, which arises from the complexity of the information that FpML is designed to carry, has made it easier for implementers to fit FpML into existing architectures, and has facilitated the reuse of common element types across different asset classes.
Partly due to this flexibility, and partly due to the rich structure of FpML, it is unrealistic to assume that a schema-validated FpML document is necessarily correct in a business sense. The Validation Working Group was established early in 2003 to consider the implications of this problem and breaks down the correctness of an FpML document into three parts:
It is useful to consider some simple example to illustrate the different levels of validity. The following is a fragment of a well-formed FpML document, but violates the schema due to an invalid start date:
<calculationPeriodDates> <effectiveDate> <unadjustedDate>xxxx-xx-xx</unadjustedDate> .. </effectiveDate> <terminationDate> <unadjustedDate>2004-02-29</unadjustedDate> .. </terminationDate> .. </calculationPeriodDates>
The following version of the fragment is syntactically valid, because the contents of the effective date now match the schema definition of a valid date.
<calculationPeriodDates> <effectiveDate> <unadjustedDate>2004-08-29</unadjustedDate> .. </effectiveDate> <terminationDate> <unadjustedDate>2004-02-29</unadjustedDate> .. </terminationDate> .. </calculationPeriodDates>
The fragment of FpML inserted above is however not semantically valid, because the effective date of the trade precedes the termination date. As a consequence, the trade is not meaningful and in fact violates one of the validation rules for IRD interest rate streams. Many other types of constraints will not be validated by the schema, which is designed to designate structure, not semantics:
The validation working group has considered these problems and their implications, and has attempted to address a number of questions. How do we extract the knowledge about what constitutes a correct trade from business experts? What, if any, guarantees will we give that our work is complete? What is the normative status of the validation rules? How can parties override or tailor the rule set? What infrastructure support is necessary in the FpML architecture to enable rule-based checking? What support is necessary in the new messaging framework? The answers to these questions are addressed in the remainder of this section.
This section defines the guiding principles and requirements for how rules should be defined and written. The Validation Working Group’s desire is to define a set of guidelines, which when followed produce a set of rules which conforms to an agreed standard of layout and content, with the intention that the rules are coherent, complete and well-defined; and therefore usable by practitioners.
Validation rules should be written in a stylized plain English which is both precise and complete, but not necessarily formal:
* XML infoset does not contain schema information; PVSI contains gaps and impossible scenarios when used for rules, and therefore is unsuitable; this is why the W3C created the XDM infoset. NB model groups do not appear in XDM and therefore cannot be defined in the rule (they are also context free)
+ other cases would result in ambiguity, e.g. an optional Boolean value or more than one Boolean value (multiplicity)
There is a list of approved mathematical symbols which must be used, in the formal description, instead of their natural language equivalents. This list contains the commonly understood mathematical symbols. Only the symbols on the approved list may be used in the formal description. Their advantage is their terseness and readability compared to natural language.
To avoid confusion with XPath definitions, each symbol must be separated for other words with a space. Otherwise for example the division symbol and the XPath symbol would be confusable.
The approved mathematical symbols are:
eq | equality (XPath value comparison operator) |
ne | inequality (XPath value comparison operator) |
lt and gt | is less/greater than (XPath value comparison operator) |
le and ge | is less/greater than or equal (XPath value comparison operator) |
+ | addition (plus) |
- | substraction (minus) |
* | multiplication |
/ | division |
() | precedence grouping |
XPath value comparison operators (eq, ne, lt, le, gt, ge) are defined in the XPath specification.
To ensure consistency and improve readability rules should be defined using the following syntax (the notation is expressed using EBNF):
Rule | ::= | RuleIdExpr Contexts RuleDef Tests |
RuleIdExpr | ::= | RuleId “(” “Mandatory” | “Warning” | “Implementation-specific” “)” |
RuleId | ::= | ProductType “-” Digits |
ProductType | ::= | One of the product type or shared |
Digits | ::= | [0-9]+ |
Contexts | ::= | Context (“,” Context)* |
Context | ::= | “Context:” TypeName (ContextConds) |
ContextConds | ::= | ContextCond (ContextCond)* |
ContextCond | ::= | “[”ConditionExpr | ValCondition “]” |
ConditionExpr | ::= | Precise definition of the rule expressed in English using defined terms |
ValCondition | ::= | Reference to a global validation condition (ref) expressed in English |
TypeName | ::= | XML Schema Type Name (complex type) |
RuleDefEnglish | ::= | English definition of the rule expressed in natural language. This description may include business reasons or examples. |
RuleDefFormal | ::= | Formal definition of the rule expressed in XPath and defined terms |
Tests | ::= | “Test Cases:” Valid (Valid)* Invalid (Invalid)* |
Valid | ::= | “[“ DocLink “]” |
Invalid | ::= | “[“ DocLink “]” |
DocLink | ::= | Link to a test case document |
Rule layout:
An example rule:
The above definition describes rule 3 for credit derivatives. The context is type Trade, which is a complex type. The precondition ISDA1999 must evaluate to true, the condition that node-element documentation/contractualSupplement (as expressed using XPath 2) should exist. The rule body specifies that the node-element type must not begin with string “ISDA2003Credit” (finally links to applicable valid and invalid test case documents.)
In the previous sections, the notion of expressing rules using stylized English was introduced; and the concomitant concept that a term should have the same meaning as the equivalent XPath expression. This section introduces functions as a mechanism to define repeatable tests that are applied independent of a context. Functions take node-element types as parameters and return a typed result.
Consider a test requiring that all currencies must be the same and that this applies for several different contexts. With reference to the schema it’s possible to identify that currency is applicable to all Money types and therefore define a function which accepts as a parameter a set of Money nodes:
Function Name | same-currency |
Description | the set of money elements must all contain the same currency |
Parameter 1 | $money (fpml:Money) (min=2, max=*) |
Result Type | xs:boolean |
Test | Every $money/currency must be the same and every $money/currency/@currencyScheme must be the same |
This creates a new term same-currency which can be used as part of the definition of any validation rule.
NB The function does not inherit the context of where it is called from.
Each parameter name is prefixed with "$" to distinguish it from an XPath. Otherwise "money" might be either the parameter "$money" or the XPath "./money".
Each parameter has a minimum and maximum cardinality. This is given in the style of XML Schema. The cardinality must always be present. If the cardinality is not indicated, by default, the parameter must be provided once.
Each function must have a single result type.
There can be any number of parameters to a function.
Once a new term (e.g., same-currency) is defined, it can be used as part of the definition of any validation rule (including conditions).
A reference to a new term must also include required parameters (within parenthesis and comma-delimited) as specified in the function definition. For example,
Components of the validation rules may be differenciated by formatting as shown in the following table.
Component | Formatting | Example |
values | Courier New, 12pt, bold, black font | 100, ISDA2003Credit |
xpath expressions and elements | Courier New, small 9pt, blue font | creditDefaultSwap/generalTerms/effectiveDate |
functions | Times, 10pt, black font | exists(argument) |
Formatting is defined in stylesheet rules.css.
For the purposes of precision, extensibility, and robustness to change the structure of the Validation Rules is profiled. The rules of the profile are:
The evaluation of dates in the validation rules is not trivial. The optionality of including time offsets in date datatypes makes comparisons between dates more difficult since sometimes the result is indeterminate as any ISO8601 date is +/- 18 hours of timezone, and +/- 24 hours of day.
The Validation Working Group recommends the use of the XPath 2.0 date/time comparison rules which defines a definitive true / false value even for indeterminate calculations.
The Validation Working Group recommends that time offsets appear on all date/time values used in FpML documents.
Many validation rules defined in FpML use the term 'contains'. FpML uses the definition of XPath 2's 'contains' (fn:contains) http://www.w3.org/TR/xpath-functions/#func-contains. This is significant for alphabets with accents, diaresis, etc.
Since the Validation Working Group was established after most product working groups, it still has a lot of work to complete before the rules span the whole product range, and indeed are reasonably complete for any particular product type. The latest set of validation rules is thus likely to change more frequently than the specification, and the process of rule publication has been decoupled from the specification.
The validation working group undergoes the following process in preparing its releases:
At the end of this process, a new URI is allocated for the revised rule set, and the rule set is announced and published as the new normative rule set on the FpML web site. We expect to publish the process to take on average three months for the foreseeable future.
The rule sets and test cases are the normative content published by the Validation Working Group. The reference implementations, see below, are informative and not part of the normative process. This normative characteristic has the implication that applications that construct FpML documents have to be designed so that their output meets the full set of validation constraints.
Applications that receive FpML for processing may want to check the validation rules to ensure that the data they are receiving represent a valid FpML document. Processing applications are not obliged to reject invalid messages. Instead, the implications of rule normativity are that the receiver gains the right to reject invalid messages. In other words, the sender has to either be prepared for rejection, or the rule set has to be tailored.
The validation working group is concerned that there may be legal implications due to this definition in situations where trades are executed between counter-parties. While we believe that the definition given above, providing a right for the receiver to reject trades and placing the burden on the sender, is the least controversial, we would like to obtain additional feedback on this issue before the publication of the final recommendation.
FpML has several special products that cover multiple asset classes. This includes combinations of other products and trades of non-OTC securities. In addition, the Reporting Working Group defined several products for reporting views:
There are several special, cross-asset products in FpML.
This component defines a special kind of product that allows the structuring of trade by combining any number of products within a strategy. A trade can be of a strategy rather than of a base product; this strategy can then in turn contain other products, such as multiple options. For example, you could define a strategy consisting of an FX call and an FX put to create a straddle or strangle, and then create a trade of that strategy.
This component also defines the simple strategies of strike spread and calendar spread for Equity Options
The Strategy component makes use of a composition pattern since strategy itself is a product. This means that strategies can themselves contain strategies.
In a strategy, in addition to sub-products, there may be a "premiumProductReference" reference element. Thisreferences a product (for example a bullet payment) within the strategy that can be considered a premium for the whole strategy.
FpML is a standard that supports OTC derivative products. However, sometimes as a result of settling an OTC derivative, a trade in a non-derivative security must be performed. For example, in an OTC equity option that is physically settled, exercising the option results in a trade in the underlying equity security. For this reason, FpML has added limited coverage for representing trades in non-OTC assets. This coverage includes based information about the security that was traded, the amount that was traded, and the price at which it was traded. It does not provide full details of settlement calculations, such as fees, commissions, or taxes.
The instrumentTradeDetails component may be included in an FpML trade object in place of an OTC product. It may include several types of information.
The quantity of the trade indicates the number of securities that were traded, or the nominal (face value) amount.
The pricing of trade represents the gross price (price before fees and commissions) and/or the net price (pricing including fees and commissions).
The principal of trade represents the net and/or gross value that was traded, that is to say the quantity times the net and/or gross price.
A swap component contains one or more instances of the swapStream component, zero or more instances of the additionalPayment component together with an optional cancelableProvision component,an optional extendibleProvision component and an optional earlyTerminationProvision component. A swapStream contains the elements required to define an individual swap leg.
Within an FpML swap there is no concept of a swap header. Details of payment flows are defined within swapStreams which each contain their own independent parameters. There can also be additionalPayment elements that contain fees. The additionalPayment component is identical to the otherPartyPayment component shown above.
FpML also supports option related features. These include cancelable, extendible swaps and early termination provisions. Combining these together with swaptions into a single component was considered but rejected in favor of identifying the different option types with their own components. This provided more clarity and allowed for easier combination of the different options into a single trade. As such a swap can contain a cancelableProvision, extendibleProvision and an earlyTerminationProvision. All these components are very similar (and similar to the swaption component), re-use is achieved by using shared entities within each of the components.
FpML supports two representations of a swap stream; a parametric representation, and a cashflows representation. The parametric representation is designed to capture all the economic information required regarding dates, amounts and rates to allow trade execution and confirmation. The parametric representation is mandatory. The cashflows representation specifies an optional additional description of the same stream. The main purpose of this is to allow the inclusion of adjusted dates within an FpML representation of a trade. It can also be used to represent adhoc trades not achievable by easy manipulation of the parameters of a stream (i.e. by changing the adjusted dates). This would lead to the cashflows not matching those generated by the parameters (see more discussion later) and would also render the representation of the trade unsuitable for a confirmation. The spirit of FpML is that such manipulation of cashflows would be achieved by splitting a single stream into a number of streams though it is recognized that this may be impractical in some systems.
The cashflows representation is not self contained as it relies on certain information contained within the stream's parametric definition. The elements required from the parametric definition to complete the cashflows representation are:
The following elements and their sub-elements within the calculationPeriodAmount element:
The following elements and their sub-elements within the stubCalculationPeriodAmount element:
The inclusion of the cashflows representation is intended to support Application integration. For example, a financial institution may have one application that captures trade parameters and constructs the trade schedules and then publishes the result for use by other applications. In this case it may be either undesirable, or impossible, for each of the subscribing applications to store and calculate schedules.
The flexibility of the cashflows representation also allows payment and calculation schedules which can not be fully represented by the parametric description. If this situation arises, the mandatory parametric data should still be included in the document and the flag cashflowsMatchParameters should contain the value false to indicate that it is not possible to generate the cashflows from this parametric data. The setting of this flag to true means that the cashflows can be regenerated at any time without loss of information.
Parties wishing to take advantage of the facility for specifying cashflows which are inconsistent with the parametric representation will need to specify additional rules for how the parametric representation should be processed. This applies to both the creation of the parametric data as well as its interpretation.
The cashflows representation specifies adjusted dates, that is, dates that have already been adjusted for the relevant business day convention using the relevant set of business day calendars (lists of valid business days for each business calendar location). The FpML standard does not specify the source of these business day calendars. This may lead applications to generate differing cashflow representations from the same parametric representation if they use different business day calendars. The use of adjusted dates also produces schedules that are only valid at a particular instance of time. Additional holidays for a business calendar location may subsequently be introduced that would result in changes to the adjusted dates, which would not be reflected in the cashflows representation.
Analogous to cashflows being used to represent adjusted dates, with the addition of options it was important to be able to represented the adjusted dates associated with an option. Thus, where appropriate, a component includes an optional element to represent a schedule of adjusted dates for the option. Such a schedule would include details of adjusted dates such as adjusted exercise dates and cash settlement dates.
In general, an interest rate swap will be a swap with a fixed leg and a floating leg, two floating legs, or two fixed legs. However, certain types of trades may contain more than two legs. FpML does not restrict the number of legs that may be defined. From a modeling perspective, FpML does not distinguish between a swap leg referencing a fixed rate and a swap leg referencing a floating rate, the difference being indicated by the existence, for example, of the resetDates component in a floating rate leg.
The structure of a swapStream is shown diagrammatically below:
The components within a swapStream cannot be randomly combined and cannot be thought of as existing in their own right; they only make sense in the given context and in relationship to other components within the swapStream container.
In FpML, the schedule of dates within a swapStream is based around the calculationPeriodDates component. The definition of a calculation period in FpML differs in some respects from the International Swaps and Derivatives Association (ISDA) definition of Calculation Period. In the case of a trade involving compounding, ISDA introduces the concept of a Compounding Period, with several Compounding Periods contributing to a single Calculation Period. The FpML calculation period is equivalent to the ISDA definition of Compounding Period when compounding is applicable, i.e. the calculation period frequency will correspond to the compounding frequency. An FpML calculation period is directly comparable to the ISDA defined Calculation Period when only one calculation period contributes to a payment.
The other date components within swapStream are related to the calculationPeriodDates component. The paymentDates and resetDates components contain the information necessary to construct a schedule of payment and reset dates relative to the calculation period dates.
FpML uses the ISDA Floating Rate Option to specify the floating rate being observed. This scheme was used rather than attempting to parameterize into elements because although most floating rate indices are defined fully by a standard set of parameters (namely index, currency and fixing source) there are sometimes other details including fixing offsets and formulas. This approach allows for more flexibility in adding new floating rate indices without having to introduce new elements, although this comes at the expense of a self contained definition within the standard.
The information relating to amounts and rates is collected in the calculationPeriodAmount and stubCalculationPeriodAmount components. fxLinkedNotionalSchedule is an alternative to notionalSchedule for defining notionals. This allows for the definition of FX Resetable trades by allowing for the notional of a stream to be linked to notionals from another stream by way of the spot fx rate.
Certain swapStream components are designated as being optional (although it would be more accurate to say that they are conditional). Thus a fixed rate stream never includes a resetDates component, but this is required for a floating rate stream. Similarly, the stubCalculationPeriodAmount component will be required if the swap leg has either an initial or final stub, or indeed both, but should otherwise not be specified. The principalExchanges component is required in the case of cross currency swaps or other types of swap involving exchanges of principal amounts.
The payerPartyReference and receiverPartyReference elements indicate which party is paying and which receiving the stream payments. This is done by referencing the appropriate party within the party component.
The detailed structures within the swapStream are shown diagrammatically below:
The pricing and valuation working group required product definitions in order to support:
To support the above the Pricing and Risk Working Group required a Relative Swap – ie a swap where the dates are specified as periods relative to some other date. Eg – effective date is spot and the termination date is 5y after the effective date.
The working group considered including a separate product and extending the existing product. The group decided that many of the features of a relative swap could be very useful within the normal swap definition. Also, providing a separate product would add ambiguity in the standard allowing two ways to represent some products. As such is was decided to extend the existing InterestRateStream to include relative swap features.
To fully define any swap using relative dates then all places where a date is specified in the standard would need to be replaced by a relative date type. The group considered this but agreed that the initial proposal should limit the work to extending the calculation period dates to cover relative dates. This would cover the requirements of the Pricing and Valuation WG since it allows the definition of relatively simple swaps as relative. If a requirement arises to define more complex swaps (eg compounding with payment stubs) then the standard can be extended at that point.
An optional stubPeriodType element was added to allow the definition of how any irregular period should be handled. This element can be present along with the explicit dates but if this is the case there is a rule that the dates generated using the stubPeriodType should be consistent with the dates present within calculationPeriodDates.
The Interest Rate Stream component captures the necessary information to represent the non-deliverable terms of an interest rate swap.
These non-deliverable terms specify the conditions under which the cashflows will be made in a different currency (the “settlement currency”) than the currency in which a given leg is denominated (the “reference currency”).
The InterestRateStream type contains an optional settlementProvision component.
This structure supports both "Euro trades" (where settlement currency needs to be specified) and the non-deliverable settlement provision.
Five elements are required to characterize the non-deliverable settlement terms:
Here is how each of these requirements is addressed through this structure:
The regular payments of the swap get assigned an Id:
<paymentDates id="PaymentDatesID"> <calculationPeriodDatesReference href="E2000098N10184"/> <paymentFrequency> <periodMultiplier>6</periodMultiplier> <period>M</period> </paymentFrequency> <firstPaymentDate>2005-06-16</firstPaymentDate> <payRelativeTo>CalculationPeriodEndDate</payRelativeTo> <paymentDatesAdjustments> <businessDayConvention>MODFOLLOWING</businessDayConvention> <businessCenters> <businessCenter businessCenterScheme= "http://www.fpml.org/coding-scheme/business-center-2-0">USNY</businessCenter> <businessCenter businessCenterScheme= "http://www.fpml.org/coding-scheme/business-center-2-0">GBLO</businessCenter> </businessCenters> </paymentDatesAdjustments> </paymentDates>
The principalExchanges node of the swap also gets assigned an Id:
<principalExchanges id="PrincipalExchanges"> <initialExchange>false</initialExchange> <finalExchange>true</finalExchange> <intermediateExchange>false</intermediateExchange> </principalExchanges>
The dateRelativeToPaymentDates refers to each of those payments that need to be settled in the settlement currency of the swap:
<dateRelativeToPaymentDates> <paymentDatesReference href="PaymentDatesID"/> <paymentDatesReference href="PrincipalExchanges"/> </dateRelativeToPaymentDates>
The priceSourceDisruption element defines the parameters used to get a price quote to replace the settlement rate option that is disrupted.
Asset Swaps can be represented in FpML since version 4.2 Second Working Draft. An Asset Swap is a swap agreement where one leg mimics the return of the underlying asset. No transfer of asset takes place. Sometimes the sale of the bond is included in the asset swap construct.
The representation of Asset Swaps reuses the Swap type adding an optional reference to a Bond underlyer.
The support of Inflation Swaps is based on the extension of the IRD product schema through the use of a Substitution Group.
The representation focuses on the Floating Rate Calculation, which is the key component that differentiates an Inflation based product from other Interest Rate Products.
A Floating Rate such as USD-LIBOR is observed daily as a percentage interest rate value and does not require any further calculation. In contrast, an Inflation Rate for a calculation period is usually determined as follows:
Apart from the above difference other features of inflation swaps are very much in line with the interest rate swaps. They have a concept of two cash flow streams, generally a fixed stream and an inflation stream. Both streams generate cash flows based on a function of the interest rate, notional and day count fraction for each calculation period. For this reason, the design approach focused on merging the functionality with the IRD schema instead of developing a new product.
Two options were considered in order to merge the Inflation Swaps into the IRD Schema. The first option was to extend the Floating Rate Leg to include Inflation specific elements. The second approach was to introduce a substitution group at the Floating Rate Leg level. Here are some of the advantages of using the substitution group instead of extending the schema.
The InflationRateCalculation type is created by extension of the existing FloatingRateCalculation type, then addition of Inflation specific elements such as the Inflation Lag.
In order to implement the Substitution Group an abstract element rateCalcuation has been added to the schema. The rateCalcuation element can be substituted by the floatingRateCalculation element for standard Floating Rate legs, or the inflationRateCalculation element.
Any product that uses an InterestRateStream can elect to use this type by making use of the substitution group.
There are two main types of Inflation Products that are commonly traded, the Zero Coupon Inflation Swaps and the Year On Year Inflation Swaps. The following elements extended the FloatingRateCalculation in order to support the correct representation of these products.
Here is how the above structure addresses each of the following requirements:
As noted above, the definition of a forward rate agreement trade is contained within a single component. A forward rate agreement is a simple and commoditized product. This means there is no variation in the product traded and it is not expected to become more complex in the future.
The structure of the fra component is shown diagrammatically below:
FpML also supports interest rate options. The supported components are:
The ISDA 2000 Definitions have been followed closely in defining the various option dates and element names. Thus components for European, Bermuda and American exercise have been defined which are re-used in each of the first four components above. These components share an element called relevantUnderlyingDate whose meaning is dependent on the option component it is contained in:
This is a style of option to which the right or rights granted are exercisable on a single date referred to as the expiration date. This date can be specified either as an adjustableDate or as a relativeDate though the latter is only expected to be used in the case of cash settled cancellations where the expiration date may be defined as an offset to the cash settlement payment date.
The relevantUnderlyingDate is optional, in its absence the effectiveDate of the underlying is the effectiveDate defined in the swapStreams. This can only be excluded for european swaptions.
This is a style of option to which the right or rights granted are exercisable during the exercise period which consists of a period of days. The underlying should specify its effective date based on the earliest possible exercise. When exercise implies a stub period this will be taken to be a short stub at the start, i.e. the underlying swap defines a series of flows, exercise merely brings the flows into existence from the relevantUnderlyingDate.
This is a style of option to which the right or rights granted are exercisable during an exercise period which consists of a number of specified dates. These dates can be defined as a list together with adjustments or by reference to an existing schedule elsewhere in the trade (e.g. resetDates). In the latter case bounds can be placed on the referenced schedule to define a subset of the whole schedule.
The right for one or both parties to terminate the trade and settle the remaining term of the swap for fair value. In the case of a mandatory early termination the termination is mandatory.
The Broker Working Group defined the requirement to be able to define early termination dates in a parametric form: “ At X years and every Y years thereafter “. The current FpML Specification quotes the actual unadjusted dates.
For example, FpML early termination dates: 10-Nov-2008, 10-Nov-2009, 10-Nov-2010, 10-Nov-2011. Assuming trade date was 10-Nov-2004 we would want “At 4 years and every year thereafter”.
The mandatoryEarlyTerminationDateTenor and optionalEarlyTerminationParameters elements allow specification of the mandatory early termination date in terms of a tenor, e.g. 5 years, or for optional early termination (mutual puts) the specification of the earliest termination date in terms of a tenor and a subsequent exercise frequency (in the case of Bermudan or American style early termination). American style exercise would be indicated by stating an exercise frequency of 1 day. European style exercise would omit the exercise frequency altogether.
With a cancelableProvision the seller grants the buyer the right to terminate all swapStreams, typically in exchange for an upfront premium. Unlike optionalEarlyTermination, the cancellation of the swap does not require the parties to exchange a cash settlement amount on exercise representing the fair value of the remaining life of the swap although an exercise fee can be specified in the exerciseFeeSchedule.
With an extendibleProvision the seller grants the buyer the right to extend all swapStreams, typically in exchange for an upfront premium. This provision is very similar to a cancelableProvision and in fact the two share the same market risk profile. FpML makes a clear distinction between the two since the operational risk associated with misrecording the type of applicable provision can be high. For example, a 10 year swap with the right to cancel after 5 years has exactly the same risk profile as a 5 year swap with the right to extend for 5 years after 5 years. However, failing to give notice of exercise after 5 years will in one case (extendibleProvision) result in the swap terminating after 5 years and in the other case (cancelableProvision) result in the swap terminating after 10 years, i.e. action after 5 years is required in one case to lengthen the term of the swap in the other to shorten it.
The option to enter into a swap is defined as its own product and contains the underlying swap as a swap element. A swaption straddle is defined by setting the swaptionStraddle element to true: this implies that the swaption buyer has the right, on exercise, to decide whether to pay or receive fixed on the underlying swap. If the underlying does not contain a single fixed stream and a single floating stream then the straddle is invalid and thus this flag should be set to false..
Caps and Floors are defined as one or more capFloorStreams and zero or more additionalPayments. The capFloorStream re-uses the InterestRateStream entity and thus its content is identical to a swapStream.
capFloor
Though a capFloorStream allows the definition of fixed streams or known amount streams these are not the intended use of this component and there use would be considered an invalid FpML trade.
The floatingRateCalculation component has been amended to allow the specification of cap/floor structures within a single stream (e.g. straddles, corridors). The changes are:
These additions allow for multiple cap and floor rates to be added to the stream and to define precisely which party bought and sold them. To maintain backward compatibility with FpML1.0 the buyer and seller are optional. When absent the following rules apply:
The cash settlement component is used by mandatoryEarlyTermination, optionEarlyTermination and swaption. The language used within the component corresponds to the ISDA language for the various cash settlement methods. Of the five methods included, three share one underlying component and the other two share another component. Thus there is re-use whilst maintaining ease of identification of the type. Also, this approach allows for easy integration of other methods should they arise.
This section provides an in-depth review of the product architecture of FpML 5.2 Credit Derivatives. The products covered by FpML 5.2 Credit Derivatives are the single name credit default swap, the credit default swap index, the credit default swap basket, the credit default swap on a mortgage, and the credit default swap on a loan.
In order to define the scope of the credit default swap work FpML adopted the definition used in the ISDA Year End 2001 Flash Survey:
"In a credit default swap one counterparty (the protection seller) agrees to compensate another counterparty (the protection buyer) if a specified company or Sovereign (the reference entity) experiences a credit event, indicating it is or may be unable to service its debts. The protection seller is paid a fee and/or premium, expressed as an annualized percent of the notional in basis points, regularly over the life of the transaction."
The FpML 5.2 Credit Derivatives Product Architecture draws heavily on the 2003 ISDA Credit Derivatives Definitions (hereafter referred to as the "2003 Definitions"). Wherever feasible the terminology and practice of the ISDA definitions has been adopted to ensure consistency between traditional and FpML contract representations. Appendix A lists the elements in FpML 5.2 Credit Derivatives that differ in name from their corresponding terms in the 2003 Definitions. In FpML 5.2 it is possible to represent credit default swap trades done under either the 1999 or the 2003 definitions.
The FpML 5.2 Credit Derivatives Subschema supports both a full confirmation and a transaction supplement (i.e. economics of the trade) representation of the credit default swap. The transaction supplement representation is a subset of the elements contained in the full confirmation representation. This flexible approach makes FpML 5.2 Credit Derivatives usable in all stages of the credit default swap trade lifecycle.
Product support for the credit default swap index was added to FpML in version 4.1. The FpML representation for this product is closely based on the credit default swap work that first appeared in FpML 4.0. In fact, the index trade itself is described using the creditDefaultSwap element. Only a transaction supplement representation of a credit default swap index is supported.
Support for tranches on credit default swap indices was added in version 4.2.
Product support for the credit default swap basket was added to FpML in version 4.2. The FpML representation for this product is based on the existing creditDefaultSwap product element and it includes the support for tranches.
Product support for the credit default swap on a mortgage was added to FpML in version 4.3. The support includes the representation of a mortgage underlyer and the addition of additional structures within the creditDefaultSwap product representation.
Underlying product | Mortgage | Corporate |
Traded on | Reference obligation | Reference entity |
Credit Events | Failure to pay principal; Write down – occurs when the reference obligation is written down (realized losses usually); Distressed ratings downgrade; Maturity extension; Failure to Pay Interest | Bankruptcy; Failure to pay; Restructuring; Sovereign failure to pay, in case of emerging market underlyers |
Interest Shortfall | Interest does not have to be fully paid, and can be reimbursed at a later time | Not applicable |
Factors | Bonds factor down, as mortgages are paid down | No factor issues |
Payment frequency | Monthly | Quarterly |
Maturity | Generally 30 year bonds. The CDS trade terminates with the maturity of the underlyer | Five or ten years are most common. CDS trades terminate with the maturity of the underlyer or a credit event |
While single name corporate CDS are terminated once a credit event occurs, mortgage CDS persist.
A failure to pay principal or interest by some underlying mortgagors results in a shortfall, which is then compensated by the protection seller, in accordance to the contract terms. If those mortgagors reimburse those defaults at a later point, this will result into a corresponding ‘additional fixed payment amount’ that will be returned by the production buyer.
Those ‘floating rate payment events’ and ‘additional fixed payments’ can exist without occurrence of a credit event. A typical case would be when a failure to pay interests is not eligible as a credit event (but specified as an eligible floating rate payment event).
Product support for the credit default swap on a loan was added to FpML in version 4.3. The support includes the representation of a loan underlyer and the addition of additional structures within the creditDefaultSwap product representation.
The Loan CDS approach is tackled through two extensions to the reference information:
Product support for credit default swap option was added to FpML in version 4.3. The support is based on the creation of a new creditDefaultSwapOption product. As part of this work, some option structures have been generalized to be reused across multiple types of options.
The credit default swap underlyer is supported by referencing the existing creditDefaultSwap product element within the new creditDefaultSwapOption product.
Like all other derivative products supported by FpML, the type used to represent the credit default swap, the credit default swap index, and the credit default swap basket, CreditDefaultSwap, is defined as an extension of the Product type and the corresponding creditDefaultSwap element belongs to the product substitution group. The creditDefaultSwap element appears in Figure 1.
Figure 1: creditDefaultSwap element
The structure of the creditDefaultSwap element corresponds to the structure of the Confirmation that appears in Exhibit A of the 2003 Definitions (hereafter referred to as the "2003 Confirmation"). The six sections that comprise the 2003 Confirmation and their corresponding FpML elements appear in Figure 2.
In Transparency view, the structure of the creditDefaultSwap element corresponds to a subset of the structure of the Confirmation that appears in Exhibit A of the 2003 Definitions (hereafter referred to as the "2003 Confirmation"). The sections that comprise the 2003 Confirmation and their corresponding Transparency View FpML elements appear in Figure 2.
2003 Confirmation |
FpML creditDefaultSwap Element |
General Terms |
generalTerms |
Fixed Rate Payments |
feeLeg |
Floating Payment |
protectionTerms |
Settlement Terms |
physicalSettlementTerms or cashSettlementTerms |
Notice and Account Details |
N/A |
Offices |
N/A |
Figure 2: Sections of the 2003 Confirmation and their corresponding FpML creditDefaultSwap elements.
Additional points to note:
The remainder of this document reviews each child element of the creditDefaultSwap.
The generalTerms element, which appears in Figure 3, represents the information specified in the General Terms section of the 2003 Confirmation.
Figure 3: generalTerms Element
The effectiveDate element represents the Effective Date term. In order to optionally allow the explicit specification of a particular business day convention per the 2003 Definitions this element is of type AdjustableDate2. The effectiveDate is optional for the transaction supplement representation of some credit default swap indices.
The scheduledTerminationDate element represents the Scheduled Termination Date term. This element can be specified as either an adjustable date or a relative date. For confirmation and transparency purposes a specific date will always be specified. Again, the AdjustableDate2 type allows the parties to explicitly specify a particular business day convention per the 2003 Definitions. The Interval type (e.g. 5 Y for a five year deal) is included because this way of expressing a scheduled termination date is quite commonly used in historical price databases. The scheduled termination date is optional for the transaction supplement representation of some credit default swap indices. The effectiveDate and scheduledTerminationDate should always be included for a credit default swap.
The sellerPartyReference element represents the protection seller. This party is referred to as the Floating Rate Payer in the 2003 Definitions. Similarly, the buyerPartyReference element represents the protection buyer and is referred to as the Fixed Rate Payer in the 2003 Definitions. These elements reference the party elements underneath the FpML root element.
The optional elements dateAdjustments.businessCenters and dateAdjustments.businessDayConvention are used to represent the terms Business Day and Business Day Convention respectively.
The referenceInformation element is used in the representation of a credit default swap. The indexReferenceInformation element is used in the representation of a credit default swap index. The basketReferenceInformation element is used in the representation of a credit default swap basket.
The full expansion of the referenceInformation element appears in figure 4. Two of its child elements, referenceEntity and referenceObligation, are used to represent the Reference Entity and Reference Obligation(s) terms respectively.
The referenceEntity element is of type LegalEntity and is required. The LegalEntity type requires an entityName and/or an entityId to be provided. Both the entityName and the entityId are represented using schemes, which allow the source (e.g. reference database) of the information to be recorded.
A referenceObligation element has either a bond, a convertibleBond, a mortgage, or loan as one of its child elements. The bond, convertibleBond, mortgage, and loan elements are shared FpML elements. In other words, they were not created specifically to support credit derivatives and are also used in other asset classes.
For a credit default swap, bond or convertibleBond is used to specify a Reference Obligation's CUSIP/ISIN, Maturity and Coupon values. The instrumentId element is used to specify CUSIP/ISIN. The mandatory instrumentIdScheme is used to specify whether the id provided is a CUSIP or an ISIN. Since multiple occurrences of instrumentId are allowed, the schema supports the specification of both the obligation's CUSIP and ISIN, if they both exist. The couponRate and maturity elements are used to represent the Coupon and Maturity terms respectively.
A mortgage underlyer was added to the underlying classes that are part of the ReferenceObligation structure in order to support cds on mortgage. This Mortgage type uses most of the structures present at other underlying assets.
The extensions specific to the mortgage structure are the following:
A loan underlyer was added to the list of available product classes as part of the Reference Obligation. This Loan type extends Underlying Asset structure.
The extensions specific to the loan structure are the following:
To represent the Primary Obligor term a referenceObligation element may optionally have either a primaryObligor or a primaryObligationReference element. If the Primary Obligor is the Reference Entity, then primaryObligorReference should be used. Its href attribute will contain the id attribute of the referenceEntity. Otherwise, the primaryObligor element, which is of type LegalEntity, should be used.
Similarly, to represent the Guarantor term a referenceObligation element may optionally have either a guarantor or a primaryObligationReference element. If the Guarantor is the Reference Entity, then guarantorReference should be used. Its href attribute will contain the id attribute of the referenceEntity. Otherwise, the guarantor element, which is of type LegalEntity, should be used.
The optional allGuarantees and referencePrice are used to represent the terms All Guarantees and Reference Price respectively.
Figure 4: referenceInformation element
Although the structure of referenceInformation appears to be somewhat complex, the specification of Reference Entity and Reference Obligation information in FpML documents is quite simple, straightforward and flexible. An example bears this out:
In order to support the full credit default swap trade lifecycle, the schema allows this information to be expressed in various degrees of detail:
Example 1 - Reference Entity only:
<referenceInformation> <referenceEntity> <entityName>Bundesrepublic Deutschland</entityName> </referenceEntity> <noReferenceObligation/> </referenceInformation>
Example 2 - Reference Entity and ISIN of the Reference Obligation with optional scheme attributes:
<referenceInformation> <referenceEntity> <entityName>Bundesrepublic Deutschland</entityName> </referenceEntity> <referenceObligation> <bond> <instrumentId instrumentIdScheme = "http://www.fpml.org/spec/2002/instrument-id-ISIN-1-0">DE0001135200</instrumentId> </bond> </referenceObligation> </referenceInformation>
Example 3 - Full Representation of Reference Entity and Reference Obligation terms:
<referenceInformation> <referenceEntity id ="DBR"> <entityName>Bundesrepublic Deutschland</entityName> </referenceEntity> <referenceObligation> <bond> <instrumentId instrumentIdScheme = "http://www.fpml.org/spec/2002/instrument-id-ISIN-1-0">DE0001135200</instrumentId> <couponRate>.05</couponRate> <maturity>2012-07-04</maturity> </bond> <primaryObligorReference href = "DBR"/> </referenceObligation> <referencePrice>1</referencePrice> </referenceInformation>
The referencePolicy element is applicable to the transactions on mortgage-backed security, which can make use of a reference policy. Presence of the element indicates that the reference policy is applicable; absence implies that it is not.
The indexReferenceInformation element appears in the Figure 5. This element is used to identify the index referenced by a credit default swap index trade.
The indexReferenceInformation element is structurally very similar to the referenceEntity element. The indexReferenceInformation element identifies a collection of (Reference Entity, Reference Obligation) pairs issued by an index sponsor (e.g. iBoxx, TRAC-X). The referenceEntity element, on the other hand, identifies a specific Reference Entity.
Figure 5: indexReferenceInformation element
The identification is accomplished by a combination of the indexId and the indexName elements. There are optional elements to explicitly define the index series number, the version number of the index series annex, the annex publication date and the source of the relevant annex (the elements indexSeries, indexAnnexVersion, indexAnnexDate and indexAnnexSource respectively) (for a given series, multiple versions of the “annex” may be published over time). The indexSeries and indexAnnexVersion elements are of integer type, the indexAnnexDate element is of date type and the indexAnnexSource element is of complex type IndexAnnexSource (which is of base type string).
The indexAnnexSource element corresponds to the field ‘Source of Relevant Annex’ that appears in the Dow Jones CDX form of Transaction Supplement and it is proposed an FpML-defined Scheme is defined with initial possible values of “Publisher” and “Master Confirmation”. These values have the meanings ascribed to them in the Dow Jones CDX General Terms Confirmation (A value of “Publisher” implies the relevant annex for a transaction is the list for the relevant index with the relevant annex date published by Mark-it Partners).
See the Mark-it Partners website (http://www.mark-it.com) for examples of published annexes for the CDX and iTraxx index families.
An additional optional repeating element excludedReferenceEntity is also proposed to support the iTraxx and CDX forms of Transaction Supplement which allow for specific reference entities in the index to be excluded by making reference to them in the Transaction Supplement. This element uses the existing LegalEntity type.
Identifying a credit default swap index with indexReferenceInformation is quite straightforward. Like referenceInformation, it allows for this information to be expressed in various degrees of detail.
Some illustrative example FpML snippets including the optional elements follow:
<generalTerms> ... <indexReferenceInformation> <indexName>Dow Jones CDX.NA.IG.3 Version 1</indexName> <indexId indexIdScheme="http://www.fpml.org/spec/2003/instrument-id-RED-pair-1-0">123456789</indexId> <indexSeries>3</indexSeries> <indexAnnexVersion>1</indexAnnexVersion> <indexAnnexDate>2004-09-20</indexAnnexDate> <indexAnnexSource>Publisher</indexAnnexSource> </indexReferenceInformation> ... </generalTerms> <generalTerms> ... <indexReferenceInformation> <indexName>Dow Jones iTraxx Europe Series 2 Version 1</indexName> <indexId indexIdScheme="http://www.fpml.org/spec/2003/instrument-id-RED-pair-1-0">123456789</indexId> <indexSeries>2</indexSeries> <indexAnnexVersion>1</indexAnnexVersion> <indexAnnexDate>2004-09-17</indexAnnexDate> <excludedReferenceEntity> <entityName>Acme Inc.</entityName> <entityId entityIdScheme="http://www.fpml.org/spec/2003/entity-id-RED-1-0">123456</entityId> </excludedReferenceEntity> </indexReferenceInformation> ... </generalTerms>
The optional tranche element allows the specification of index tranches. The structure requires an attachment point and an exhaustion point and optionally the applicability of the legal term Incurred Recovery.
The Dow Jones CDX Tranche Transactions Standard Terms Supplement requires the "Source of Relevant Settled Entity Matrix" field on a Confirmation. The optional settledEntityMatrix element supports it. It contains a required matrixSource element and an optional publicationDate element.
<generalTerms> ... <indexReferenceInformation> <indexName>Dow Jones iTraxx Europe Consumers Series 2 Version 1</indexName> <indexSeries>2</indexSeries> <indexAnnexVersion>1</indexAnnexVersion> <tranche> <attachmentPoint>0.03</attachmentPoint> <exhaustionPoint>0.07</exhaustionPoint> </tranche> <settledEntityMatrix> <matrixSource>NotApplicable</matrixSource> </settledEntityMatrix> </indexReferenceInformation> ... </generalTerms>
The basketReferenceInformation element appears in the figure below. This element is used to define the composition of the basket by a credit default swap basket.
The identification of the basket using basketId and/or basketName is optional since each component of the basket must be specified using the referencePoolItem element.
The constituentWeight (weight of each component of the basket) is optional since if the element is not present, it means that flat weight is assumed.
The ability to specify either Nth and Mth to default or tranche details on baskets has been included within basketReferenceInformation.
The tranche element is available to specify an attachment and exhaustion point as well as the legal applicability of Incurred Recovery. The Nth and Mth to Default sequence is available to express trades in which there is a triggered reference obligation to payout. The tranche and nthToDefault are features are both optional structures.
Some illustrative example FpML snippets follow:
<generalTerms> ... <basketReferenceInformation> <referencePool> <referencePoolItem> <referencePair> <referenceEntity id="agriumEntity"> <entityName>Agrium Inc.</entityName> <entityId entityIdScheme="http://www.fpml.org/spec/2003/entity-id-RED-1-0"> 008HA7</entityId> </referenceEntity> <referenceObligation> <bond> <instrumentId instrumentIdScheme="http://www.fpml.org/spec/2002/ instrument-id-CUSIP-1-0">008916AB4</instrumentId> <couponRate>0.077</couponRate> <maturity>2017-02-01</maturity> </bond> <primaryObligorReference href="agriumEntity"/> </referenceObligation> <entityType>NorthAmericanInvestmentGrade</entityType> </referencePair> </referencePoolItem> <referencePoolItem> <referencePair> <referenceEntity id="tenetEntity"> <entityName>Tenet Healthcare Corporation</entityName> <entityId entityIdScheme="http://www.fpml.org/spec/2003/entity-id-RED-1-0"> 8G836J</entityId> </referenceEntity> <referenceObligation> <bond> <instrumentId instrumentIdScheme="http://www.fpml.org/spec/2002/ instrument-id-CUSIP-1-0">88033GAT7</instrumentId> <couponRate>0.06</couponRate> <maturity>2011-12-01</maturity> </bond> <primaryObligorReference href="tenetEntity"/> </referenceObligation> <entityType>NorthAmericanInvestmentGrade</entityType> </referencePair> </referencePoolItem> </referencePool> <nthToDefault>1</nthToDefault> </basketReferenceInformation> ... </generalTerms>
Several terms that appear in the General Terms section of the 2003 Confirmation do not appear in the generalTerms element because elements to represent these terms already existed in the FpML trade element. The terms that belong to this category appear in Figure 6 along with their corresponding FpML element.
ISDA Confirmation Term |
FpML Element |
Trade Date |
trade.tradeHeader.tradeDate |
Calculation Agent |
trade.calculationAgent.calculationAgentPartyReference |
Calculation Agent City |
trade.calculationAgentBusinessCenter |
Figure 6 General Terms that do not appear in creditDefaultSwap.generalTerms element.
The feeLeg element represents the information specified in the Fixed Payments section of the 2003 Confirmation. In other words, this is where the payment stream from Fixed Rate Payer to the Floating Rate Payer is specified. This element reuses types and elements from FpML 5.2 Interest Rate Derivatives.
The feeLeg allows representation of the following types of payment schedules for a credit default swap using a combination of the singlePayment and periodicPayment elements:
In addition, it's important to note that the use of initialPayment allows the representation of the situation when the seller of protection pays a fee to the buyer as an upfront payment. An example of this scenario is the payment in exchange for an agreed modification of the first period start date.
An optional cashflow representation is also permitted. The feeLeg element appears in Figure 7.
Figure 7: feeLeg element
This structure allows specification of a single payment (zero or more) or a periodic series of payments. Therefore, it allows representation of a single upfront payment, a single upfront payment combined with a schedule of regular payments or a schedule of totally irregular payment dates and amounts. Note that payments specified in the singlePayment and periodicPayment elements are always assumed to be payments made by the Fixed Rate Payer (protection buyer) to the Floating Rate Payer (protection seller).
When a ‘New Transaction’ arises following a Novation it is market practice for a CDS that the initial Calculation Period with respect to the New Transaction shall commence on and include the (a) the Fixed Rate Payer Period End Date of the ‘Old Transaction’ that immediately precedes the Novation Date; or (b) in the event the Novation Date occurs during the initial Calculation Period of the Old Transaction, the Effective Date (see 2004 ISDA Novation Definitions at http://www.isda.org/publications/pdf/2004-Novation-Definitions.pdf for further background, specifically Section 1.20).
firstPeriodStartDate supports a CDS FpML representation for a New Transaction arising from a Novation to be useful as a standalone document (without needing reference to the Old Transaction). It allows specification of the initial Calculation Period Start Date where it is not equal to the trade’s Effective Date.
The periodicPayment.rollConvention element is used to address the ambiguities that can otherwise occur with regard to the actual payment dates, particularly when considering month-end rolls and any initial stub. The rollConvention element typically takes a value of 1-30 or EOM. It represents the actual unadjusted day in the month on which payments would occur.
As in FpML 5.2 Interest Rate Derivatives, the periodicPayment.firstPaymentDate element is only needed when the first period is irregular, i.e. there is a short or long initial stub. For a regular set of payment periods knowing the Effective Date, Scheduled Termination Date, payment frequency and roll convention is sufficient to define the schedule.
In keeping with the 2003 Definitions either a Fixed Rate Calculation or known Fixed Amount may be specified. The optional periodicPayment.fixedAmountCalculation.dayCountFraction element should be omitted in the case of a Transaction Supplement. Similarly, the optional periodicPayment.fixedAmountCalculation.calculationAmount element provides support for the full confirmation but should be omitted in the case of a Transaction Supplement.
The addition of the adjustedPaymentDate element within singlePayment and adjustedPaymentDates component in periodicPayment allows the optional inclusion of a 'cashflows' like structure consistent with what was done in FpML 5.2 Interest Rate Derivatives. Note these structures are intended more for internal application integration use rather than external communication, i.e. Wouldn't be applicable for confirmations.
Here are some example fee schedules:
Example 1 - Fixed Rate - Regular Schedule:
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>1</rollConvention> <fixedAmountCalculation> <calculationAmount> <currency>USD</currency> <amount>5000000</amount> </calculationAmount> <fixedRate>0.0085</fixedRate> <dayCountFraction dayCountFractionScheme="http://www.fpml.org/spec/2004/ day-count-fraction-1-0">ACT/360</dayCountFraction> </fixedAmountCalculation> </periodicPayment> </feeLeg>
or in a Transaction Supplement
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>1</rollConvention> <fixedAmountCalculation> <fixedRate>0.0085</fixedRate> </fixedAmountCalculation> </periodicPayment> </feeLeg>
Example 2 - Fixed Amount - Regular Schedule:
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>1</rollConvention> <fixedAmount> <currency>USD</currency> <amount>10625.00</amount> </fixedAmount> </periodicPayment> </feeLeg>
Example 3 - Fixed Rate - Month-End Rolls:
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>EOM</rollConvention> <fixedAmountCalculation> <calculationAmount> <currency>USD</currency> <amount>5000000</amount> </calculationAmount> <fixedRate>0.0085</fixedRate> <dayCountFraction dayCountFractionScheme="http://www.fpml.org/spec/2004/ day-count-fraction-1-0">ACT/360</dayCountFraction> </fixedAmountCalculation> </periodicPayment> </feeLeg>
or in a Transaction Supplement
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>EOM</rollConvention> <fixedAmountCalculation> <fixedRate>0.0085</fixedRate> </fixedAmountCalculation> </periodicPayment> </feeLeg>
Example 4 - Fixed Rate - Initial (Short) Stub:
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <firstPaymentDate>2002-11-01</firstPaymentDate> <rollConvention>1</rollConvention> <fixedAmountCalculation> <fixedRate>0.0085</fixedRate> </fixedAmountCalculation> </periodicPayment> </feeLeg>
Example 5 - Fixed Rate - Initial (Long) Stub:
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <firstPaymentDate>2003-02-01</firstPaymentDate> <rollConvention>1</rollConvention> <fixedAmountCalculation> <fixedRate>0.0085</fixedRate> </fixedAmountCalculation> </periodicPayment> </feeLeg>
Example 6 - Fixed Amount - Single Payment:
<feeLeg> <singlePayment> <adjustablePaymentDate>2002-11-02</adjustablePaymentDate> <fixedAmount> <currency>USD</currency> <amount>100000.00</amount> </fixedAmount> </singlePayment> </feeLeg>
Example 7 - Upfront Fee combined with Fixed Rate Regular Schedule
<feeLeg> <singlePayment> <adjustablePaymentDate>2002-11-02</adjustablePaymentDate> <fixedAmount> <currency>USD</currency> <amount>100000.00</amount> </fixedAmount> </singlePayment> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>1</rollConvention> <fixedAmountCalculation> <fixedRate>0.0085</fixedRate> </fixedAmountCalculation> </periodicPayment> </feeLeg>
Example 8 - Irregular Payment Schedule
<feeLeg> <singlePayment> <adjustablePaymentDate>2002-11-02</adjustablePaymentDate> <fixedAmount> <currency>USD</currency> <amount>100000.00</amount> </fixedAmount> </singlePayment> <singlePayment> <adjustablePaymentDate>2002-12-02</adjustablePaymentDate> <fixedAmount> <currency>USD</currency> <amount>50000.00</amount> </fixedAmount> </singlePayment> </feeLeg>
Example 9 - Fixed Rate - Final (Short) Stub:
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <lastRegularPaymentDate>2003-03-20</lastRegularPaymentDate> <rollConvention>20</rollConvention> <fixedAmountCalculation> <fixedRate>0.009</fixedRate> </fixedAmountCalculation> </periodicPayment> </feeLeg>
Example 10 - Fixed Rate - Regular Schedule (Including Optional Cashflows):
Note that the adjustedPaymentDate element values have not been adjusted for any applicable business days.
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>1</rollConvention> <fixedAmountCalculation> <calculationAmount> <currency>USD</currency> <amount>5000000</amount> </calculationAmount> <fixedRate>0.0085</fixedRate> <dayCountFraction dayCountFractionScheme="http://www.fpml.org/spec/2004/ day-count-fraction-1-0">ACT/360</dayCountFraction> </fixedAmountCalculation> <adjustedPaymentDates> <adjustedPaymentDate>2003-02-01</adjustedPaymentDate> <fixedAmount> <currency>USD</currency> <amount>10625.00</amount> </fixedAmount> </adjustedPaymentDates> <adjustedPaymentDates> <adjustedPaymentDate>2003-05-01</adjustedPaymentDate> <fixedAmount> <currency>USD</currency> <amount>10625.00</amount> </fixedAmount> </adjustedPaymentDates> <adjustedPaymentDates> <adjustedPaymentDate>2003-08-01</adjustedPaymentDate> <fixedAmount> <currency>USD</currency> <amount>10625.00</amount> </fixedAmount> </adjustedPaymentDates> <adjustedPaymentDates> <adjustedPaymentDate>2003-11-01</adjustedPaymentDate> <fixedAmount> <currency>USD</currency> <amount>10625.00</amount> </fixedAmount> </adjustedPaymentDates> </periodicPayment> </feeLeg>
Example 11 - firstPeriodStartDate - Novations Support
Suppose the following Old Transaction is Novated with the following information:
Old Transaction FpML (abbreviated) representation:
<creditDefaultSwap> <generalTerms> <effectiveDate> <unadjustedDate>2004-06-09</unadjustedDate> <dateAdjustments> <businessDayConvention>NONE</businessDayConvention> </dateAdjustments> </effectiveDate> <scheduledTerminationDate> <adjustableDate> <unadjustedDate>2009-06-20</unadjustedDate> <dateAdjustments> <businessDayConvention>NONE</businessDayConvention> </dateAdjustments> </adjustableDate> </scheduledTerminationDate> ... </generalTerms> <feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <firstPaymentDate>2004-09-20</firstPaymentDate> <rollConvention>20</rollConvention> <fixedAmountCalculation> <calculationAmount> <currency>EUR</currency> <amount>5000000.0</amount> </calculationAmount> <fixedRate>0.0125</fixedRate> <dayCountFraction dayCountFractionScheme="http://www.fpml.org/spec/2004/ day-count-fraction-1-0">ACT/360</dayCountFraction> </fixedAmountCalculation> </periodicPayment> </feeLeg> ... </creditDefaultSwap>
For the New Transaction the FpML representation would show:
New Transaction FpML (abbreviated) representation:
<creditDefaultSwap> <generalTerms> <effectiveDate> <unadjustedDate>2004-09-22</unadjustedDate> <dateAdjustments> <businessDayConvention>NONE</businessDayConvention> </dateAdjustments> </effectiveDate> <scheduledTerminationDate> <adjustableDate> <unadjustedDate>2009-06-20</unadjustedDate> <dateAdjustments> <businessDayConvention>NONE</businessDayConvention> </dateAdjustments> </adjustableDate> </scheduledTerminationDate> ... </generalTerms> <feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <firstPeriodStartDate>2004-09-20</firstPeriodStartDate> <firstPaymentDate>2004-12-20</firstPaymentDate> <rollConvention>20</rollConvention> <fixedAmountCalculation> <calculationAmount> <currency>EUR</currency> <amount>5000000.0</amount> </calculationAmount> <fixedRate>0.0125</fixedRate> <dayCountFraction dayCountFractionScheme="http://www.fpml.org/spec/2004/ day-count-fraction-1-0">ACT/360</dayCountFraction> </fixedAmountCalculation> </periodicPayment> </feeLeg> ... </creditDefaultSwap>
Example 12 - Periodic payments - stepping notional
A credit default swap pays 100bp every 3 months. The notional starts at 5M but steps down twice throughout the life of the deal (only the relevant portions of FpML are shown):
<feeLeg> <periodicPayment> <paymentFrequency> <periodMultiplier>3</periodMultiplier> <period>M</period> </paymentFrequency> <rollConvention>1</rollConvention> <fixedAmountCalculation> <calculationAmount> <currency>USD</currency> <amount>5000000</amount> <step> <stepDate>2002-03-01</stepDate> <stepValue>4000000</stepValue> </step> <step> <stepDate>2002-09-01</stepDate> <stepValue>3000000</stepValue> </step> </calculationAmount> <fixedRate>0.010</fixedRate> <dayCountFraction>ACT/360</dayCountFraction> </fixedAmountCalculation> </periodicPayment> </feeLeg> <protectionTerms> <calculationAmount> <currency>USD</currency> <amount>5000000</amount> <step> <stepDate>2002-03-01</stepDate> <stepValue>4000000</stepValue> </step> <step> <stepDate>2002-09-01</stepDate> <stepValue>3000000</stepValue> </step> </calculationAmount> <creditEvents> <defaultRequirement> <currency>USD</currency> <amount>10000000</amount> </defaultRequirement> ...
Example 13 - Irregular Payments, stepping notional
In this example, payments are made at irregular intervals (note that there is no June payment). Also the amount of each payment is determined based on notional that change over time:
<feeLeg> <singlePayment> <adjustablePaymentDate>2001-12-01</adjustablePaymentDate> <fixedAmount> <currency>USD</currency> <amount>230.50</amount> </fixedAmount> </singlePayment> <singlePayment> <adjustablePaymentDate>2002-03-01</adjustablePaymentDate> <fixedAmount> <currency>USD</currency> <amount>219.20</amount> </fixedAmount> </singlePayment> <singlePayment> <adjustablePaymentDate>2002-9-01</adjustablePaymentDate> <fixedAmount> <currency>USD</currency> <amount>500.00</amount> </fixedAmount> </singlePayment> <periodicPayment> <fixedAmountCalculation> <calculationAmount> <currency>USD</currency> <amount>5000000</amount> <step> <stepDate>2002-03-01</stepDate> <stepValue>4000000</stepValue> </step> <step> <stepDate>2002-09-01</stepDate> <stepValue>3000000</stepValue> </step> </calculationAmount> <fixedRate>0.010</fixedRate> <dayCountFraction>ACT/360</dayCountFraction> </fixedAmountCalculation> </periodicPayment> </feeLeg> <protectionTerms> <calculationAmount> <currency>USD</currency> <amount>5000000</amount> <step> <stepDate>2002-03-01</stepDate> <stepValue>4000000</stepValue> </step> <step> <stepDate>2002-09-01</stepDate> <stepValue>3000000</stepValue> </step> </calculationAmount> ...
The payment information that appears in the transaction supplement representation of a credit default swap index trade is expressed in FpML by using the initialPayment and periodicPayment/fixedAmountCalculation elements.
Trades on credit default swap indices generally have an upfront payment associated with them. Unlike upfront payments on credit default swap trades, the initial payment can be from either protection buyer to protection seller or from protection seller to protection buyer. To address this requirement, an additional optional element called initialPayment has been added to feeLeg in FpML 4.1. This element is intended to be used solely in the representation of a credit default swap index trade.
The structure of initialPayment can be seen in figure 6. The major difference between initialPayment and singlePayment is that initialPayment allows the specification of which party is making the payment (payerPartyReference) and which is receiving it (receiverPartyReference).
Unlike a credit default swap trade, a credit index trade has two fixed rates associated with it:
The present value of the difference between these two fixed rates is one of the two inputs to the calculation of the initial (e.g. upfront) payment. The other component is accrued interest.
Here is an example of the payment information associated with a trade and how that information appears in FpML:
<feeLeg> <initialPayment> <payerPartyReference href="partyA"/> <receiverPartyReference href="partyB"/> <paymentAmount> <currency>EUR</currency> <amount>10000</amount> </paymentAmount> </initialPayment> <periodicPayment> <fixedAmountCalculation> <fixedRate>0.0070</fixedRate> </fixedAmountCalculation> </periodicPayment> <marketFixedRate>0.0040</marketFixedRate> </feeLeg>
The paymentDelay has been added as a boolean element as part of the feeLeg construct to support the ISDA definition associated with the fixed amount:
Fixed Amount: | [Fixed Amount definition for underlying with no payment delay]/[Fixed Amount definition for underlying with payment delay] |
Parties should make a selection that is appropriate in view of the interest basis of the Reference Obligation as set out in the Underlying Instruments. The former version may be preferred if the Reference Obligation does not have a payment delay, and the latter if it is a security with a payment delay.
The schema definition states: “Applicable to CDS on MBS to specify whether payment delays are applicable to the fixed Amount. RMBS typically have a payment delay of 5 days between the coupon date of the reference obligation and the payment date of the synthetic swap. CMBS do not, on the other hand, with both payment dates being on the 25th of each month.”
The protectionTerms element, which appears in Figure 8, represents the information specified in the FloatingPayment section of the 2003 Confirmation. This is where the credit events and obligations that are applicable to the credit default swap trade are specified.
Figure 8: protectionTerms element
The only required child element of protectionTerms is calculationAmount. It represents the term Floating Rate Payer Calculation Amount in the 2003 Definitions.
In order to indicate that a particular Credit Event is applicable in an FpML credit default swap trade, an element whose name is the Credit Event it represents appears as a child of the creditEvents element. If a particular Credit Event has no attributes of its own (e.g. Bankruptcy), it appears as an element with its value set to true. On the other hand, if it does have attributes (e.g. Failure to Pay - Grace Period, Payment Requirement) then those attributes appear as child elements of the Credit Event with the "applicable" element's value set to true. If in an element doesn't appear it means that it's not applicable or its applicability is defined within the master confirmation. In general, the value set to false will be specified only in case the default in the master confirmation needs to be overridden.
In the following example, these credit events are applicable:
And these conditions to credit event notice settlement apply:
<creditEvents> <bankruptcy>true</bankruptcy> <failureToPay> <paymentRequirement> <currency>USD</currency> <amount>1000000</amount> </paymentRequirement> </failureToPay> <restructuring> <applicable>true</applicable> <restructuringType restructuringScheme = "http://www.fpml.org/spec/2003/restructuring-1-0">R</restructuringType> </restructuring> <creditEventNotice> <notifyingParty> <buyerPartyReference href = "abc"/> <sellerPartyReference href = "def"/> </notifyingParty> <publiclyAvailableInformation> <standardPublicSources> true</standardPublicSources> <specifiedNumber>2</specifiedNumber> </publiclyAvailableInformation> </creditEventNotice> </creditEvents>
Please note the following regarding the representation of the Restructuring credit event:
The legal restructuring codes are:
Five credit event elements have been added as part of the CreditEvents container in order to support cds on derivatives: failureToPayPrincipal, failureToPayInterest, distressedRatingsDowngrade, maturityExtension and writedown.
Mortgage CDS introduce the concept of floating amount events, which is not applicable to corporate CDS contracts.
The optional obligations element has a category child element that represents the Obligation Category term. The ObligationCategory type is an enumeration that consists of values representing the following categories:
ISDA published in September 2004 additional provisions for U.S. Municipal Entity as Reference Entity (see http://www.isda.org/publications/pdf/additionalprovisions.pdf) and the associated form of confirmation (see http://www.isda.org/publications/docs/municdsconfirmation.doc) introduced three additional terms which could be selected as Obligation Characteristics and Deliverable Obligation Characteristics. These were:
The confirmation implied only one can be selected at a time.
These three elements were added as boolean elements within an optional choice group to the corresponding Obligations and DeliverableObligations complex types.
Obligation Characteristics are defined in a manner similar to credit events. In other words, each Obligation Characteristic has its own element. The applicability of the characteristic is indicated by the appearance of its corresponding obligationCharactersitic element.
If settlement terms are specified in an FpML 5.2 credit default swap, then the settlement method of Physical Settlement or Cash Settlement is specified by the presence of either the physicalSettlementTerms or the cashSettlementTerms element respectively.
The physicalSettlementTerms element, which appears in Figure 8, represents the information specified in the Settlement Terms- Terms Relating to Physical Settlement section of the 2003 Confirmation.
The physicalSettlementPeriod contains one of three elements to represent the following conditions:
The optional deliverableObligations element is defined in a manner similar to the obligations element. The Deliverable Obligation Category is specified with the category element, which is of type ObligationCategory. Similar to an Obligation Characteristic, the applicability of a Deliverable Obligation Characteristic is indicated by the appearance of its corresponding element. It also bears mentioning that the applicability of Partial Cash Settlementappears as child element of the corresponding Deliverable Obligation Characteristic element.
Figure 9: physicalSettlementTerms element
The cashSettlementTerms element, which appears in Figure 10, represents the information specified in the Settlement Terms- Terms Relating to Cash Settlement section of the 2003 Confirmation. The mapping between this element and its corresponding section of the confirm is very straightforward.
Figure 10: cashSettlementTerms element
The creditDefaultSwapOption element defines the CDS option product in FpML.
The strike can be defined as spread, price or as the fixed rate.
The OptionBase type defines the schema structure associated with optionType: The type of option transaction. From a usage standpoint, put/call is the default option type, while payer/receiver indicator is used for options index credit default swaps as well as the swaptions. Straddle is used for the case of straddle strategy, which combines a call and a put with the same strike. The optionType is to be used if the underlyer does not carry any mention of the resulting trade direction as well as in the case of a straddle. The forward entry will be deprecated as part of the 5.0 version and the integration of the equity option into this schema.
Incorporates features that are not underlyer-specific and cannot be integrated as part of the OptionBase because of backward compatibility reasons with the eqd schema.
The premium construct has a similar approach to the swaption (i.e. premium based upon a premium construct), but introduces a simplified payment that does not incorporate the settlement features. In order to make this construct forward applicable to the equity options, this new SimplePayment is then extended to incorporate some premium-specific concepts that currently exist as part of the eqd schema.
There are several places in the FpML 5.2 Credit Derivatives Subschema where the element names diverge from the names used for terms in the 2003 Definitions. These names are listed in the table that appear in Figure 11.
FpML Element Name |
2003 Definitions |
Existing FpML Element |
Clarity |
sellerPartyReference |
Floating Rate Payer |
X |
X |
buyerPartyReference |
Fixed Rate Payer |
X |
X |
dateAdjustments |
Business Day, Business Day Convention |
X |
|
obligationId |
CUSIP/ISIN |
X |
|
feeLeg |
Fixed Payments |
X |
|
protectionTerms |
Floating Payment |
X |
|
calculationAmount |
Fixed Rate Payer Calculation Amount, Floating Rate Payer Calculation Amount |
X |
|
valuationDate |
Valuation Date |
X |
|
valuationTime |
Valuation Time |
X |
|
accruedInterest |
Quotations |
X |
|
excluded |
Excluded Obligations |
X |
|
excluded |
Excluded Deliverable Obligations |
X |
|
category |
Obligation Category |
X |
|
category |
Deliverable Obligation Category |
X |
|
calculationAgentPartyReference |
Calculation Agent |
X |
Figure 11: Naming differences between FpML 5.2 and the 2003 definitions (incomplete).
The table also indicates the reason why the FpML name diverges from the name used in the 2003 definitions. There are only two reasons for diverging:
The Scope of FpML 5.2 Reccomendation #2 includes redesigned FX product model developed by the Modeling Task Force (MTF) and FX Working Group to make it more consistent with other FpML product representations and to facilitate its further development. As a result of this work many of an original 4.x model’s issues were addressed:
In FpML 5.2 Reccomendation #2 the following FX products are covered:
In addition, support for the following money market instrument is also provided:
Foreign exchange single-legged instruments include spot and forwards. fxSingleLeg contains a reusable entity (FxCoreDetails.Model) that describes common components to FX spot, forward and swap legs: two instances of the exchangedCurrency component (the first currency and the second currency), an optional dealtCurrency that indicates which currency was dealt, either a single value date component for the trade or an optional value date per exchanged currency, an optional tenorPeriod that (appears in the Reporting View only) denotes the tenor on which both currencies traded will settle, a single instance of the exchangeRate component, and an optional nonDeliverableSettlement component. Note: An optional confirmationSenderPartyReference (to the party that is sending the current document as a confirmation of the trade is accommodated) has been moved out from the product economics. It will be placed at the trade level.
![]() |
|
The simple FX transaction contains two currencies which are exchanged between parties. The characteristics of each currency exchange: the currency, the amount, and optionally settlement instructions are described in the exchangedCurrency structure. An optional payment date is allowed per currency if there is a requirement to provide for date adjustments for each currency based upon business day conventions to accommodate unscheduled holidays.
![]() |
|
An optional settlementInformation structure has been included for each exchanged currency. This can be used in a variety of ways: not at all, flagging a trade for standard settlement, flagging a trade for settlement netting, or specifying the detailed settlement instructions for that particular currency flow.
![]() |
|
![]() |
If the specific settlement instruction is included, then this is broken out into correspondent, intermediary, and beneficiary information. This includes the identification of the routing mechanism (e.g., SWIFT, Fedwire, etc.) that the trade will settle via and the id and account that the trade will settle via. Routing can be handled either via purely a routing id (e.g., SWIFT code), routing details (a customer name, address, and account number), or a combination of routing id and details. The following diagrams show the correspondent, intermediary, and beneficiary structures. |
Split settlement is also accommodated. Split settlement will mean that there will be multiple beneficiaries associated with a single trade, where the payment amounts are broken down between beneficiaries. The following diagram shows how this has been modeled:
![]() |
|
The rate of exchange is required for a foreign exchange trade. The rate of exchange includes a reusable entity (QuotedCurrencyPair) that describes the underlying composition of the rate: the currencies and the method in which the rate is quoted. The actual trade rate is required, but other rate information such as spot rate, forward points and point value are also accommodated. For non-base currency trades, cross rates (or rates to base) to accommodate the currency exchange rates to cross between the traded currencies are provided for. Note: the refactored rate of exchange model has stricter grammar than FpML 4.x, which eliminates a few rules (e.g. fx-1, fx-2, fx-3, fx-28, fx-29 ).
![]() |
|
Non-deliverable settlement is catered for within the conventional FX single leg structure by including an optional non-deliverable information structure that is used to describe a particular type of FX forward transaction that is settled in a single currency (for example, a non-deliverable forward). This content identifies the agreed-upon settlement currency and describes the fixing date and time, as well as the settlement rate source that the fixing will be based upon. The non-deliverable structure is shown below.
![]() |
|
![]() |
|
![]() |
|
A foreign exchange swap is a single product that combines two trades, either spot/forward or forward/forward. (The FpML 4.x model allowed any number of exchanges but the new restricts it to just two. In the old model FX Swap was a container for other products – like a strategy. In the new model it's a single product). A standard FX swap contains only two legs, nearLeg and farLeg to indicate the value date order. There are a variety of different types of FX swaps in the marketplace: standard (round-amount) swaps, overnight swaps, unequal-sided swaps, forward-forward swaps. All of the features that are available within FxCoreDetails.Model, common components to standard FX spot and forward trades (described previously) can be utilized in describing an FX swap as well.
![]() |
|
Near and far legs are based on a new FxSwapLeg type and derived from a super type Leg from which all swap legs are extended (and is not derived from Product as in 4.x).
![]() |
|
Foreign exchange options model is completely redesigned compared to 4.x model that was very loose with too many independent optional elements. It did not enforce relationships between elements. The basic data types used for values like rates had no constraints (e.g. could be negative). The model is designed to bring related data together and many elements were renamed in line with FpML naming convention and MTF recommendations.
Foreign exchange options are now more consistent with other option products. FxOption type extends new Option base type - a type that defining the common features of options - buyer and seller model and derived from a Product type (the Option type could be used to re-factor other option types). It also includes separate exercise structures for standard European and American options.
FxOption structure now can be used for both "vanilla”, as well as for Averaging and Barriers options that are represented in fxOption as ‘features’ and not as separate products like in 4.x.
A vanilla fxOption identifies an exercise style, the put currency and amount, and call currency and amount, strike price and premium information. The premium is structured similar to an exchanged currency for a conventional FX trade, where optional settlement information for the premium can be attached. In addition, there are optional procedures associated with the exercise, a soldAs reference to allow buyer/seller perspective to be easier to derive – did I buy a put or sell a call, spotRate that this represents the current market rate for a particular currency pair. Note: quotedAs component has been removed as it was a legacy element carried through the versions and the group felt it was confusing.
![]() |
|
Fx American Exercise structure includes additional support for multipleExercise with optional limits on the notional size.
![]() |
|
![]() |
|
The 4.x FX barrier option model extended fx option product with spot rate, fx barrier and trigger payout. As part of the refactoring work, Asian and/or Barrier represented as a new features to the FxOption and not as separate products. An fxOption with barrier features - a conventional option except that it is changed in a predetermined way when the underlying trades at predetermined barrier levels. Foreign exchange barrier features defines the level and the condition for activation. A knock-in option pays nothing at expiry unless at some point in its life the underlying reaches a pre-set barrier and brings the option to life as a standard call or put. A knock-out option is a conventional option until the price of the underlying reaches a pre-set barrier price, in which case it is extinguished and ceases to exist. Barrier options have both a strike price and a barrier price.
An FxBarrierTypeEnum is used to allow for differentiation between knockin, knockout, reverse knockin, and reverse knockout options. One or more barriers are supported. The reference spot rate, while optional, is recommended, as it determines whether the option need to go up or down (or is "out-of-the-money" or "in-the-money") in order to hit the barrier. Below are the structures for an FX OTC barrier features.
![]() |
|
Foreign exchange asian features - (sometimes referred to as asian or average rate) captures the parameters for the average rate calculation. FxOption with asian feature is an option whose payout is based upon the average of the price of the underlying, typically (but not necessarily) over the life of the option. These options are popular because they are usually cheaper than conventional options because the averaging process over time reduces volatility.
FxAsianFeature includes a FX rateObservation component, a collection of specific observation dates, accompanied by a specific weighting factor and average rate options on occasion when struck already have agreed-upon rate observations in the past. FX rateObservation can be produced either as an independent representation of a series of specific observation dates, or to supplement the parametric representation of the observationSchedule (e.g., daily, 2nd Friday, etc.), utilizing the same rolling convention schemes as utilized within the interest rate derivatives area. The model is constructed as an “at-least-one-of” model which enforces the existence of observationSchedule, or rateObservation, or both. Below are the structures for an FX OTC asian feature.
![]() |
|
![]() |
|
![]() |
|
![]() |
|
The rateObservation collection is optionally accompanied by a rateObservationQuoteBasis, allowing this to be made explicit.
The following diagram shows a graphical view of a collection of specific observation dates, accompanied by a specific weighting factor and average rate options:
![]() |
|
Where the observation schedule is represented parametrically, the rateObservation series may be absent, or limited to observations which have already occurred – but now the observed rate values are accompanied by their weighting factor:
![]() |
|
A combination of an average rate and one or more barrier are supported.
The cash Settlement component specifies the currency and fixing details for cash settlement. It has the identical underlying type that is also used within FX Single leg and FX Swap products (see section 8.2.3.). This cash Settlement optional structure is produced only where it has been specified at execution time that the option wlll be settled into a single cash payment - for example, in the case of a non-deliverable option (although note, that an Fx option may be contractually cash settled, without necessarily being non-deliverable). Physical delivery means - entering into a spot transaction for currency delivered on both sides. Cash settlement means - settling into one of the option currency or quanto arrangement, and then supply FX spot rate observation and other parameters in the cash settlement block.
![]() |
|
![]() |
|
![]() |
|
The terms binary and digital are not clearly defined in the FX markets and can occasionally be synonymous. This is used to define an option that has a discontinuous payout profile. It typically pays out a fixed amount if the underlying satisfies a predetermined trigger condition or else pays nothing. Unlike the standard option, the amounts quoted are the payout amounts as opposed to a notional underlying amount. Below are the structures for FX OTC binary and digital options.
![]() |
|
Fx digital option model uses grammar to ensure triggers match the exercise style.
Digital options typically are defined as being European, meaning the observation occurs only if the spot rate trades above (or below) the trigger level on expiry date. The two examples that have been included in the specification are the digital and the range digital.
![]() |
|
![]() |
|
Binary options, on the other hand, are more like American options, meaning that the payout occurs if the spot rate trades through the trigger level at any time up to and including the expiry date. The four examples that have been included in the specification are the one-touch, no-touch, double one-touch, and double no-touch binary options.
![]() |
|
![]() |
|
The term deposit is an agreement between two parties to enter into a financial contract. Similar to a forward rate agreement, a term deposit is contained within a single component and contains no interim interest payments. It is an on-balance sheet transaction that pays interest at maturity based upon an agreed interest rate. While the term deposit instrument is technically an interest rate product, it is included within the FX section of FpML because many institutions that utilize FX transactions also conduct short-term deposits in their respective portfolios to fund foreign currency requirements.
Although there are a number of structured deposits that are occasionally transacted in the marketplace, including deposits with amortizing structure, rate set schedules, and periodic interest payment or interest recapitalization schedules, or even deposits that are denominated in one currency but pay interest in another currency, those types of transactions represent a significant minority of the number of deposits dealt in the wholesale financial marketplace. Therefore, the term deposit structure is intentionally very simple to accommodate the simple yet highly liquid deposit instruments.
The fixed interest rate + the foreign exchange option that can provide a higher rate of return become increasingly popular. These products are confirmed as a single trade which combines deposit and option data attributes. In FpML 5.1, a dual currency option has been modeled as a ‘feature’ that is embedded into a term deposit that causes the payout to be in a second currency.
![]() |
Note that both the start date and maturity date of the term deposit is negotiated upfront and are typically of short duration, so the dates of these instruments are fixed. Any unforeseen holidays will generally cause for renegotiation of the contract. Therefore there are no allowances for date adjustments. |
![]() |
|
The variants of main Term Deposit product are represented in the redesigned model as term deposit features (e.g. Dual Currency feature). There are other variants that could be added (e.g. deposit taker can decided interest and principal payment currency).
Dual Currency Term Deposits is a term deposit with an embedded option that causes the payout to be in a second currency. The fixed interest rate + the foreign exchange option can provide a higher rate of return. These products are confirmed as a single trade which combines deposit and option data attributes which has been modeled as a ' features' that can be added to a term deposit. Element ‘ dualCurrency' of type 'DualCurrencyFeature' represents Dual Currency Deposit using the 'termDeposit' product's 'features', instead of the 'strategy' like in 4.x model ( [termDeposit] and [fxSimpleOption] products).
![]() |
|
One or more financial instruments, of any sort that are supported by the FpML specification, can be combined to form what is called a strategy. This can include various packages of the same or different asset classes in a single trade. Typical examples of this would include option packages (e.g., straddles, strangles) or a delta hedge (FX OTC option with spot risk hedged by FX spot deal). Additionally, other asset classes can be combined in a strategy (e.g., interest rate swap with FX, etc.).
The EQD Products Working Group has extended the FpML standard to cover the following Equity Derivative products
In FpML version 3.0 the equityOption component was defined to describe "vanilla" options with the following characteristics:
FpML 4.0 extended this component to encompass more exotic types of options, including:
FpML 4.1 introduced additional components for both "short form" transacation supplement and broker equity option representations, and a "long form" Equity Forward. All long and short form instances are derived by extension from long and short form base types:
these components provide support for:
Many of the above can be combined through the use of a single component architecture that has a number of optional features. Compound options (such as Butterfly and Straddle structures) can be represented by combining two or more equityOption components in a Strategy component. Simple strike or calendar spread strategies can be represented using the Strategy Feature component.
Through a combination of derivation by extension, and composing the available features, the vast majority of equity option structures that are used between wholesale market counterparties can be represented in FpML.
The product architecture draws directly on ISDA's 1996 and 2002 definitions for equity derivatives. Wherever possible the terminology and practice of the ISDA definitions has been adopted to ensure consistency between traditional and FpML contract representations.
![]() |
brokerEquityOption component implements the work of the ISDA Broker Standardization Subgroup by providing a short form representation suitable for use in broker confirmations. Support for the simple strategies Strike Spread and Calendar Spread is provided by strategyFeature. |
![]() |
equityForward component implements ISDA 2002 Equity Derivative Long Form Forward. |
![]() |
In the equityOption component buyerPartyReference and sellerPartyReference are pointer style references to Party components that specify the option buyer and seller respectively. The type of the option (call or put) is specified in optionType. The effective date for a forward starting option is specified in equityEffectiveDate |
![]() |
equityOptionTransactionSupplement implements Equity Derivative Transaction Supplements by providing a short form representation for use in trades governed by a Master Confirmation Agreement. |
The underlyer of an equity option may be either a single underlyer, or basket, specified using the underlyer component specified below
The strike is expressed either as a price (strikePrice) or as a percentage ( strikePercentage) of the forward starting spot price. An optional Currency element caters for the case where the strike price is expressed as a monetary amount, rather than as a level.
The numberOfOptions element specifies the number of options in the option transaction. The optionEntitlement element specifies the number of shares per option. The number of options, strike price and notional are linked by the equation:
notional amount = number of options x option entitlement x strike price
Provided that two of notional amount, number of options and option entitlement are specified, then the third may be omitted.
spotPrice is the price per share, index or basket observed on the trade or effective date. It is only used for forward starting options.
The exercise provisions for the option are specified in the equityAmericanExercise, equityEuropeanExercise, and equityBermudaExercise style components. The equity exercise components are described in more detail below.
Quanto and Composite options are handled using the FxFeature Component.
Where necessary many other non-vanilla features are specified in the optional feature component. This component is described in more detail below.
The EquityPremium component specifies the amount and timing of the premium payment that is made for the equity option. It is described in more detail below.
Where the underlying is shares; the ExtraordinaryEvents component specifies marketevents affecting the issuer of those shares that may require the terms of the transaction to be adjusted. The MethodOfAdjustmentEnum component specifies how adjustments will be made to the contract should one or more of the extraordinary events occur.
![]() |
The underlyer component specifies the asset(s) on which the option is granted, which can be either on either a singleUnderlyer or basket, and consist of equity, index, or convertible bond components, or some combination of these The description element is used to provide a free-form text description of the asset, whereas instrumentId contains a short-form, unique identifier (e.g. ISIN, CUSIP) for the asset. At least one instrumentId must be present. The exchangeId element contains a short form unique identifier for an exchange. If omitted then the exchange shall be the primary exchange on which the underlying is listed. The relatedExchangeId element contains a short form unique identifier for a related exchange. If omitted then the exchange shall be the primary exchange on which listed futures and options on the underlying are listed. The clearanceSystem element contains the identity of the clearance system to be used. If omitted, the principal clearance system customarily used for settling trades in the relevant underlying shall be assumed. |
![]() |
FpML supports three styles of equity option: European, American and Bermudan. For consistency of representation with interest rate derivatives each of these styles is represented using its own component. Each of these components is described more fully below. The automaticExercise element contains a boolean value. If true then each option not previously exercised will be deemed to be exercised at the expiration time on the expiration date without service of notice unless the buyer notifies the seller that it no longer wishes this to occur. The EquityValuation component specifies the date and time on which the option is valued. The element valuationDateis assumed to have the meaning as defined in the ISDA 2002 Equity Derivatives Definitions. It enables the valuationDate to be expressed in relation to some other date defined in the document (the anchor date), where there is the opportunity to specify a combination of offset rules. This component will typically be used for defining the valuation date in relation to the payment date, as both the currency and the exchange holiday calendars need to be considered. Alternatively, valuationDate is a date that shall be subject to adjustment if it would otherwise fall on a day that is not a business day in the specified business calendar locations, together with the convention for adjusting the date. The element valuationDate specifies the interim equity valuation dates of the swap. The valuationDate can be specified as a series of dates that shall be subject to adjustment if they would otherwise fall on a day that is not a business day in the specified business calendar locations, together with the convention for adjusting the date, otherwise, the valuationDate is a series of dates specified as some offset to other dates (the anchor dates). The element valuationTimeType is the time of day at which the calculation agent values the underlying, for example the official closing time of the exchange. The element valuationTime specifies the time of day at which the calculation agent values the underlying. The futuresPriceValuation element contains a boolean value to indicate whether or not the official settlement price as announced by the related exchange is applicable, in accordance with the ISDA 2002 definitions. The optionsPriceValuation element contains a boolean value to indicate whether or not the the official settlement price as announced by the related exchange is applicable, in accordance with the ISDA 2002 definitions.. The EquityExerciseValuationSettlement component specifies equity option contractural settlement information. The settlement date specifies when the option is to be settled relative to the valuation date. If the settlement date is not specified explicitly then settlement will take place on the valuation date. The settlementType component is used to specify whether the option is settled in cash or physically. The settlementPriceSource element specifies the source from which the settlement price is to be obtained, e.g. a Reuters page, Prezzo di Riferimento, etc. The settlementType element shows how the transaction is to be settled when it is exercised. The values comes from list: Cash, Election, Physical. |
![]() |
The sub-components of the EquityEuropeanExercise component specify the date and time when the option will expire. The element expirationDate enables the expiration date to be expressed as adjustable or relative date to some other event, such as the close of business for the exchange. The element equityExpirationTimeType is the time of day at which the equity option expires, for example the official closing time of the exchange. |
![]() |
The commencementDate and expirationDate are used to specify the period during which the option may be exercised (more than once if permitted by the equityMultipleExercise component). The option may be exercised on any business day in this period up to the latest time specified for exercise. The element latestExerciseTimeType is the latest time of day at which the equity option can be exercised, for example the official closing time of the exchange. The element equityExpirationTimeType is the time of day at which the equity option expires, for example the official closing time of the exchange. |
![]() |
The commencementDate and expirationDate are used to specify the period during which the option may be exercised (more than once if permitted by the equityMultipleExercise component). The option may be exercised on any of the days in the list bermudaExerciseDates up to the latestExerciseTime specified for exercise. The element latestExerciseTimeType The latest time of day at which the equity option can be exercised, for example the official closing time of the exchange. The element equityExpirationTimeType is the time of day at which the equity option expires, for example the official closing time of the exchange. |
![]() |
A group containing Swap and Derivative features. |
![]() |
equityOptionFeatures has been re-named equityFeatures (type OptionFeatures). As part of SOTF remodeling work, equity option feature' s content is accessible in the Feature.model through the complex type OptionFeatures. Four types of option features are catered for: asians, barriers, knocks, and pass through payments. All of these are path-dependent options. Asian features are described below. Barriers may be caps or floors; knocks may be knock-ins or knock-outs - these share a common architecture that is described below. A binary option (also known as a digital option) is a special case of a barrier where the payout is specified to be a fixed amount rather than a percentage of the value of the underlying on the date that the option is triggered. |
![]() |
An asian option is one in which an average price is used to derive the strike price ("averaging in") or the expiration price ("averaging out") or both. The type of averaging is specified in the averagingInOut element. The period over which the averaging is calculated is specified in the component averagingPeriodIn or averagingPeriodOut as appropriate. Both components have the same structure. The period is specified either as a calculation, using one or more schedule components (which permits specifications such as every Friday from and including 24 May 2002 to and including 22 November 2002), and/or as a list of explicit dates and times, using the averagingDateTimes component. It is permissible to use the list of dates and times to specify averaging points that are additional to those derived from the calculation rule specified in schedule components. In the event that any of the dates is not a business day then it is assumed that it will be rolled forward to the next business day in accordance with ISDA convention. The marketDisruption element specifies the action to be taken if it is not possible to obtain a price on one of the days used for averaging. |
![]() |
A barrier option is one in which, if the option expires in the money, an additional payment will occur. With a barrier cap the additional payment will be made if the trigger level is approached from below, whereas with a barrier floor the additional payment will be made if the trigger level is approached from above. Knock options are of two types. A knock-in option does not come into effect until the trigger level has been reached, if it is never reached then the option expires worthless. Conversely, a knock-out option expires immediately the trigger level is reached. |
![]() |
A common structure is used to specify barrier caps, barrier floor, knock-ins and knock-outs. The diagram shows the barrierCap structure. The dates on which the underlying is valued to test for the occurrence of the trigger event are either expressed in one or more schedule components and/or as a list of explicit dates, using the triggerDates component. It is permissible to use the list of dates to specify trigger dates that are additional to those derived from the calculation rule specified in schedule components. In the event that any of the dates is not a business day then it is assumed that it will be rolled forward to the next business day in accordance with ISDA convention. The trigger component specifies that the trigger event either as a level or as a levelPercentage (of the strike). The optional featurePayment component specifies a payment to be made if the trigger event occurs. The payment date can be expressed either as an explicit date or as relative to some other date, such as the trigger date or the contractual expiry date. |
![]() |
|
![]() |
This structure supports pass through payments from underlyers, such as dividend payments from equity underlyers. The structure is designed to support single options and baskets of options. |
Example of pass through feature in a basket
<passThrough> <passThroughItem> <payerPartyReference href="PartyA"/> <receiverPartyReference href="PartyB"/> <underlyerReference href="AholdEquity"/> <passThroughPercentage>0.80</passThroughPercentage> </passThroughItem> <passThroughItem> <payerPartyReference href="PartyA"/> <receiverPartyReference href="PartyB"/> <underlyerReference href="RoyalDutchEquity"/> <passThroughPercentage>1.20</passThroughPercentage> </passThroughItem> </passThrough>
This feature was also considered as a fully formed hybrid product, which could be characterised as a combination of an equity option, however the consensus opinion was that pass through was a simple feature, which could be added to the existing option feature block.
![]() |
Container for Dividend Adjustment Periods, which are used to calculate the Deviation between Expected Dividend and Actual Dividend in that Period. |
![]() |
FxFeature specifies the reference currency, either a Composite or Quanto feature: |
![]() |
A type for definining equity option simple StrikeSpread or CalendarSpread strategy features. |
![]() |
The EquityPremium component specifies the amount and timing of the premium payment that is made for the equity option. payerPartyReference and receiverPartyReference are pointer style references to Party components that specify the payer and receiver of the premium respectively. In FpML the premium amount can be expressed in a number of ways: as a monetary amount ( paymentAmount), as a price per option ( pricePerOption) or as a percentage of notional ( percentageOfNotional) - if more than one method is used then they must be mutually consistent. There are circumstances in which no premium would be specified, for example if the trade formed part of a put/call combo structure. The swapPremium element holds a boolean value that, if "true" specifies that the premium is to be paid in the style of payments under an interest rate swap contract. |
When a date specified in an equity option contract falls on a non-business day then it may be necessary to adjust it to be a business day. At the time the contract is agreed it is not always possible to determine whether or not a particular date in the future will be a business day.
The meaning of "business day" varies according to the context in which it is used. When the context is the payments of monetary amounts then the rules for adjustment according to currency business days apply, and the equity option product architecture uses the same AdjustableOrRelativeDate component ( or derivations ) as the interest rate and foreign exchange products.
However, when the context is the valuation or settlement of equities or equity indices then the term "business day" means "exchange business day". In this case the equity option product architecture specifies the use of unadjusted dates with the adjustment rules being implicitly inherited from the ISDA definitions.
FpML provides generic Return Swaps support including "long form" Equity Swap representations, as well as Total Return Swaps. A separate product element called equitySwapTransactionSupplement supports "short form" Equity Swap Transaction Supplement.
Return-type Swaps have 1-to-many Legs, all of which must be derived from the ReturnSwapLeg type. Instances of Legs are returnLeg, interestLeg. Other Leg types may be derived from ReturnSwapLeg at will, to allow for private extensions to support whatever type of Generic Return Swap is desired.
The scope of this FpML representation for return swaps is to capture the following types of swaps that have equity-related underlyers:
Extraordinary Events terms have been incorporated, to take into consideration the release of the 2002 ISDA Definitions for Equity Derivatives.
Trigger swaps, in which equity risk morphs into a fixed income risk once a certain market level is reached, may be supported in a subsequent release.
FpML Return Swaps Product Architecture amends the previous Equity Swaps Product Architecture since it describes a more generic representation of return type swaps, not only equities. The generic representation includes the product coverage introduced in previous versions of FpML to support full conformance with ISDA 2002 Equity Derivative Definitions, intial and final stubs, and Equity Swap Transaction Supplement. In addition, it supports the representation of Total Return Swaps.
This document provides an in-depth review of the technical architecture of the FpML Return Swap subschema. The scope as well as the current limitations of this schema, which will be addressed through a next release, are described in the first section of this document.
The FpML representation of the returnSwap relies on the structures that are presented in the figure below:
![]() |
Swaps may have 1-to-many Legs, the principal components of the return swap schema are as follows: |
![]() |
equitySwapTransactionSupplement implements Equity Swap Transaction Supplements by providing a short form representation for use in trades governed by a Master Confirmation Agreement. Due to the wide scope of the Equity Swap Transaction Supplement, it has not been possible to make the equitySwapTransactionSupplement component as compact as equityOptionTransactionSupplement The various sections below detail each of these five structures of the equity leg of the swap. |
The figure 2 presents the structure of the return leg of the swap, which has 10 categories of components:
![]() |
Figure 2: The structure of the return leg. These categories of components are described through the next few pages. They are the following: |
The identification of the payer and receiver party of the equity leg is done similarly to the other types of swaps, through the payerPartyReference and the receiverPartyReference data elements.
The effective date and the termination date are similarly defined for both the interest and equity leg of the trade. Each of these dates can be specified either in reference to a date defined somewhere else in the document (using the relativeDate subcomponent), or as a specific date (using the adjustableDate subcomponent).
The figure 3 presents the effective date as an example of how these two components are structured:
![]() |
Figure 3: The effectiveDate. |
The example 1 below presents how these schema structures are used for defining the effective date of the equity swap as a function of the trade date (the elapse time between these being the settlement cycle of the underlying security assets) and the termination date as a function of the last payment of the swap. This corresponds indeed to the most frequent practice for confirming equity swaps.
Example 1 - Effective date as a function of the trade date and effective date as a function of the last payment date:
<effectiveDate id="EffectiveDate"> <relativeDate> <periodMultiplier>3</periodMultiplier> <period>D</period> <dayType>ExchangeBusiness</dayType> <businessDayConvention>NotApplicable</businessDayConvention> <dateRelativeTo href="TradeDate"/> </relativeDate> </effectiveDate> <terminationDate id="TerminationDate"> <relativeDate> <periodMultiplier>0</periodMultiplier> <period>D</period> <businessDayConvention>NotApplicable</businessDayConvention> <dateRelativeTo href="FinalEquityPaymentDate"/> </relativeDate> </terminationDate>
The underlyer component provides a detailed description of the characteristic of the underlying asset(s). Seven types of asset classes have been included as part of this release, of which six are actually used by the equity swap. These six underlying types are the convertible bond, the equity, the exchange-traded fund, the future contract, the index and the mutual fund. The seventh one is the bond, that is used by the schema for credit derivatives and will be later used by the schema for trigger swaps once it will be released. Each of these asset types has been defined by extending a component named underlyingAsset that contains some key attributes that are common across most of the underlyers: the identifier, the descriptive name, the currency of denomination, the stock exchange on which the underlyer is listed and the clearance system. With the exception of the identifier element, all these attributes are optional.
Thereafter is the description of these six types of underlyers that are used by the schema for equity swaps. These diagrams also present the respective schemes that have been associated with these components. Not surprisingly, the exchangeId is used quite often.
![]() |
Figure 4: The equity underlyer extends the underlyingAsset component by adding two (optional) elements: the related exchange and the options exchange. |
![]() |
Figure 5: The index underlyer extends the underlyingAsset component by adding two (optional) elements: the related exchange and the identifier of the reference future contract that may have been referenced as part of the swap contract. |
![]() |
Figure 6: The mutual fund underlyer extends the underlyingAsset component by adding two (optional) elements: the indicator of whether the fund is open or closed and the name of the fund manager. |
![]() |
Figure 7: The exchange-traded fund underlyer extends the underlyingAsset component by adding three (optional) elements: the related exchange, the options exchange and the name of the fund manager. |
![]() |
Figure 8: The future contract underlyer extends the underlyingAsset component by adding four (optional) elements: the related exchange, the options exchange, the contract multiplier and the specific reference of the future contract that is used as part of the swap. |
![]() |
Figure 9: The convertible bond underlyer extends the underlyingAsset component through six elements that characterize the instrument (the related exchange, the issuer name, the coupon rate, the maturity date, the par value and the face amount); in addition, the underlyingEquity component describes the equity underlyer in which the convertible bond can be turned into. |
![]() |
Figure 10: The commodity underlyer extends the IdentifiedAsset component and may be used in the same way as all other FpML underlyers. |
These various types of underlyers can be combined through two different structures, depending upon whether the swap has only one underlyer or has multiple underlying assets: the singleUnderlyer structure or the basket structure. The figure 11 below provides a high-level view of these two alternative structures, which are detailed in the following paragraphs.
![]() |
Figure 11: Overview of the two alternative types of underlying structured: the singleUnderlyer and the basket. |
In the case of a single underlyer, the singleUnderlyer component specifies the number of open units, the description of the underlyer (through the underlyingAsset substitution group) and the dividendPayout ratio (which is defined through the underlyer component rather than the return component for reasons that are related to the basket, and that are explained below). It should be noted that the eleven members of the underlyingAsset substitution group (The bond, convertibleBond, cash, commodity, equity, exchangeTradedFund, future, index, loan, mortgage, mutualFund) do not appear in this diagram: only the basis elements are represented.
![]() |
Figure 12: The single underlyer. |
The basket component is to be applied in the case where there are several underlyers, which are then specifically described through the basketConstituent component. This basket component is structured as follows: an identification of the number of basket units (typically, one) and a description of each of the basket constituents (through a one-to-many relationship).
![]() |
Figure 13: The basket. |
The structure that describes the basket is quite more complex than the one that specifies the single underlyer. Besides defining the number of basket units (typically, one), the structure specifies each of the basket constituents through an asset description, a constituent weight, a dividend payout ratio, a price and a notional description. The underlyingAsset component having been already described, the points below focus on the four latter components:
As an illustration of this structure of the basket component and an introduction to the upcoming developments that are devoted to the valuation, the example below presents the case of a basket swap which underlyers components are listed in various currencies.
Example 2 - Basket swap with underlyers listed in different currencies:
<underlyer> <basket> <openUnits>1</openUnits> <basketConstituent> <equity> <instrumentId instrumentIdScheme="RIC">TIM.MI</instrumentId> <description>Telecom Italia Mobile spa</description> <currency>EUR</currency> <exchangeId exchangeIdScheme="http://www.fpml.org/schemes/4.0/exchangeId">Milan Stock Exchange</exchangeId> </equity> <constituentWeight> <openUnits>783000</openUnits> </constituentWeight> <dividendPayout> <dividendPayoutRatio>85</dividendPayoutRatio> </dividendPayout> <underlyerPrice> <grossPrice> <currency>EUR</currency> <amount>4.14</amount> <priceExpression>AbsoluteTerms</priceExpression> </grossPrice> <netPrice> <currency>USD</currency> <amount>4.182</amount> <priceExpression>AbsoluteTerms</priceExpression> </netPrice> </underlyerPrice> <underlyerNotional> <currency>USD</currency> <amount>3274506</amount> </underlyerNotional> </basketConstituent> <basketConstituent> <equity> <instrumentId instrumentIdScheme="RIC">VOD.L</instrumentId> <description>Vodafone Group</description> <currency>GBP</currency> <exchangeId exchangeIdScheme="http://www.fpml.org/schemes/4.0/exchangeId">London Stock Exchange</exchangeId> </equity> <constituentWeight> <openUnits>24860</openUnits> </constituentWeight> <dividendPayout> <dividendPayoutRatio>85</dividendPayoutRatio> </dividendPayout> <underlyerPrice> <grossPrice> <currency>GBP</currency> <amount>110.00</amount> <priceExpression>AbsoluteTerms</priceExpression> </grossPrice> <netPrice> <currency>USD</currency> <amount>165.00</amount> <priceExpression>AbsoluteTerms</priceExpression> </netPrice> </underlyerPrice> <underlyerNotional> <currency>USD</currency> <amount>4101900</amount> </underlyerNotional> </basketConstituent> </basket> </underlyer>
Equity Options and Return Swaps both now use a common EquityValuation type.
![]() |
Figure 14: The EquityValuation type, that specifies the valuation terms of the return leg of the swap. |
The following developments present in more details the four main structures that are part of ReturnLegValuation type: the initialPrice, the valuationPriceInterim, the valuationPriceFinal and the paymentDates (old equityPaymentDates). Even if these components can appear quite complex at first glance, the objective here is to outline how they have been based upon a limited set of 'building blocks' that are systematically reused.
![]() |
|
The purpose of the initialPrice component is to specify the initial price for the underlyer of the trade (equity, bond, index). In most of the cases, this price will be known. There can however be certain cases, such as a forward trade, where the actual price is not known on trade date and where the trade confirmation will rather specify the terms according to which this initial price will be determined at a later point.
The diagrams 15 and 16 below present the two sets of structures that are used for specifying these various cases: one (mandatory) structure that specifies the price and one (optional) structure that specifies the dates.
![]() |
Figure 15: The initialPrice component of the valuation, with a specific focus on the part of the structure that specifies the price. |
Three possible ways for defining the price of the underlyer are available: as an actual price and currency ( EquityPrice.model), in reference to an amount defined somewhere else in the document using the amountRelativeTo element, or by specifying a specific determination method using the determinationMethod component. Commissions can be associated with each of these three alternative definitions. For addressing the requirements related to composite FX swaps, the possibility is also provided, through the fxConversion component, to explicitly define the FX rate that has been used to convert the price from its listing currency to the reference currency of the swap.
Considering that in the vast majority of the cases the initial price is defined as an actual price and currency, the examples below will focus on detailing the various options available for specifying such actual price. The other possibilities offered through the Price type will be further detailed through the interim and final price components.
Example 3 - Specification of an initial price as an actual price that does not include commissions and FX terms:
<initialPrice> <netPrice> <currency>USD</currency> <amount>37.44</amount> <priceExpression>AbsoluteTerms</priceExpression> </netPrice> </initialPrice>
Example 4 - Specification of an initial price as an actual price that also includes commissions and FX terms:
<initialPrice> <commission> <commissionDenomination>BPS</commissionDenomination> <commissionAmount>5</commissionAmount> </commission> <grossPrice> <currency>CAD</currency> <amount>113228777</amount> <priceExpression>AbsoluteTerms</priceExpression> </grossPrice> <netPrice> <currency>USD</currency> <amount>84089141</amount> <priceExpression>AbsoluteTerms</priceExpression> </netPrice> <fxConversion> <fxRate> <quotedCurrencyPair> <currency1>CAD</currency1> <currency2>USD</currency2> <quoteBasis>Currency1PerCurrency2</quoteBasis> </quotedCurrencyPair> <rate>1.34665</rate> </fxRate> </fxConversion> </initialPrice>
Example 5 - Specification of an initial price as a percentage of the notional, without commissions nor FX terms:
<initialPrice> <netPrice> <amount>94.80278</amount> <priceExpression>PercentageOfNotional</priceExpression> </netPrice> </initialPrice>
![]() |
Figure 16: The initialPrice component of the valuation, with a specific focus on the part of the structure that specifies the date and time of the initial valuation. |
![]() |
|
![]() |
|
This structure that specifies the date and time of the valuation will typically not be used as part of the definition of the initial price. This is because in most cases the initialPrice component specifies the price of the underlyer that is used as the initial reference point for the swap, and there is no need to refer to any specific date or time. Considering that this 'building block is defined and used in a quite similar same way for the interim and final price, it will be detailed through these latter.
The purpose of the valuationPriceInterim component is to specify the interim price(s) for the equity underlyer of the trade. This is an optional component, as it does not apply in the case of a bullet swap, where there is no reset date. Its other specificity vis-a-vis the initial and final valuation components it that this components can hold an array of valuation dates, as opposed to only one valuation date.
Similarly to the initialPrice component, the diagrams 16 and 17 below present the two sets of structures that are part of the valuationPriceInterim component: one structure that specifies the price and one structure that specifies the valuation dates. Both structures are mandatory.
![]() |
Figure 17: The valuationPriceInterim component of the valuation, with a specific focus on the part of the structure that specifies the price. |
![]() |
Figure 18: The valuationPriceInterim component of the valuation, with a specific focus on the part of the structure that specifies the dates. |
![]() |
|
![]() |
|
The example 6 below is very illustrative of the typical use of the valuationPriceInterim structure for representing the interim valuation prices of an equity swap:
Example 6 - Typical example of how the valuationPriceInterim component is used to specify the the interim valuation:
<valuationPriceInterim> <determinationMethod>ValuationTime</determinationMethod> <valuationRules> <valuationDates id="InterimValuationDate"> <adjustableDates> <unadjustedDate>2001-10-12</unadjustedDate> <unadjustedDate>2001-11-13</unadjustedDate> <unadjustedDate>2001-12-12</unadjustedDate> <unadjustedDate>2002-01-14</unadjustedDate> <unadjustedDate>2002-02-12</unadjustedDate> <unadjustedDate>2002-03-12</unadjustedDate> <unadjustedDate>2002-04-12</unadjustedDate> <unadjustedDate>2002-05-13</unadjustedDate> <unadjustedDate>2002-06-12</unadjustedDate> <unadjustedDate>2002-07-12</unadjustedDate> <unadjustedDate>2002-08-12</unadjustedDate> <dateAdjustments> <businessDayConvention>NotApplicable</businessDayConvention> </dateAdjustments> </adjustableDates> </valuationDates> <valuationTimeType>Close</valuationTimeType> </valuationRules> </valuationPriceInterim>
The schema also provides the ability to address some more unusual situations. One of these relates to the case where the valuation dates are defined as a function of the equity payment dates. In such case, a specific consideration needs to be given to the various types of holidays, i.e. banking holidays versus exchange holidays. The relativeDateSequence component does provide such ability to define a date as a function of another date by applying a defined sequence of offsets, as opposed to only one offset as in the case of the relativeDate component. This case is illustrated in the example 7 below.
Example 7 - The interim valuation dates are defined in relation to the payment dates:
<valuationPriceInterim> <valuationRules> <valuationDates id="InterimValuationDates"> <relativeDateSequence> <dateRelativeTo href="InterimEquityPaymentDate"/> <!--The first offset is 2 exchange business days prior to the payment date.--> <dateOffset> <periodMultiplier>-2</periodMultiplier> <period>D</period> <dayType>CurrencyBusiness</dayType> <businessDayConvention>FOLLOWING</businessDayConvention> <sequence>1</sequence> </dateOffset> <!--The second offset is 1 banking business day prior to the payment date.--> <dateOffset> <periodMultiplier>-1</periodMultiplier> <period>D</period> <dayType>ExchangeBusiness</dayType> <businessDayConvention>NotApplicable</businessDayConvention> <sequence>2</sequence> </dateOffset> <businessCenters id="PrimaryBusinessCenter"> <businessCenter>USNY</businessCenter> </businessCenters> </relativeDateSequence> </valuationDates> </valuationRules> </valuationPriceInterim>
The example 8 below provides another example of an unusual definition of the interim valuation date. Here, the valuation dates are defined through a rule-based schedule, which corresponds to the market practice typically in use for fixed income swaps. This practice is however used only rarely in the case of equity derivatives.
Example 8 - The interim valuation dates are defined through a rule-based schedule:
<valuationPriceInterim> <determinationMethod>ValuationTime</determinationMethod> <valuationRules> <valuationDates id="InterimValuationDates"> <periodicDates> <calculationStartDate> <adjustableDate> <unadjustedDate>2002-04-10</unadjustedDate> <dateAdjustments> <businessDayConvention>NotApplicable</businessDayConvention> </dateAdjustments> </adjustableDate> </calculationStartDate> <calculationPeriodFrequency> <periodMultiplier>1</periodMultiplier> <period>M</period> <rollConvention>10</rollConvention> </calculationPeriodFrequency> <calculationPeriodDatesAdjustments> <businessDayConvention>NotApplicable</businessDayConvention> </calculationPeriodDatesAdjustments> </periodicDates> </valuationDates> <valuationTimeType>Close</valuationTimeType> </valuationRules> </valuationPriceInterim> <valuationPriceFinal> <determinationMethod>HedgeExecution</determinationMethod> <valuationRules> <valuationDate id="FinalValuationDate"> <adjustableDate> <unadjustedDate>2003-03-12</unadjustedDate> <dateAdjustments> <businessDayConvention>NotApplicable</businessDayConvention> </dateAdjustments> </adjustableDate> </valuationDate> </valuationRules> </valuationPriceFinal>
The purpose of the valuationPriceFinal component is to specify the final price for the equity underlyer of the trade.
In a similar way than what has been previously detailed for the components that specify the initial and the intermediate valuations, the diagrams 18 and 19 below respectively detail the structure that specifies the final price and the structure that specifies the date on which this valuation will take place. Both structures are mandatory.
![]() |
Figure 19: The valuationPriceFinal component of the valuation, with a specific focus on the part of the structure that specifies the price. |
![]() |
Figure 20: The valuationRules component of the valuation, with a specific focus on the part of the structure that specifies the final valuation date. |
![]() |
|
![]() |
|
It can be noted at this point that the only difference between this valuationPriceFinal component and the valuationPriceInterim component is that only one final valuationDate can be specified, while the possibility is provided to define several interim valuationDates. The equity valuationDates component used for specifying the interim valuation dates has then been substituted with the equity valuationDate component, which allows only one date.
The example 8 below presents the most common use of this structure, a specific final valuation date being defined while the final price is specified through the use of the determinationMethod element. Of course, if the interim valuation dates would be defined in reference to the payment dates (as illustrated in the example 7) or through a rule-based schedule (example 8), such method would also be applied for defining the final valuation date.
Example 9 - The most common definition of the final valuation:
<valuationPriceFinal> <commission> <commissionDenomination>BPS</commissionDenomination> <commissionAmount>60</commissionAmount> </commission> <determinationMethod>HedgeExecution</determinationMethod> <valuationRules> <valuationDate id="FinalValuationDate"> <adjustableDate> <unadjustedDate>2004-02-03</unadjustedDate> <dateAdjustments> <businessDayConvention>NotApplicable</businessDayConvention> </dateAdjustments> </adjustableDate> </valuationDate> </valuationRules> </valuationPriceFinal>
The last structure that participates in the definition of the equity swap valuation is the schedule of equity payment dates. These dates are specified through the equity paymentDates component. The structure of this component is threefold:
![]() |
Figure 21: The paymentDates (old equityPaymentDate) component, that specifies the schedule of payment dates. |
![]() |
|
![]() |
|
The structure of the paymentDatesInterim (old equityPaymentDatesInterim) and the paymentDateFinal (equityPaymentDateFinal) is very similar. The only difference is that several dates can be specified in the first case, and only one date in the latter.
As a result, both the interim and the final payment dates can be defined either as a schedule of dates or in reference to a date defined somewhere else in the document. This latter approach is used most often, with the payment dates being specified as one settlement cycle after the valuation date to which they relate. This is illustrated through this final example relating to the valuation component, which provides a complete view of how the valuation dates are defined as an actual schedule of dates to which the payment dates refer.
Example 10 - Equity swap which payment dates are defined in relation to the schedule of valuation dates:
<rateOfReturn> <initialPrice> <netPrice> <currency>USD</currency> <amount>37.44</amount> <priceExpression>AbsoluteTerms</priceExpression> </netPrice> </initialPrice> <notionalReset>true</equityNotionalReset> <valuationPriceInterim> <determinationMethod>ValuationTime</determinationMethod> <valuationRules> <valuationDates id="InterimValuationDate"> <adjustableDates> <unadjustedDate>2001-10-12</unadjustedDate> <unadjustedDate>2001-11-13</unadjustedDate> <unadjustedDate>2001-12-12</unadjustedDate> <unadjustedDate>2002-01-14</unadjustedDate> <unadjustedDate>2002-02-12</unadjustedDate> <unadjustedDate>2002-03-12</unadjustedDate> <unadjustedDate>2002-04-12</unadjustedDate> <unadjustedDate>2002-05-13</unadjustedDate> <unadjustedDate>2002-06-12</unadjustedDate> <unadjustedDate>2002-07-12</unadjustedDate> <unadjustedDate>2002-08-12</unadjustedDate> <dateAdjustments> <businessDayConvention>NotApplicable</businessDayConvention> </dateAdjustments> </adjustableDates> </valuationDates> <valuationTimeType>Close</valuationTimeType> </valuationRules> </valuationPriceInterim> <valuationPriceFinal> <determinationMethod>HedgeExecution</determinationMethod> <valuationRules> <valuationDate id="FinalValuationDate"> <adjustableDate> <unadjustedDate>2002-09-24</unadjustedDate> <dateAdjustments> <businessDayConvention>NotApplicable</businessDayConvention> </dateAdjustments> </adjustableDate> </valuationDate> </valuationRules> </valuationPriceFinal> <paymentDates id="EquityPaymentDate"> <paymentDatesInterim id="InterimEquityPaymentDate"> <relativeDates> <periodMultiplier>3</periodMultiplier> <period>D</period> <dayType>CurrencyBusiness</dayType> <businessDayConvention>FOLLOWING</businessDayConvention> <businessCenters id="PrimaryBusinessCenter"> <businessCenter>USNY</businessCenter> </businessCenters> <dateRelativeTo href="InterimValuationDate"/> </relativeDates> </paymentDatesInterim> <paymentDateFinal id="FinalEquityPaymentDate"> <relativeDate> <periodMultiplier>3</periodMultiplier> <period>D</period> <dayType>CurrencyBusiness</dayType> <businessDayConvention>FOLLOWING</businessDayConvention> <businessCentersReference href="PrimaryBusinessCenter"/> <dateRelativeTo href="FinalValuationDate"/> </relativeDate> </paymentDateFinal> </paymentDates> </rateOfReturn>
The notional component specifies the notional of each of the legs of the swap (it is indeed also present in the interest leg of the trade). Similarly to the price of the underlyer, four possible ways of defining this notional are available:
![]() |
Figure 22: The notional component. |
The four examples below illustrate each of these cases mentioned before:
Example 11 - The explicit notional amount:
<notional> <notionalAmount id="EquityNotionalAmount"> <currency>USD</currency> <amount>28469376</amount> </notionalAmount> </notional>
Example 12 - The reference to a notional amount defined somewhere else in the document:
<notional> <relativeNotionalAmount href="EquityNotionalAmount"/> </notional>
Example 13 - The use of the determinationMethod for specifying the notional amount:
<notional> <determinationMethod id="EquityNotionalAmount">Number of Shares * Initial Price</determinationMethod> </notional>
Example 13b - The reference to a determination method defined somewhere else in the document:
<notional> <relativeDeterminationMethod href="EquityNotionalAmount"/> </notional>
The main purpose of the amount (old equityAmount) component is to specify the method that determines the amount to be paid/received on each of the payment dates. Its role however goes quite beyond this, as it also specifies:
![]() |
Figure 23: The amount component. |
This amount component is based on the LegAmount type that is also used for defining the interestAmount. It extends this type by adding a boolean cashSettlement element that specifies whether the swap will cash or physically settle.
The payment currency is the first component of this structure. It specifies the payment currency of the equity leg of the swap through three possible methods:
![]() |
|
The core of the component is its second component, which specifies the payoff of the return leg. This can done in three possible ways:
The optional calculationDates component is also aimed at these more complex equity swaps. It provides the possibility to define calculation dates (such as observation points in the case of an equity payoff that is a function of some specific market levels). These calculation dates can be specified similarly to the valuation dates:
![]() |
Figure 24: The calculationDates component, that provides the opportunity to define calculation dates for more exotic types of equity swaps. |
Example 14 - The use of the amount component for a vanilla equity swap:
<amount> <paymentCurrency id="EquityPaymentCurrency"> <currency>USD</currency> </paymentCurrency> <referenceAmount>ISDA Standard</referenceAmount> <cashSettlement>true</cashSettlement> </amount>
The return component encapsulates the information that defines the dividend to be paid to the receiver of the equity amounts, with the exception of the dividend payout ratio, that is specified through the underlyer component. (As explained earlier, this is because a specific payout ratio can be associated with each underlyer component in the case of basket swaps; such situation can typically be related to different tax regimes across countries when those various underlyers originate from different market places.)
![]() |
Figure 25: The return component. |
This return component has two sets of element: the returnType element, that specifies (through an enumeration) whether the contract is a total return swap, a price return swap or a dividend return swap, and the dividendConditions component, which describes the various conditions applicable to the dividend, including whether and how interests will be accrued if they are paid after the dividend pay date.
This second component is optional, as it does not apply in the case of a price return swap. Its dividend terms are the following:
![]() |
|
The notionalAdjustments component specifies whether the adjustment to the equity notional of the swap will obey to certain specific terms. These terms can be, according to the current industry practice, threefold: standard, execution and portfolio rebalancing. An execution-style swap is a trade where the quantity of underlyers is expected to vary quite often; in order to facilitate these later 'executions', the parties agree in advance on contractual terms that will facilitate these expected adjustments to the contract. A portfolio-rebalancing swap is a trade where the basket components will be often adjusted not only in terms of quantities but also in terms of types of underlyers; similarly to the previous case, some specific language will typically accommodate such adjustments.
These legal terms are however not specified through the schema representation of the equity swap. There are two reasons for this. The first one is that they are not part of the ISDA Definitions for Equity Derivatives. The second reason is that this current version of the equity swap schema is focused on representing the economic description of the trade. These legal terms are then not part of it.
Equity Derivatives and Equity Swaps both now use a common FxFeature component
The fxFeature is an optional component that specifies the FX conversion terms that can be associated with the swap. This FX feature can either be Quanto or Composite FX. Both these components include a referenceCurrency element, which purpose is to explicitly state the reference currency of the swap.
![]() |
|
![]() |
Figure 26: The quanto component. The quanto component includes an explicit reference to a rate, through the fxRate element. One or several rates can be defined, in order to address the case where a basket swap is composed of several underlyers that are listed in different currencies. |
The example below illustrates the application of this quanto component:
Example 15 - The quanto component:
<fxFeature> <quanto> <referenceCurrency id="ReferenceCurrency">USD</referenceCurrency> <fxRate> <quotedCurrencyPair> <currency1>USD</currency1> <currency2>EUR</currency2> <quoteBasis>Currency2PerCurrency1</quoteBasis> </quotedCurrencyPair> <rate>0.99140</rate> </fxRate> <fxRate> <quotedCurrencyPair> <currency1>USD</currency1> <currency2>HKD</currency2> <quoteBasis>Currency2PerCurrency1</quoteBasis> </quotedCurrencyPair> <rate>7.80</rate> </fxRate> </quanto> </fxFeature>
![]() |
Figure 27: The FX composite component. The FX composite component provides the framework for defining a currency rate at some point in the future. This can be done either by: |
The example below illustrates the application of this compositeFx component:
Example 16 - The composite component:
<fxFeature> <compositeFx> <referenceCurrency id="ReferenceCurrency">USD</referenceCurrency> <determinationMethod>CalculationAgent</determinationMethod> </compositeFx> </fxFeature>
The interest leg of the equity swap leverages for the most part the schema developed for the interest rate swaps.
However, instead of simply reusing the entire swapStream, the interest rate leg of the equity swap schema reuses certain of the components that are part of this swapStream.
This design approach is motivated by the differences in market practices that exist between the equity and fixed income products. The industry practice for the equity swaps consists in defining a schedule of actual dates for the equity valuation, while most of the other swap dates are defined in reference to this schedule. The practice in place in the interest rate area consists, on the other hand, in defining a rule-based schedule. As a result, the swapStream features are largely focused on defining such periodicity rules along with the appropriate calendar exceptions, and do not provide the possibility for defining a complete schedule of actual dates (if we except through the firstPeriodStartDate, the firstRegularPeriodStartDate and the lastRegularPeriodEndDate) and references to these.
Instead of leveraging the whole swapStream component, the interest leg of the equity swap leverages then components at a more granular level, such as the resetFrequency component, the interestCalculation component and the calculationPeriodDatesReference element.
As a result, the interest leg of the equity swap has several categories of components, which are presented in the figure 28 below and respectively specify the following features of the interest leg:
![]() |
Figure 28: The interestLeg of the returnSwap. |
The identification of the payer and receiver party of the equity leg is done similarly than for the equity leg of the swap, through the PayerReceiver.model.
The interestLegCalculationPeriodDates component defines the various dates associated with the interest leg of the swap:
The diagram below presents the key features of these different date structures. Three of these components are structured in the same way: the effectiveDate, the terminationDate and the interestLegPaymentDates. These components indeed all provide the possibility to define a date (or several dates, in the case of the interestLegPaymentDates component) as either an actual date or in reference to a date specified somewhere else in the document.
The interestLegResetDates component has been developed as a simplified version of the ResetDates type that is part of the interest rates derivatives schema. Three of the seven components that are part of this ResetDates type have indeed been reused:
![]() |
Figure 29: The interestLegCalculationPeriodDates component. |
![]() |
|
![]() |
|
![]() |
|
![]() |
|
The example below presents a typical example of how this schema is applied to the standard interest leg of an equity swap:
Example 17 - The calculation period dates of the interest leg of an equity swap:
<interestLegCalculationPeriodDates id="InterestLegPeriodDates"> <effectiveDate> <relativeDate> <periodMultiplier>3</periodMultiplier> <period>D</period> <dayType>ExchangeBusiness</dayType> <businessDayConvention>NotApplicable</businessDayConvention> <dateRelativeTo href="TradeDate"/> </relativeDate> </effectiveDate> <terminationDate> <relativeDate> <periodMultiplier>0</periodMultiplier> <period>D</period> <businessDayConvention>NotApplicable</businessDayConvention> <dateRelativeTo href="FinalEquityPaymentDate"/> </relativeDate> </terminationDate> <interestLegResetDates> <calculationPeriodDatesReference href="InterestLegPeriodDates"/> <resetRelativeTo>CalculationPeriodStartDate</resetRelativeTo> </interestLegResetDates> <interestLegPaymentDates> <relativeDates> <periodMultiplier>0</periodMultiplier> <period>D</period> <businessDayConvention>NotApplicable</businessDayConvention> <dateRelativeTo href="EquityPaymentDate"/> </relativeDates> </interestLegPaymentDates> </interestLegCalculationPeriodDates>
The notional amount is defined through the same structure than for the equity leg of the swap: the notional component. As mentioned earlier, and illustrated through the example 12, this component is most often used for referencing the notional amount that is defined as part of the equity leg.
The interest amount is defined in the same way than the equity amount: using the LegAmount complex type. Used through the interest leg, it specifies the following elements:
Example 18 - The interest amount of an equity swap:
<interestAmount> <paymentCurrency href="ReferenceCurrency"/> <referenceAmount>Standard ISDA</referenceAmount> </interestAmount>
The interestCalculation component specifies the interest rate reference of the swap (by referring either to a fixed interest rate or to a floating reference rate) and the day count fraction to be applied. As indicated in the introduction to the interest leg section, this structure has been developed by leveraging the components defined for the interest rate swap schema.
The component supports also compounding for on the interest leg (see optional compounding element within InterestCalculation. The compounding rate on the Interest leg can be different than that used for funding calculation. In addition, the structure supports the representation of multiple types of spreads, i.e. one for a long amount and one for a short amount.
![]() |
Figure 30: The interestCalculation component. |
![]() |
|
![]() |
|
The example below presents a typical example of how this interestCalculation component can be applied for specifying the floating rate of an equity swap:
Example 19 - Specifying the floating rate of an equity swap:
<interestCalculation> <floatingRateCalculation> <floatingRateIndex>USD-LIBOR-BBA</floatingRateIndex> <indexTenor> <periodMultiplier>3</periodMultiplier> <period>M</period> </indexTenor> <spreadSchedule> <initialValue>0.0050</initialValue> </spreadSchedule> </floatingRateCalculation> <dayCountFraction>ACT/360</dayCountFraction> </interestCalculation>
The representation of the stub periods for the equity swaps schema makes use of the Stub type that was initially developed for the interest rates schema.
The initialStub and the finalStub components respectively describe the initial and final stubs. For each of those, the component specifies the rate (or stub amount), the stub start date and the stub end date. The payment dates that relate to the stub period(s) are specified along with the payment dates of the main period, in the interestLegCalculationPeriodDates component.
![]() |
|
Some types of equity swaps do not have an interest leg. Their economic structure relies instead in the exchange of the principal of the swap between the parties. These are the fully funded and zero-strike swaps. The purpose of the principalExchangeFeatures component is to specify this feature that is associated with those swaps. (It should however be noted that the schema also accommodates some more exotic cases that would combine an interest leg which notional would be smaller than the notional of the equity leg, and that would also have a principal exchange.)
![]() |
Figure 31: The exchange of principal exchange feature. |
This component extends the design developed for the interest rate swaps (through the principalExchanges component) by adding the principalExchangeDescriptions component, which has the following features:
![]() |
Figure 32: The exchange of principal exchanges component. |
![]() |
Figure 33: The exchange of principal exchange descriptions component. |
Example 20 - Initial principal exchange:
<principalExchangeFeatures> <principalExchanges> <initialExchange>true</initialExchange> <finalExchange>false</finalExchange> <intermediateExchange>false</intermediateExchange> </principalExchanges> <principalExchangeDescriptions> <payerPartyReference href="PartyB"/> <receiverPartyReference href="PartyA"/> <principalExchangeAmount> <principalAmount> <currency>USD</currency> <amount>55911.60</amount> </principalAmount> </principalExchangeAmount> <principalExchangeDate> <relativeDate> <periodMultiplier>0</periodMultiplier> <period>D</period> <businessDayConvention>NotApplicable</businessDayConvention> <dateRelativeTo href="EffectiveDate"/> </relativeDate> </principalExchangeDate> </principalExchangeDescriptions> </principalExchangeFeatures>
Similarly to the principal exchange, the EquitySwapAdditionalPayment complex type extends the design developed for the interest rate swaps by providing the ability to define dates in relation to other dates, as well as to specify the calculation logic that supports certain types of fees.
![]() |
Figure 32: The additionalPayment component. |
This additionalPayment structure leverages some of the features that are also used through other components:
Example 21 - Upfront fee:
<additionalPayment> <payerPartyReference href="PartyA"/> <receiverPartyReference href="PartyB"/> <additionalPaymentAmount> <formula> <formulaDescription>18388000 * Reference Price * [6.5% (the upfront Fee) + 0.63% (taxes)]</formulaDescription> <math> <mn>18388000 </mn> <mo>*</mo> <mi>ReferencePrice</mi> <mo>*</mo> <mo>(</mo> <mn>6.5</mn> <mo>%</mo> <mo>+</mo> <mn>0.63</mn> <mo>%</mo> <mo>)</mo> </math> <formulaComponent name="ReferencePrice"> <componentDescription>Volume-weighted average price per share of underlying security on Trade Date</componentDescription> </formulaComponent> </formula> </additionalPaymentAmount> <additionalPaymentDate> <relativeDate> <periodMultiplier>0</periodMultiplier> <period>D</period> <businessDayConvention>NotApplicable</businessDayConvention> <dateRelativeTo href="EffectiveDate"/> </relativeDate> </additionalPaymentDate> <paymentType>Upfront fee</paymentType> </additionalPayment>
The purpose of the ReturnSwapEarlyTermination component is to specify the date from which each of the parties to the trade may have the right to terminate it early. The figure 33 below presents the structure of this component:
![]() |
|
Figure 33: The earlyTermination component.
Similarly to the other date-related components that are part of the return swap, the date can be specified using either the adjustableDate component or the relativeDate component. Considering that the standard market practice is to provide the ability for both the parties to the trade to early terminate it starting on Trade Date, the relativeDate element should be used most often. This is illustrated in the example below.
Example 22 - Each of the parties have the right to early terminate the trade starting on Trade Date:
<earlyTermination> <partyReference href="PartyA"/> <startingDate> <dateRelativeTo href="TradeDate"/> </startingDate> </earlyTermination> <earlyTermination> <partyReference href="PartyB"/> <startingDate> <dateRelativeTo href="TradeDate"/> </startingDate> </earlyTermination>
The Equity Derivative Working Group extended FpML to cover:
Variance Swaps and Options are modelled using the following product element in FpML:
these components provide support for:
varianceSwap specifies the structure of a variance swap.
![]() |
|
varianceSwapTransactionSupplement specifies the structure of a variance swap transaction supplement. This modelled using the same variance legs as Variance Swap, but does not allow for long form content such as extraordinary events.
![]() |
|
varianceLeg - A type describing return which is driven by a Variance calculation.
![]() |
|
varianceOptionTransactionSupplement specifies the structure of a variance option transaction supplement. VarianceOptionTransactionSupplement implements Variance Option Transaction Supplement by providing a short form representation for use in trades governed by a Master Confirmation Agreement.
![]() |
|
The Equity Derivative Working Group extended FpML to cover:
Dividend Swaps (Transaction Supplement form) are modelled using the following product element in FpML: dividendSwapTransactionSupplement.
dividendSwapTransactionSupplement specifies the structure of the dividend swap transaction supplement.
![]() |
|
The Equity Derivative Working Group extended FpML to cover:
Correlation Swaps are modelled using the following product element in FpML:
The correlationSwap product is modelled as a single netted leg.
![]() |
|
The correlationLeg - A type describing return which is driven by a Correlation calculation.
![]() |
|
This section provides an in-depth review of the product architecture of FpML 5.2 regarding Bond and Convertible Bond Options. It also covers the set of shared option constructs that are used by other types of options, not only Bond or CB options.
The OptionBase type defines the schema structure associated with optionType: The type of option transaction. From a usage standpoint, put/call is the default option type, while payer/receiver indicator is used for options index credit default swaps as well as the swaptions. Straddle is used for the case of straddle strategy, which combines a call and a put with the same strike. The optionType is to be used if the underlyer does not carry any mention of the resulting trade direction as well as in the case of a straddle.
Incorporates features that are not underlyer-specific and cannot be integrated as part of the OptionBase because of backward compatibility reasons with the eqd schema.
The premium construct has a similar approach than the swaption (i.e. premium based upon a premium construct), but introduces a simplified payment that does not incorporate the settlement features. In order to make this construct forward applicable to the equity options, this new SimplePayment is then extended to incorporate some premium-specific concepts that currently exist as part of the eqd schema.
The overall approach is to leverage the swaption constructs, both for the Exercise and the ExerciseProcedure, with a couple of backward compatible extensions to tackle some specific features.
The proposed extension is for the multiple exercise, where the existing Multiple Exercise only support notional amounts, while the template for convertible bonds refers to number of options:
Multiple Exercise: | Applicable |
Minimum Number of Options: | The lesser of (i) [ ] and (ii) the unexercised number of Options |
Maximum Number of Options: | The unexercised number of Options |
Integral Multiple: | 1 |
As a result, the new schema introduces choice nodes to provide the ability to express the minimum/maximum levels either in terms of notional amounts (swaptions) or number of options (bond and CB options).
In addition, the notionalReference node is made optional, as this reference is not used in the case of options on securities.
The extensions to the ExerciseProcedure relate to features that are needed to support the bond and CB options:
This provides the ability to support the notional for CDS option as expressed in the ISDA template, i.e. as a reference to the notional of the underlyer swap or as an explicit amount.
This requirement was identified in the case of bond and CB option. Not CDS options. The structure positions an explicit construct as part of the base type, so that it can be applied over time to the equity options. The currency has been added, as it is present as part of the bond and CB option confirmations.
The market practice consists in pricing convertible bond options based upon a swap curve, while also to include 'standard penalty' (called Make Whole Amount) in the case where the option is exercised early one. Conversely, the bond options are priced using a price reference.
As a result, the BondOptionStrike provides a choice between a swap curve reference and a price.
Two changes have been added to the convertible bond underlyer in order to support options on convertible bonds:
The content of the loan work has been removed from version 5.x since it is currently being redesigned by the FpML Syndicated Loan Working Group. The new content is expected to be published in a future working draft of version 5.2. For more information, please see the FpML Roadmap.
This section provides a detailed description of the product architecture for commodity derivatives. FpML provides support for commodity swaps (whether fix/float or float/float) and commodity options (American, European and Asian). Physically-settled trades are also covered including swaps for Electricity, Natural Gas, Oil, and Coal commodities. Support for Bullion Forwards is also included. A representation for a commodity underlyer has also been introduced, which is used within the commodity products but that can also be used within other products such as equity baskets.
For an overview of the commodities coverage in FpML and its linking with the legal documentation see the following document: FpML Commodities Coverage Matrix (pdf file)
The 'commodity' underlyer is meant to identify the commodity ‘index’ which is subject to the trade and is flexible enough to support agricultural products, and energy. Support for other commodity types has not been fully evaluated but this does not preclude their being able to be represented A number of global elements are already defined in the FpML schema for various asset types. The commodity underlyer follows the same model.
The 'instrumentId' and the 'description' elements are derived from the IdentifiedAsset type, which is used by multiple underlyers. The 'instrumentId' contains the unique identifier for the asset, and is intended to hold a Commodity Reference Price in the format set out by ISDA in the 1993 or 2005 Commodity Definitions. However, a CUSIP, ISIN, or any other identifier could also be used. The 'description' contains the name of the asset.
The following sequence of elements is optional and they are specified only in the event that no ISDA Commodity Reference Price or other identifier for this commodity ‘index’ exists.
The 'specified Price' is not defined in the Commodity Reference Price and so needs to be stated in the underlyer definition as it will impact the calculation of the Floating Price.
The 'deliveryDates' element is applicable for a Commodity Transaction that references a listed future.
The 'deliveryDateRollConvention' specifies, for a Commodity Transaction that references a listed future via the 'deliveryDates' element, the day on which the specified future will roll to the next nearby month when the referenced future expires.
The 'multiplier' specifies the multiplier associated with the transaction. This element is intended for use with freight transactions.
The commodity swap product is designed to support both fixed/float swaps and float/float swaps. There is also support for describing the attributes of physical commodity delivery. Its design is fully compatible with other FpML products and reuses standard common types.
As with all products in FpML the commodity swaps are accessed through a global element 'commoditySwap' which can substitute the 'product' element used in the construction of trade structures. The following diagram outlines the product structure.
The 'commoditySwap' structure only defines parameters for product-related information (e.g. dates, rates, underlying commodity, price source, etc.). Other trade-related information (e.g. trade date, identifiers, legal documentation, etc.) is held in the containing trade structure.
The repeating 'fixedLeg' and 'floatingLeg' elements contain the details of any scheduled payments or exchanges during the life of the instrument and are described later. A simple commodity swap would contain two legs, typically one fixed and one floating, but the repetition allows more complex multi-legged exchanges to be described.
The product representation of physically-settled trades is done within 'coalPhysicalLeg', 'elecricityPhysicalLeg', 'gasPhysicalLeg', 'oilPhysicalLeg' paired with 'fixedLeg' or 'floatingLeg' - see details in the Physical Leg section.
The optional 'commonPricing' flag may be relevant for a Transaction that references more than one Commodity Reference Price. If Common Pricing is not specified or its value is set to 'false', it will be deemed not to apply.
The optional 'marketDisruption' structure defines how the product should behave if there is a market disruption as defined in the 'ISDA 1993 Commodity Definitions' or in the 'ISDA 2005 Commodity Definitions', as applicable.
The commodity swap's 'rounding' element, if present, defines the direction and number of decimal places to which rounding should be performed in all amount calculations.
A schedule of fixed payments associated with a commodity swap are defined within a 'fixedLeg' using the following structure.
As with other FpML leg structures the payer and receiver parties are explicitly indicated in the 'payerPartyReference' and 'receiverPartyReference'.
The role of the remaining elements is as follows:
Each 'floatingLeg' defines a series of financial payments for a commodity who's value is derived from a floating price source such as an exchange.
As with the 'fixedLeg' they parties obligation to pay and receive the payments are explicitly indicated by the 'payerPartyReference' and 'receiverPartyReference' elements.
Two structures distinguish the 'floatingLeg' from the 'fixedLeg': the existence of the 'commodity' underlyer (see description above at the Commodity Underlyer section) and the 'calculation' structure within the floating leg.
The 'calculation' structure captures details relevant to the calculation of the floating price.
The structure is defined by the following elements:
The support for physically-settled commodities trades includes,
The product representation of physically-settled trades is done within the commoditySwap product element by adding a family of physical legs.
Note: xxx gets replaced by oil, gas, electricity, and coal.
The following structures vary between all these commodities,
Physically settled natural gas leg.
Physically settled oil or refined products leg.
Physically settled electricity leg.
The product support for financially-settled and physically-settled commodity options in FpML is based on the creation of a new 'commodityOption' product. The product references the 'commodity' underlyer in order to support the underlying asset of the option.
All FpML products inherit two optional elements from the Product type: 'productType' and 'productId'. The 'productType' defines a classification of the type of product. FpML defines a simple product categorization using a coding scheme. The 'productId' contains a product reference identifier allocated by a party. In this case, FpML does not define the domain values associated with this element.
The 'buyerPartyReference' and 'sellerPartyReference' contain references to the parties that buy or sell the instrument respectively. Buying the instrument means paying for the instrument and receiving the rights defined by it. On the other hand, selling the instrument means granting the rights defined by the instrument and in return receiving a payment for it.
The optionType element is for specifying whether this is a call option or a put option.
The choice allows to selecet the financially-settled commodity options or physically-settled options.
The CommodityFinancialOption.model is specific to financially-settled commodity options:
The 'commodity' underlyer component is specified using a reference to the 'commodity' asset (see description above at the Commodity Underlyer section).
The following elements are specific to asian/averaging commodity options only:
As with the 'commoditySwap', the notional amount of the 'commodityOption' is specified stating either the 'notionalQuantity' or if the notional changes over the life of the transaction, then the 'notionalQuantitySchedule' is specified. In addition, the 'totalNotionalQuantity' must be specified. Note that the intention is that a notional step should be specified for each Calculation Period in the trade, regardless of whether there is a change in value between two periods. This is so as to match the notional quantity schedule to the calculation periods as clearly as possible. The notional steps must be in chronological order (i.e the first step corresponds to the first Calculation Period, the last step to the last Calculation Period).
The 'exercise' structure contains the parameters for defining how the commodity option can be exercised and how it is settled.
The different options for specifying the strike price per unit will consist of a single strike price of a strike price schedule. Note that the intention is that a strike price per unit step should be specified for each Calculation Period in the trade, regardless of whether there is a change in value between two periods. This is so as to match the strike price schedule to the calculation periods as clearly as possible. The strike price per unit of the strike price per unit steps must be in chronological order (i.e the first step corresponds to the first Calculation Period, the last step to the last Calculation Period).
The CommodityPhysicalOption.model is specific to physically-settled commodity options:
The approach is similar to that used for interest rate swaptions by embedding a physically-settled swap/forward transaction within the option transaction. So that the exercise of an option results in a new physically-settled swap or forward transaction.
The 'physicalExercise' structure defines how the commodity option can be exercised into a physical transaction.
The 'premium' element defines the option premium payable by the buyer to the seller. Should the premium differ over the course of an Asian options life (e.g. because delivery is per calendar day which is reflected in the premium), a premium schedule should be specified. Note that the intention is that a premium step should be specified for each Calculation Period in the trade, regardless of whether there is a change in value between two periods. This is so as to match the premium schedule to the calculation periods as clearly as possible. The premium steps must be in chronological order (i.e the first step corresponds to the first Calculation Period, the last step to the last Calculation Period).
The 'commonPricing', 'marketDisruption', and 'rounding' elements are common across all commodity transactions. For a detailed description of them see the commoditySwap section.
The commodityForward product element supports the representation of Bullion Forwards. Whilst some commodity forwards are booked as single period swaps, precious forwards are extremely basic trades and are confirmed under a different ISDA confirmation template
Even though the initial scope is limited to Bullion Forward, the intention of the working group is to allow support for other commodity classes should this be required.
The fixed payment of the Commodity Forward product is represented using the fixedLeg element of type NonPeriodicFixedPriceLeg.
The intention of the new leg is to re-use as many existing commodity components as possible to achieve a flexible implementation of a forward that will be adaptable for use with further commodity classes.
Consequently, the BullionPhysicalLeg component will be a member of a choice group such that further commodity types can be added over time.
View PDF for details on schema changes
View PDF for details on validation rules changes
View SCHEME DEFINITIONS for details on coding schemes changes
These are automatically generated reference documents detailing the contents of the various sections in the FpML schema.
Schema and Example files - Provides zip file with FpML Schema and all examples.