Skip to content

Latest commit

 

History

History
263 lines (183 loc) · 16.9 KB

File metadata and controls

263 lines (183 loc) · 16.9 KB

Web Socket API FIX/JSON

Introduction

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.

Scope

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.

Intended Audience

This document is for those involved in integration, conformance testing and other aspects of implementing connectivity to IG Group.

Contacts and Support Information

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

Related Documents

FIX 5.0 SP2 specifications. http://fiximate.fixtrading.org/

IG Orchestration for UG US RFED API.

FIX Performanance Session Layer

Authentication

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.

Standard Request Header

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",
  ...
}

APIs

The APIs are logically organised into:

Document Conventions for FIX Protocol Messages

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.

Fields and Constraints

Symbol

Symbol is used as a displayable identifies for the security.

SecurityID and SecurityIDSource

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".

Currency

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.

Quantities

OrderQty, LongQty and ShortQty decimal values are supported to a maximum of 2 decimal places.

Components

Instrument

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.

Instrument Extension

Field/Component Name Required? Comments
AttrbGrp N Attribute Repeating Group

Underlying Instrument

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

Repeating Groups

SecurityAltID Repeating Group (SecAltIDGrp)

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

Underlying Security AltID Repeating Group (UndSecAltIDGrp)

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

Attribute Repeating Group (AttrbGrp)

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

DateTime Formats

The Websocket API supports the following datetime formats:

Time

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

Date

Format Example
yyyy-MM-dd 2023-01-10

BusinessRejectMessage

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"
}