This document specifies the Rules of Engagement for parties connecting to IG Group for the purpose of electronic trading/market data using the WebSocket APIs. This document also applies to the HistoricPrice Websocket API.
IG Group's WebSocket PreTrade, Trade and PostTrade APIs offer a subset of the Application Messages and fields specified by the FIX protocol. These messages are based on the Application Messages specified by the FIX protocol version 5.0 SP2. They implemented using a FIX/JSON Encoding. Fields and Messages supported by the implementation are documented. Messages that are not supported are rejected.
The HistoricPrice WebSocket API is not based on FIX Protocol Application Messages.
These WebSocket APIs also employ the Point-to-Point Session Protocol defined by the emerging FIX Performance Session Layer (FIXP). The use of this protocol provides Session Negotiation including authentication, Session Establishment and Heartbeats. Please refer to the FIXP notes on the Point-to-Point protocol and WebSocket usage.
The FIXP Flow Type supported by this implementation is "Unsequenced".
The WebSocket subprotocol is text.
Messages must conform to the JSON schema generated by the ig-orchestrations json schema.
Java message bindings and HTML documents are also generated.
N.B. The FIX APIs are derived from a new FIX Trading Community project called FIX Orchestra. Implementations of FIX Orchestra are called "orchestrations". This orchestration is published [here].
Example code will be provided.
This document addresses the Rules of Engagement that are mainly concerned with technical aspects of the integration. Specialisations and exceptions to the conventional FIX standards are defined here
The messages are closely related to IG's conventional FIX API that uses the FIXT 1.1 Session protocol.
This document is for those involved in integration, conformance testing and other aspects of implementing connectivity to IG Group.
For queries about accounts, orders or positions please contact Trading Services. Contact Phone Numbers
- +1 312 981 0498
Department | Contact Email / Twitter |
---|---|
HelpDesk |
|
FIX Technical Support (Live environment only) | FIXSupport@ig.com |
FIX Development and Support during on-boarding | FIXDevelopment@ig.com |
FIX 5.0 SP2 specifications. http://fiximate.fixtrading.org/
IG Orchestration for UG US RFED API.
FIX Performanance Session Layer
OAuth 2 is used for the initial HTTP request and the OAUTH token must be used in the Credentials section of FIXP Initiate Session Negotiation message when the WebSocket session is created.
Field Name | Required? | Comments |
---|---|---|
MsgType | Y | Defines the message type |
ApplVerID | N | Specifies the service pack release being applied at message level. Enumerated field with values assigned at time of service pack release |
CstmApplVerID | N | Specifies a custom extension to a message being applied at the message level. Enumerated field |
SendingTime | Y | Time request is sent |
{
"MsgType": "NewOrderSingle",
"ApplVerID": "FIX50SP2",
"CstmApplVerID": "IGUS/Trade/V1",
"SendingTime": "2019-08-02T21:14:38.717",
...
}
The APIs are logically organised into:
- HistoricPrice Historic Prices
- PreTrade Security Reference Data and Quote Negotiation
- Trade Trading and Order Status
- PostTrade Position Management and Account Data
For the documents based on the FIX Protocol Messages the Application Messages are defined along with their Fields and Components and Repeating Groups.
Components are groups of fields that may be common to more than one message. Components may contain Repeating Groups.
In the JSON representation of the messages Components are denormalised. They are not represented by distinct structures in the message and their fields are simply inline in the JSON message.
Fields, Components and Repeating Groups that are common to more than one API are documented here. Otherwise they are documented in the respective API documents.
The "Required?" column describes whether a field must be present on the message.
Symbol is used as a displayable identifies for the security.
IG supports a unique identity for each instrument.
The Symbol uniquely identifies an instrument at a given point in time.
In some cases, such as for futures, the Symbol can be "reused" once the instrument has expired or been otherwise terminated. The effect of instrument lifecycle is discussed in the PreTrade section of the API. This does not happen routinely for Spot instruments.
Field | Description |
---|---|
SecurityID | Required by IG, Marketplace Assigned Identifier for the security as provided by IG |
SecurityIDSource | Required by IG, distinguishes the source of the SecurityID. Must be "MarketplaceAssignedIdentifier". |
Although the FIX specification does not require that currency be set, IG Group does require that currency be set (on trading messages) to avoid any ambiguity.
Currency will be regarded as case sensitive.
The currency supplied will be checked against the instrument to ensure a valid match.
As defined in the FIX Specification (Volume 6, Appendix A) the Currency Codes are ISO 4217 codes.
Prices must be expressed in the units defined by the currency code. If quotes are traditionally expressed in multiples or fractions of the currency the price amounts must be normalised to be represented in the currency amount. As an example UK securities quoted in pence must be represented in pounds in FIX messages.
IG Group supports trading in a restricted set of currencies. Valid values depend on the individual instrument and are specified in the Security Definition and Security List messages described in the FIX OTC Market Data Rules of Engagement document.
OrderQty, LongQty and ShortQty decimal values are supported to a maximum of 2 decimal places.
Field/Component Name | Required? | Comments |
---|---|---|
Symbol | N | Common, "human understood" representation of the security. This is provided by IG for display purposes and is not evaluated on messages received by IG. Use SecurityID, SecurityIDSource as follows. |
SecurityID | Y | Required by IG, Marketplace Assigned Identifier for the security as provided by IG |
SecurityIDSource | Y | Required by IG, distinguishes the source of the SecurityID. Must be "MarketplaceAssignedIdentifier". |
SecAltIDGrp | N | Security Alt ID Group. Alternate identifiers for the Security. |
CFICode | N | Represents the Option Type. |
SecurityGroup | N | IG-specific name assigned to a group of related securities. |
MaturityMonthYear | C | Month and Year of Maturity. Conditionally required by IG for dated instruments. If MaturityMonthYear is specified in the Instrument Component of SecurityDefinition/Security List messages then it must be also be included in the Instrument Component of Order Messages |
MaturityDate | N | Specifies the full date of maturity. This field may be included by IG for information only and will not be evaluated on incoming orders. |
StrikePrice | N | Specifies the Strike Price |
ContractMultiplier | N | Specifies the ratio or multiply factor to convert from "nominal" units (e.g. contracts) to total units (e.g. shares) (e.g. 1.0, 100.0, 1000.0, etc). |
SecurityDesc | N | Provides an optional textual description for a financial instrument. |
Field/Component Name | Required? | Comments |
---|---|---|
AttrbGrp | N | Attribute Repeating Group |
Field/Component Name | Required? | Comments |
---|---|---|
UnderlyingSymbol | N | Common, "human understood" representation of the security. Present if the Component is present. |
UnderlyingSecurityID | N | Identifier for the security. |
UnderlyingSecurityIDSource | C | Identifies class or source of the SecurityID value. Required if UnderlyingSecurityID is specified. |
UndSecAltIDGrp | N | Alternate identifiers for the Security. |
UnderlyingCurrency | N | ISO Currency Code |
Field/Component Name | Required? | Comments |
---|---|---|
SecurityAltID | C | Required if the Group is present. Alternate Security Identifier |
SecurityAltIDSource | C | Required if the Group is present. Alternate Security Identifier Source |
Field/Component Name | Required? | Comments |
---|---|---|
UnderlyingSecurityAltID | C | Required if the Group is present. Alternate Security Identifier. |
UnderlyingSecurityAltIDSource | C | Required if the Group is present. Alternate Security Identifier Source |
This group will be used to communicate additional attributes for the instrument definition.
For this purpose, IG has defined additional InstrAttribTypes :
InstrAttribType | Description | IG Customisation? |
---|---|---|
"InstrumentPricePrecision" | The arithmetic precision of the price, i.e the number of digits following the decimal point. | N |
"DealableCurrencies" | Used to provide a comma separated list of the dealable currencies for an instrument | Y |
"MarketOrdersSupported" | Used to indicate whether the instrument supports market orders. InstrAttribValue will be ‘Y’ if market orders are supported. | Y |
"MarketDataSupported" | Used to indicate whether the instrument supports requests for market data. InstrAttribValue will be ‘N’ if market data is not supported | Y |
Field/Component Name | Required? | Comments |
---|---|---|
InstrAttrType | C | Required if the Group is present. Type of instrument attribute |
InstrAttrValue | C | Required if the Group is present. Value of instrument attribute, if applicable |
The Websocket API supports the following datetime formats:
Format | Example |
---|---|
yyyy-MM-dd'T'HH:mm:ss.SSSX | 2023-01-10T12:00:00.000+00:00 |
yyyy-MM-dd'T'HH:mm:ss.SSS | 2023-01-10T12:00:00.000 |
EEE, dd MMM yyyy HH:mm:ss zzz | Tue, 10 Jan 2023 12:00:00 GMT |
Format | Example |
---|---|
yyyy-MM-dd | 2023-01-10 |
In the event of an invalid date time value or message, a business message reject will be sent.
{
"RefMsgType": "SecurityListRequest",
"BusinessRejectRefID": "listReq+1616687620989",
"BusinessRejectReason": "Other",
"Text": "rejecting message (first 200 chars): {\"MsgType\":\"SecurityListRequest\",\"SendingTime\":\"20230110-12:00:00\",\"SecurityReqID\":\"listReq+1616687620989\",\"SubscriptionRequestType\":\"Snapshot\",\"ApplVerID\":\"FIX50SP2\",\"SecAltIDGrp\":[],\"SecurityListReq",
"MsgType": "BusinessMessageReject",
"ApplVerID": "FIX50SP2",
"SendingTime": "2023-01-18T16:13:06.242"
}