1
SGX FX Composite Market Data FIX
Specification
Version 1
17
th
Oct 2024
2
SGX FX Systems UK Limited
Legal Notices
This document and all portions thereof are the exclusive property of SGX FX Systems UK Limited (“SGX-
FX”). This document is protected by copyright law and international treaties. Unauthorized possession,
reproduction, duplication, or dissemination of this document, or any portion of it, is illegal and may result in
severe civil and criminal penalties. Prosecution will be to the maximum extent possible under the law.
All SGX-FX computer programs and all SGX-FX source code are the exclusive property of SGX-FX. All
such programs, regardless of distributed form, are protected by copyright law and international treaties.
Unauthorized reproduction of such programs and/or code, or any portions thereof, may result in severe
civil and criminal penalties, and will be prosecuted to the maximum extent possible under the law.
This document is provided “as is”, without warranty of any kind, either express or implied, including, but not
limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.
Information in this document is subject to change without notice. Technical updates are periodically added
to the information herein. SGX-FX may make improvements and/or changes to the product(s) and/or the
program(s) described in this publication at any time.
Companies, names, and data used in examples herein are fictitious unless otherwise noted. No part of this
document may be reproduced or transmitted in any form or by any means, electronic or mechanical, for
any purpose, without the express written permission of SGX-FX.
3
Contents
1. Introduction .......................................................................................................... 4
2. Connectivity .......................................................................................................... 4
2.1. Connection medium ............................................................................................... 4
3. Session Management ............................................................................................ 4
3.1. Message Formats ................................................................................................... 5
3.1.1. Logon.................................................................................................................. 5
4. Market Data ......................................................................................................... 5
4.1. Message Flow ........................................................................................................ 5
4.2. Message Formats ................................................................................................... 6
4.2.1. Market Data Request .......................................................................................... 6
4.2.2. Market Data Request Reject ............................................................................... 9
4.2.3. Market Data – Full Refresh ................................................................................ 9
4
1. Introduction
This document outlines the Financial Information Exchange (FIX) message format for
querying and receiving pricing from the SGX FX real-time composite system,
specifying the subset of FIX messages and fields supported by the interface. SGX FX's
market data streaming implementation is described here, based on the FIX 4.4
specification, and is intended to be read in conjunction with the FIX Protocol
Specification. The specification supports pricing on the following price streams
Spot
Forward
NDF
2. Connectivity
The client is responsible for initiating the connection to SGX FX. Once the connection
is established the client must then initiate the normal FIX logon process.
To minimize market data message latency, SGX FX does not support persisting market
data messages, nor do we support these being resent on recovery. Further, the sequence
number will be explicitly reset on logon.
2.1. Connection medium
SGX FX support the below connection over the private networks such as through
Cross-Connectivity. Additional details on these are available upon request and options
can be discussed with the SGX FX team.
3. Session Management
The SGX FX interface supports the standard FIX session protocol, including all
standard session messages:
Name MsgType
Heartbeat 0
Logon A
Test Request 1
Resend Request 2
Reject 3
Sequence Reset 4
Logout 5
5
Note: The "Req'd" column used in the tables for this specification contain values 'Y' for
compulsory tags, 'N' for optional and 'C' for conditionally required tags.
Repeated groups are marked by an indention in the table, for example:
146 NoRelatedSym Y ...
55 Symbol Y ...
3.1. Message Formats
Only the Logon message requires clarification, the other session messages are as per the
specification.
3.1.1. Logon
Tag
Field Name Req'd
Comment
Standard Header Y MsgType = A
108
HeartBtInt Y Heartbeat interval (seconds).
98 EncryptMethod Y Method of encryption. Only 0 (None) supported.
95 RawDataLength N The length of the password. Not set unless required by
LP
96 RawData N The client's password. Not set unless required by LP
141
ResetSeqNumFlag
N Indicates both sides of a FIX session should reset
sequence numbers.
Standard Trailer Y
4. Market Data
4.1. Message Flow
The client requests a stream of prices for a currency pair, by submitting a Market Data
Request with a SubscriptionRequestType of Snapshot + Updates (value 1). If the
request is successful, Market Data messages will start to be sent to the client. They will
continue to be sent until the connection is lost or a Market Data Request with a
SubscriptionRequestType of Disable previous Snapshot + Update Request (value 2) is
sent by the client.
All data is sent as Market Data Full Refresh messages that contain the full set of price
tiers, i.e. an entry will be provided for each price and amount.
6
The SettlType field can be used to specify which price to stream. The valid options are
0 for streaming spot prices or tenor codes for forward points. If the SettlType field is
left empty, a value of spot is assumed
Client will request one stream of either spot rates or forward rates for a specific tenor.
Clients can subscribe for multiple different tenor streams, e.g. spot, 1M forward, 2M
forward for the same currency pair all regarded as different streams. Attempts to submit
more than one Market Data Request for a specific stream will result in a Market Data
Request Reject message
For forward subscriptions, the spot price will be published in the forward stream (i.e. it
is not required to subscribe to both the spot and forward streams in order to get the all-
in price).
4.2. Message Formats
4.2.1. Market Data Request
Tag 50 (SenderSubID) can be used to send a stream ID which can differentiate between
different pricing tiers.
Tag Field Name R
e
q
'
d
Comment
Standard Header
Y
262 MDReqID Y
Unique identifier allocated by the client for the
subscription.
When unsubscribing (SubscriptionRequestType =
2) the same Id must be supplied.
263 SubscriptionReque
stType
Y
1 = Subscribe
2 = Unsubscribe
264 MarketDepth Y
1= Top Of Book (0 = Full Book - supported but
returns the same result as top)
265 MDUpdateType
C
Required if SubscriptionRequestType = 0.
Supported values:
0 = full request (default if not supplied)
1 = Incremental Refresh (not supported)
267
NoMDEntryTypes
Y
Number of MDEntryType fields to follow.
269 MDEntryType Y
0 = Bid
1 = Offer
7
146 NoRelatedSym Y
Number of symbols requested. Currently only a
single Symbol can be requested per Market Data
Request message. Supported values: 1
55 Symbol Y
The currency pair to subscribe to in the form
base/term where base and term are ISO currency
code, e.g. EUR/USD.
63 SettlType Y
0 = Spot
For Forward/NDF a tenor should be specified as
one of the:
xD = FX tenor expression for "days" where "x" is
any integer > 0, e.g. "5D"
xM = FX tenor expression for "months" where "x"
is any integer > 0, e.g. "1M"
xW = FX tenor expression for "weeks", where "x"
is any integer > 0, e.g. "2W"
xY = FX tenor expression for "years", where "x" is
any integer > 0, e.g. "1Y"
Note that the tenors expressed using xD, xM, xW,
and xY values do not denote business days, but
calendar days
For value=6 the SettleDate field is required.
167 SecurityType C
Indicates type of security.
FXSPOT = FX Spot
FXFWD = FX Forward
FXNDF = Non-deliverable forward
Can be omitted for Spot when 63 (SettleType) = 0
Standard Trailer
Y
Example: Spot MD Request
Tag
Field Name
Value
35
MsgType
V
262
MDReqID
Custom id
263
SubscriptionRequestType
1
264
MarketDepth
0
265
MDUpdateType
0
267
NoMDEntryTypes
2
8
269
MDEntryType
0
269
MDEntryType
1
146
NoRelatedSym
1
55
Symbol
EUR/USD
63 SettlType 0
167 SecurityType FXSPOT
Example Spot request message:
35=V | 49=SGX FX | 56=BROKER-MD | 34=52 | 50=GOLD | 52=20160424-
22:54:31.757 | 262=BROKERFXRFS-2016042422543151 | 263=1 | 264=0 |
265=0 |267=2 | 269=0 | 269=1 | 146=1 | 55=EUR/GBP | 63=0 | 167=FXSPOT
| 10=139 |
Example: Forward MD Request
Tag
Field Name
Value
35
MsgType
V
262
MDReqID
Custom id
263
SubscriptionRequestType
1
264
MarketDepth
0
265
MDUpdateType
0
267
NoMDEntryTypes
2
269
MDEntryType
0
269
MDEntryType
1
146
NoRelatedSym
1
55
Symbol
EUR/USD
63
SettlTyp
1M
167
SecurityType
FXFWD
Example Forward request message:
35=V | 49=SGX FX | 56=BROKER-MD | 34=1017 | 50=GOLD | 52=20160425-
06:46:18.493 | 262=BROKERFXRFS-2016042506461889 | 263=1 | 264=0 |
265=0 | 267=2 | 269=0 | 269=1 | 146=1 | 55=EUR/GBP | 63=1M | 167=FXFWD
| 10=138 |
Example: NDF MD Request
Tag
Field Name
Value
35
MsgType
V
262
MDReqID
Custom id
263
SubscriptionRequestType
1
9
264
MarketDepth
0
265
MDUpdateType
0
267
NoMDEntryTypes
2
269
MDEntryType
0
269
MDEntryType
1
146
NoRelatedSym
1
55
Symbol
USD/INR
63
SettlTyp
1M
167
SecurityType
FXNDF
Example NDF request message:
35=V | 49=SGX FX | 56=BROKER-MD | 34=24 | 50=TIER1 | 52=20160505-
21:11:06.125 | 262=BROKERFXRFS-2016050521110621 | 263=1 | 264=0 |
265=0 | 267=2 | 269=0 | 269=1 | 146=1 | 55=USD/PHP | 63=1M | 167=FXNDF
| 10=052 |
4.2.2. Market Data Request Reject
Tag
Field Name
Req'd
Comment
Standard Header
Y
262
MDReqID
Y
Must refer to the MDReqID of the request.
281 MDReqRejReason
N Rejection reason code. See FIX Specification for
valid values.
58
Text
N
Textual description of the rejection reason.
Standard Trailer
Y
4.2.3. Market Data – Full Refresh
Tag
Field Name
Req'd
Comment
Standard Header
Y
MsgType = W
262
MDReqID
Y
As provided in the Market Data Request.
55 Symbol Y The currency pair the entry for in form
base/term, where base and term are ISO
currency code, e.g. EUR/USD.
64 SettlDate Y The value date for the ccy pair. This will be
in the format YYYYMMDD.
167 SecurityType C FXSPOT/FXFWD/FXNDF
Can be omitted for SettlTyp=0
268
NoMDEntries
Y
Number of entries following.
269 MDEntryType Y Supported values:
10
0 = Bid
1 = Offer
188 BidSpotRate C The spot rate bid.
189 BidForwardPoints C The forward points bid.
190 OfferSpotRate C The spot rate ask.
191 OfferForwardPoints
C The forward points ask.
270 MDEntryPx Y All-in price
271 MDEntrySize Y The trade size the MDEntryPx
273 MDEntryTime N Time of Market Date Entry (millisecond
precision).
20001
ConfidenceLevel Y Composite price confidence level (2-5)
Standard Trailer
Y
Example: Spot Full Refresh
Tag
Field Name
Value
35
MsgType
W
262
MDReqID
Custom id
55
Symbol
USD/JPY
64
SettlDate
20151117
268
MarketDepth
16
269 MDEntryType 0
270 MDEntryPx 123.123
271 MDEntrySize 10000000
273 MDEntryTime 11:41:13.276
20001
ConfidenceLevel
5
269 MDEntryType 1
... ... ...
Example Spot full refresh message:
35=W|49=BROKER-MD|56=SGX FX|34=17|52=20160502-
21:10:38.766|262=BROKERFXRFS-
201605022110382|55=AUD/USD|64=20160505|268=4|269=0|270=0.76646|271=100
0000|20001=5|269=1|270=0.76727|271=1000000|273=11:41:13.276|20001=5|26
9=0|270=0.76645|271=3000000|20001=5|269=1|270=0.76728|271=3000000|273=
11:41:13.276|20001=5|10=162|
11
Example: Forward Full Refresh
Tag
Field Name
Value
35
MsgType
W
262
MDReqID
Custom id
55
Symbol
AUD/NZD
63
SettlType
6
64
SettlDate
20151216
167 SecurityType FXFWD
268
MarketDepth
4
269 MDEntryType 0
188 BidSpotRate 1.0925
189 BidForwardPoints
0.0006
270 MDEntryPx 1.0931
271 MDEntrySize 5000000
273 MDEntryTime 11:41:13.276
20001
ConfidenceLevel 5
269 MDEntryType 1
... ... ...
Example merged Forward full refresh message:
35=W | 49=BROKER-MD | 56=SGX FX | 34=895981 | 52=20160506-00:26:51.770
| 262=BROKERFXRFS-2016050600265044 | 55=USD/SGD | 63=6 | 64=20160523 |
167 = FXFWD | 268=4 | 269=0 | 188=1.3588 | 189=2.66 | 270=1.359066 |
271=1000000 | 273=11:41:13.276 | 20001=5 | 269=1 | 190=1.35913 |
191=4.19 | 270=1.359549 | 271=1000000 | 273=11:41:13.276 | 20001=5 |
269=0 | 188=1.35875 | 189=2.66 | 270=1.359016 | 271=5000000 |
273=11:41:13.276 | 20001=5 | 269=1 | 190=1.35918 | 191=4.19 |
270=1.359599 | 271=5000000 | 273=11:41:13.276 | 20001=5 | 10=169 |
Example: NDF Full Refresh
Tag
Field Name
Value
35
MsgType
W
262
MDReqID
Custom id
55
Symbol
USD/KRW
63
SettlType
6
64
SettlDate
20151221
167
SecurityType
FXNDF
268
NoMDEntries
4
12
269 MDEntryType 1
190 OfferSpotRate 1169.61
191 OfferForwardPoints
0.49
270 MDEntryPx 1170.1
271 MDEntrySize 5000000
273 MDEntryTime 11:41:13.276
20001
ConfidenceLevel 4
269 MDEntryType 1
... ... ...
Example merged NDF full refresh message:
35=W | 49=BROKER-MD | 56=SGX FX | 34=931064 | 52=20160506-00:32:03.673
| 262=BROKERFXRFS-2016050600320246 | 55=USD/MYR | 63=6 | 64=20160531 |
167 = FXNDF | 268=4 | 269=0 | 188=4.008 | 189=29.58 | 270=4.010958 |
271=1000000 | 273=11:41:13.276 | 20001=4 | 269=1 | 190=4.015 |
191=35.42 | 270=4.018542 | 271=1000000 | 273=11:41:13.276 | 20001=4 |
269=0 | 188=4.008 | 189=29.58 | 270=4.010958 | 271=3000000 |
273=11:41:13.276 | 20001=4 | 269=1 | 190=4.015 | 191=35.42 |
270=4.018542 | 271=3000000 | 273=11:41:13.276 | 20001=4 | 10=190 |