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 2.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.
FpML is divided into several schema files, which organize the definitions into smaller and more maintainable building blocks. These building blocks include:
This organization may be refined in the future. In particular, it is likely that fpml-shared will be split into smaller pieces.
An FpML 4.2 document can be either of two categories:
Before beginning to use FpML 4.2, 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.
The FpML element forms the root for an FpML instance document. The structure of the FpML document depends on the "xsi:type" attribute. The simplest FpML document is a "DataDocument" (xsi:type='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 ('4-2' for FpML 4.2), the schema name and location, the name space, and related properties, as well as the xsi:type. See the Architecture 2.0 specification for more details on this.
The DataDocument type contains four elements, trades, portfolios, events and parties. Portfolios contain only trade references, if the trades themselves need to be included in the document then the trades can be included within the root element.
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. 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.
In addition, the FpML root element includes attributes for:
The trade is the top-level component within the root element FpML. 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 information within tradeHeader is common across all types of trade regardless of product. In FpML 4.2 this element contains the trade date and party trade identifiers, as well as party-specific trade information.
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.
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. The parties involved will be the principals to a trade and potentially additional third parties such as a broker. For this release, this component is restricted to party identification.
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 (tradeSide structure) to the party component.
Within the party component includes information about accounts. A party can have multiple accounts.
This is a description of the elements:
Example:
... <account id="LDF_CUSTODY"> <accountId accountIdScheme="http://bony.com/custody"/> <accountName>London Diverisified Fund Custody Account</accountName> <accountBeneficiary href="LDF"/> </account> ...
FpML introduced the definition of roles in version 4.2. The ability to specify principal/agent relationships (trading on behalf of) is a very important feature for using FpML, for example in the prime brokerage area.
This is the description of the different roles currently defined:
In order to define specific roles, the payerPartyReference/receiverPartyReference will point to a tradeSide structure instead of pointing to a party:
... <payerPartyReference href="CHASE_SIDE_1"/> <receiverPartyReference href="ABN_SIDE_1"/> ...
Each one of the tradeSide defines the set of roles for a specific side of the trade.
... <tradeSide id="CHASE_SIDE_1"> <orderer> <party href="CHASE_PARTY"/> </orderer> <creditor> <party href="CHASE_PARTY"/> </creditor> </tradeSide> ... <tradeSide id="ABN_SIDE_1"> <orderer> <party href="LDF"/> </orderer> <creditor> <party href="ABN_PARTY"/> </creditor> <beneficiary> <account href="LDF_CUSTODY"/> </beneficiary> </tradeSide> ...
Each role points to a party or to a specific account within a party.
... <party id="CHASE_PARTY"> <partyId>CHASUS33</partyId> <partyName>CHASE</partyName> </party> <party id="LDF"> <partyId>LDF</partyId> <partyName>Londin Diversified Fund</partyName> </party> <party id="ABN_PARTY"> <partyId>ABNANL2A</partyId> <partyName>ABN Amro</partyName> </party> <party id="BONY"> <partyId>BankNY</partyId> <partyName>Bank of New York</partyName> <account id="LDF_CUSTODY"> <accountId accountIdScheme="http://bony.com/custody">12344455</accountId> <accountName>London Diverisified Fund Custody Account</accountName> <accountBeneficiary href="LDF"/> </account> </party> ...
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 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.
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 centers, 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.
Previous | Top | Next |
---|