Imported from previous forum
Thank you for raising the question as it allows to explain a very powerful new FIX concept. This is a non-trivial area of FIX but I am happy to say that the Global Technical Committee is now providing a generic solution for this problem. The solution has been designed in the context of regulatory reporting for OTC derivatives where very complex instrument definitions are required.
FIX has only recently decided on how to resolve the issue of nested instrument definitions (once and for all we hope :-)). These could be unlimited and not just depth 3 (instrument -> leg -> underlying) as in your case. I believe there is (was) only one place where an explicit nesting of 3 has been provided, i.e. by means of the TradeCapLegUnderlyingsGrp as part of the TrdInstrmtLegGrp in the TradeCaptureReport message. This repeating group is being deprectaed with Extension Pack 187 (CFTC Parts 43/45 Phase 3) which has been published and approved but not yet implemented, i.e. you cannot see its impact in the latest EP FIXimate.
EP103 (OCC Extensions for Large Options Positions Reporting) introduced a generic component called RelatedInstrumentGrp. You can find this component in FIXimate. It has been extended with EP187 to cover nested instruments of any depth (see http://www.fixtradingcommunity.org/pg/discussions/topicpost/168307/public-comment-period-cftc-part-43-and-45-reporting-proposal-phase-3 for details).
It is key to understand the design principle of avoiding physical nesting by putting the RelatedInstrumentGrp on the same hierarchical level of a message as the Instrument component. Note that the repeating group of underliers and leg instruments are both also always on the same level as Instrument and not nested into it. The repeating group of related instruments itself is not nested, i.e. it describes logical links between a) the instrument and b) underliers. It is not needed for simple cases where all underliers are underliers of the instrument. But in your case you have one or more underliers of leg instruments. You can define these underliers in the UndInstrmtGrp and use RelatedInstrumentGrp to link the underliers to the leg instruments. The Gap Analysis document as well as slides describe in detail how to do the linkage. It is a very powerful concept but you need to invest the time to understand it. Please feel free to post further questions in this forum which reaches the vast majority of the FIX community.
EP187 is targeted at regulatory reporting for OTC derivatives and hence has a focus on the TradeCaptureReport message. It currently does not foresee to add RelatedInstrumentGrp to the security definition messages (there is more than one). It is a straightforward extension but needs an official Gap Analysis to get it through thr formal process and into the FIX repository. It would be great if people having the same requirement would post comments to this thread. The FIX Global Technical Committee may then invest the time and effort to compile such a Gap Analysis and see it through. For the time being, you can use the concept as a bilaterally agreed extension by adding RelatedInstrumentGrp to the same hierarchical level of a message as the Instrument component. This is the root level in case of SecurityDefinitionRequest. Note that it is not the root level but the SecListGrp level in case of the SecurityList message. As long as you stick to this design paradigm, you are “FIX compliant” in my view. RelatedInstrumentGrp will eventually be added to all messages where explicit complex instrument definitions are needed.
According to the current specifications, Security Definition Request© message can be used to request an instrument to be created at a trading venue. If the instrument being created is a multilegged instrument, then it is possible to specify the legs of the instrument using the InstLegGrp i.e. NoLegs(555) repeating group.
My question is on this repeating group. If someone needs to specify the leg instrument not with a security ID or a symbol, but with some other information, how would they go about it? For example, if I need to create a NatGas/CrudeOil Split, I want to be able to request the following (for the legs):
- Leg 1 Underlying: NatGas
- Leg 1 Maturity Date: 29/08/2014
- Leg 2 Underlying: Crude Oil
- Leg 2 Maturity Date: 29/08/2014
Obviously the underlying specified above should refer to some sort of a symbol or a security ID defined by the exchange, but the key question is how to specify the underlying.
Currently if you want to specify the legs with the maturity dates, you have LegMaturityDate(611). If you are dealing with options you have LegStrikePrice(612) and LegPutorCall(1358). But how do you specify the underlying for these?
Note that if you are dealing with legs of the same underlying, you can use the UndInstrmtGrp which sits outside the LegInstGrp. However in this case, it would not work.
Would appreciate if someone can let know if there is a standard way of doing this or an EP that is currently in development (although it may not have been published).