1
SGX FX Composite Market Data FIX
Specification
Version 7.0
7
th
October 2026
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. Version history ........................................................................................................ 4
2. Introduction ............................................................................................................ 5
3. Connectivity ............................................................................................................ 5
3.1. Connection medium ............................................................................................... 5
4. Session Management .............................................................................................. 5
4.1. Message Formats ................................................................................................... 6
4.1.1. Logon.................................................................................................................. 6
5. Market Data ............................................................................................................ 6
5.1. Message Flow ........................................................................................................ 6
5.2. Message Formats ................................................................................................... 7
5.2.1. Market Data Request .......................................................................................... 7
5.2.2. Market Data Request Reject ............................................................................. 10
5.2.3. Market Data – Full Refresh .............................................................................. 10
4
1. Version history
A record of changes and updates
Version Date Description of Changes
1.0 18.10.2024 First revision
2.0 18.02.2025 Incremental Refresh message added, Full
Refresh removed (no longer supported)
4.0 30.04.2025 Updated Incremental Refresh message -
added tag 1026
5.0 12.06.2025 Updated Market Data Request examples -
some examples had incorrect tag 93001
instead of 9301
5.1 12.06.2025 Updated messages examples
5.2 16.06.2025 Updated Market Data Request message -
included a full list of accepted tenors
5.3 26.06.2025 Updated Logon message – added missing
553, 554 tags
Updated Incremental Refresh message, tag
279 - added missing value 2 - Delete
5.4 28.08.2025 Added support of 15M, 18M tenors
5.5 29.09.2025 Updated Market Data Request message -
added tag 64
6.0 10.11.2025 Full Refresh message added, Incremental
Refresh removed (no longer supported)
7.0 07.10.2026 Swap support added
5
2. 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
Swap
3. 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.
3.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.
4. 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
6
Note: The "Req'd" column used in the tables for this specification contains 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 ...
4.1. Message Formats
Only the Logon message requires clarification, the other session messages are as per the
specification.
4.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.
141
ResetSeqNumFlag N Indicates both sides of a FIX session should reset
sequence numbers.
553
Username Y The client’s username
554
Password Y The client's password
Standard Trailer Y
5. Market Data
5.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.
7
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).
5.2. Message Formats
5.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 Req'd
Comment
Y MsgType = V
262 MDReqID Y Unique identifier allocated by the client for
the subscription.
When unsubscribing
(SubscriptionRequestType = 2) the same Id
must be supplied.
263 SubscriptionRequestType 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 = 1.
Supported values:
0 = Full refresh
(
Depreca
ted)
267 NoMDEntryTypes Y Number of MDEntryType fields to follow.
→ 269 MDEntryType Y 0 = Bid
1 = Offer
146
NoRelatedSym Y Number of symbols requested. Currently
only a single Symbol can be requested per
Market Data Request message. Supported
values: 1
8
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.
167 SecurityType C Indicates type of security. Required if
SubscriptionRequestType = 1.
FX_SPOT = FX Spot
FX_FWD = FX Forward
FX_NDF = Non-deliverable forward
FX_SWAP = FX Swap
9301
Tenor N Required if SubscriptionRequestType = 1
and SecurityType is FX_FWD, FX_NDF or
FX_SWAP.
For FX_SWAP only SPOT is valid.
For FX_FWD and FX_NDF valid tenors are
TOD, TOM, SN, 1W, 2W, 3W, 1M, 2M,
3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M,
15M, 18M, 1Y, 2Y, IMMH, IMMM,
IMMU, IMMZ, IMMH1, IMMM1, IMMU1,
IMMZ1, BJAN, EMAR, BAPR, EJUN,
BJUL, ESEP, BOCT, EDEC, BJAN1,
EMAR1, BAPR1, EJUN1, BJUL1, ESEP1,
BOCT1, EDEC1, BMFF, BMFG, BMFH,
BMFJ, BMFK, BMFM, BMFN, BMFQ,
BMFU, BMFV, BMFX, BMFZ
.
9311
Tenor2 C Only required if SecurityType = FX_SWAP.
The tenor for the far leg. Only standard
tenors are supported (1W, 2W, 3W, 1M, 2M,
3M, 4M, 5M, 6M, 7M, 8M, 9M, 10M, 11M,
15M, 18M, 1Y, 2Y)
Standard Trailer Y
Tag
Field Name
Value
35
MsgType
V
262
MDReqID
Custom id
263
SubscriptionRequestType
1
264
MarketDepth
0
265
MDUpdateType
0
267
NoMDEntryTypes
2
9
→ 269
MDEntryType 0
→ 269
MDEntryType 1
146
NoRelatedSym
1
→ 55
Symbol EUR/USD
→ 167 SecurityType FX_SPOT
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 | 167=FX_SPOT |
10=139 |
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
→
64
SettlDate
20160525
→
167
SecurityType
FX
_
FWD
→ 9301 Tenor 1M
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 |
10
265=0 | 267=2 | 269=0 | 269=1 | 146=1 | 55=EUR/GBP | 64=20160525 |
167=FX_FWD | 9301=1M 10=138 |
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
USD/INR
→
64
SettlDate
20160605
→
167
SecurityType
FX
_
NDF
→
9301
Tenor 1M
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 | 64=20160605 |
167=FX_NDF | 9301=1M | 10=052 |
5.2.2. Market Data Request Reject
Tag
Field Name
Req'd
Comment
Standard Header
Y
MsgType = 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
5.2.3. Market Data – Full Refresh
Tag
Field Name
Req'd
Comment
Standard Header
Y
MsgType =
W
11
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.
268
NoMDEntries
Y
Number of entries following.
→
269 MDEntryType Y Supported values:
0 = Bid
1 = Offer
→
270 MDEntryPx Y Price.
→
271 MDEntrySize Y The trade size of the MDEntryPx.
→
272 MDEntryDate Y The value date of the trade.
→
1027 MDEntryForwardPoints N Provided for non SPOT;
Expressed in decimal form.
→
20001 ConfidenceLevel Y Composite price confidence level
(2-5).
→
9410 MDEntryDate2 C Provided only for FX_SWAP; The
value date of the far leg.
Standard Trailer
Y
Example: Spot Full Refresh
Tag
Field Name
Value
35
MsgType
W
262
MDReqID
Custom id
55 Symbol EUR/USD
268 NoMDEntries 16
→
269 MDEntryType 0
→
270 MDEntryPx 123.123
→
271 MDEntrySize 10000000
→
272 MDEntryDate 20160505
→
20001 ConfidenceLevel
5
→
269 MDEntryType 1
→
... ... ...
Example Spot full refresh message:
12
35=W|49=BROKER-MD|56=SGX FX|34=17|52=20160502-
21:10:38.766|262=BROKERFXRFS-201605022110382|55=AUS/USD
|268=4|269=0|270=0.76728|271=1000000|272=20160504|20001=5|269=1|270=
0.66728|271=1000000|272=20160504|273=21:10:38.766|20001=5|269=0|278=
AUS/USD72|55=AUS/USD|270=0.89944|271=2000000|272=20160504|273=
21:10:38.766|20001=5|
Example: Forward Full Refresh
Tag
Field Name
Value
35
MsgType
W
262
MDReqID
Custom id
55 Symbol EUR/USD
268 NoMDEntries 16
→
269
MDEntryType
0
→
270
MDEntryPx
123.123
→ 271 MDEntrySize 10000000
→ 272 MDEntryDate 20160505
→ 1027 MDEntryForwardPoints
0.123
→ 20001
ConfidenceLevel 5
→ 269 MDEntryType 1
→ ... ... ...
Example Forward full refresh message:
35=W | 49=BROKER-MD | 56=SGXFX | 34=895981 | 52=20160506-
00:26:51.770 | 262=BROKERFXRFS-2016050600265044 | 268=4 |
55=USD/SGD
| 269=0 | 270= 1.359066 | 271=1000000 | 272=20160523 | 1026=1.359 |
1027=0.000066 | 20001=5 | 269=1 | 270= 1.459066 | 271=1000000|
272=20160523 | 1026=1.459 | 1027=0.000066 | 20001=5 |
269=0 | 270= 2.359066 | 271=2000000 | 272=20160523 | 1026=2.359 |
1027=0.000066 | 20001=5 | 269=1 | 270= 2.459066 | 271=2000000 |
272=20160523 | 1026=2.459 | 1027=0.000066 | 20001=5 | 10=169 |
Example: NDF Full Refresh
Tag Field Name Value
35 MsgType W
262 MDReqID Custom id
55 Symbol USD/MYR
268 NoMDEntries 16
→ 269 MDEntryType 0
→ 270 MDEntryPx 123.123
13
→ 271 MDEntrySize 10000000
→ 272 MDEntryDate 20160505
→ 1027 MDEntryForwardPoints 0.123
→ 20001 ConfidenceLevel 5
→ 269 MDEntryType 1
→ ... ... ...
Example 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 | 268=4
| 269=0 | 270=1.359066 | 271=1000000 | 272=20160523 | 1026=1.359 |
1027=0.000066 | 20001=5 | 269=1 | 270=1.459066 | 271=1000000|
272=20160523 | 1026=1.459 | 1027=0.000066 | 20001=5 |
269=0 | 270=2.359066 | 271=2000000 | 272=20160523 | 1026=2.359 |
1027=0.000066 | 20001=5 | 269=1 | 270=2.459066 | 271=2000000 |
272=20160523 | 1026=2.459 | 1027=0.000066 | 20001=5 | 10=190 |
Example Swap full refresh message:
Example: Swap Full Refresh
Tag Field Name Value
35 MsgType W
262 MDReqID Custom id
55 Symbol GBP/USD
268 NoMDEntries 2
→ 269 MDEntryType 0
→ 270 MDEntryPx -0.0000188
→ 271 MDEntrySize 1000000
→ 272 MDEntryDate 20260505
→ 20001 ConfidenceLevel 5
→ 9410 MDEntryDate2 20260512
→ 269 MDEntryType 1
→ ... ... ...
14
Example Swap full refresh message:
35=W | 49=BROKER-MD | 56=SGXFX | 34=895981 | 52=20260506-00:26:51.770
| 262=BROKERFXRFS-2016050600265044 | 268=2 | 55=GBP/USD | 269=0 |
270=-0.0000188 | 271=1000000 | 272=20260505 | 20001=5 | 9401=20260512
| 269=1 | 270=-0.0000196 | 271=1000000| 272=20260505 | 20001=5 |
9401=20260512