The Tailor Made Software Suite for FX Options
eFXO Trade STP FIX API
Version 1
16 October 2023
eFXO Trade STP FIX API
Copyright 2021-2023 eFXO All rights reserved.
Information contained herein is for Internal use and may only be used for business purposes authorized by eFXO.
Contents
Introduction 3
Revision 3
Purpose 3
Content 3
Feedback 3
Workflow 3
Counterparty codes 4
Expiry Cuts 4
Trading Hours 4
UAT Servers 4
Production Servers 4
FIX Implementation 5
Protocol Version 5
Message Formats 5
FIX Message Encryption 5
Connection / Disconnection 5
Session Level Message Definitions 6
Standard Message Header 6
Trailer 6
Logon (35=A) from client 6
Logon (35=A) from server 7
Logout (35=5) 7
Heartbeat (35=0) 7
Test Request (35=1) 7
Reject (35=3) 7
Business Message Definitions 8
TradeCaptureReport (35=AE) 8
eFXO Trade STP FIX API
OptionProductType (1=FX) 9
OptionProductType: (2=European) 9
TradeCaptureReportAck (35=AR) 9
Introduction
Revision
Version | Date | Remarks |
1 | 2-March-2022 | First version with AE and AR messages |
1 | 18-November-2022 | Added TrdRptStatus 6 Pending |
1 | 16-October-2023 | Added LegUpiCode and LegRtn |
Purpose
This document provides the FIX messages for Trade STP of FX Options. You have the ability to receive and send trade booking messages.
Content
Included in this document are the following:
General definitions and specifications for clients using FIX to perform trade bookings.
FIX message formats to be used and details of their expected parameters.
Workflow logic.
Counterparty and cut definition logic.
Feedback
Feedback and questions can be directed to: support@efxo.com
Workflow
On sending an TradeCaptureReport message (AE) you can expect 6 responses: An TradeCaptureReportAck (AR) with TrdRptStatus (939):
0 = Delivered to counterparty, so they are connected. This is not an end state.
1 = Format Error: you message has technical problems and cannot be processed. 2= System Error: eFXO has internal issue and message cannot be processed.
3 = NotConnected: Counterparty is not connected, so message could not be delivered.
4 = Success: Counterparty accepts trade booking.
5 = Failed: Counterparty rejects trade booking. Text (58) will have the reason they provided.
eFXO Trade STP FIX API
6 = Pending: Trade needs to be enriched, so booking timeout increased from 1 minute to 15 minutes.
Counterparty codes
Counterparties are identified by the LEI code: https://www.lei-lookup.com/
Expiry Cuts
To standardize expiry cut times, we require the expiry cut to be set with the UTC time of the expiry. Example: New York cut is 10am New York time.
Depending on the time of year, that will be 15:00 UTC (wintertime) or 14:00 UTC (summertime). The value for expiry cut must be set to value “15:00” or “14:00” depending on the summertime/wintertime.
Trading Hours
The system will be available from:
Start Time: 7am Singapore time. End Time: 5pm New York time.
On Monday through Friday. System maintenance will be performed after 5pm New York time or during weekends.
UAT Servers
Servers are:
tradestpuat1.efxo.com and tradestpuat2.efxo.com
Connection must be made on port 7303. IP whitelisting is required. Port 7303 requires TLS 1.2 encryption.
There will be 2 robots active for testing:
LEI: REJECT01234567890123 : This robot rejects every booking. LEI: ACCEPT01234567890123 : This robot accepts every booking.
Production Servers
Servers are:
eFXO Trade STP FIX API
tradestpprd1.efxo.com and tradestpprd2.efxo.com
Connection must be made on port 7303. IP whitelisting is required. Port 7303 requires TLS 1.2 encryption.
FIX Implementation
Protocol Version
The protocol is based on FIX Protocol Version 4.4.
Message Formats
This document defines the set of supported messages, the expected fields to be contained in those messages and the range of accepted values which the fields may take. Any messages that it receives which are not in the supported message set, will be ignored. Messages not adhering to the specified format, containing fields with values outside the set defined here or containing any additional fields other than those defined in this document will be rejected.
FIX Message Encryption
No encryption is used.
Connection / Disconnection
eFXO Trade STP FIX API
Connection should be initiated by the client. The eFXO trade STP process will act as the server. The client should send a logon message containing a username and password. The server will reply with a logon message. The client can terminate the connection by sending a logout message or it can terminate the network connection.
Session Level Message Definitions
Standard Message Header
This is the standard header that must be used for every message.
FIX Tag | FieldName | Req'd | Description / Comments |
8 | BeginString | Y | FIX.4.4 |
9 | BodyLength | Y | The message length in bytes |
35 | MsgType | Y | Message type code |
49 | SenderCompId | Y | As provided |
56 | TargetCompId | Y | As provided |
34 | MsgSeqNum | Y | Message sequence number |
52 | SendingTime | Y | Time of message in UTC |
Trailer
This is the standard trailer that must be used for every message.
FIX Tag | FieldName | Req'd | Description / Comments |
10 | Checksum | Y | Three character FIX byte checksum value |
Logon (35=A) from client
eFXO Trade STP FIX API
First message from client to logon to the server. The RawData is used by the server to control multiple clients on multiple versions of the protocol.
FIX Tag | FieldName | Req'd | Description / Comments |
98 | EncryptMethod | Y | Must be 0 |
108 | HeartBtInt | Y | Must be 60 |
141 | ResetSeqNumFlag | Y | Must be 'Y' |
96 | RawData | Y | Set to '1' as this is spec version 1 |
95 | RawDataLength | Y | Set to length of RawData, so 1 |
553 | UserName | Y | As provided |
554 | Password | Y | As provided |
453 | NoPartyIds | Y | Must be 1 |
=>448 | PartyId | Y | Your LEI code |
=>447 | PartyIdSource | Y | 'N': Legal Entity Identifier (ISO 17442) LEI |
Logon (35=A) from server
This is the reply from the server on a successful logon:
FIX Tag | FieldName | Req'd | Description / Comments |
98 | EncryptMethod | Y | |
108 | HeartBtInt | Y | |
141 | ResetSeqNumFlag | Y |
Logout (35=5)
Both sides can send a logout.
FIX Tag | FieldName | Req'd | Description / Comments |
58 | Text | Y | Logout reason as text |
Heartbeat (35=0)
Heartbeats are exchanged every 60 seconds after the last message. When a test request is received then the response is also a heartbeat, but with value 112 set to the value of the test request.
FIX Tag | FieldName | Req'd | Description / Comments |
112 | TestReqId | N | Value from TestRequest |
Test Request (35=1)
FIX Tag | FieldName | Req'd | Description / Comments |
112 | TestReqId | Y | Any string |
Reject (35=3)
eFXO Trade STP FIX API
This message is a respond to a message that is in wrong format.
FIX Tag | FieldName | Req'd | Description / Comments |
45 | RefSeqNo | Y | MsgSeqNo of rejected message |
371 | RefTagId | Y | Tag number that was wrong |
372 | RefMsgType | Y | MsgType of wrong message |
373 | SessionRejectReason | Y | Either 1 (tag missing) or 5 (value incorrect) |
58 | Text | Y | Readable text saying what is wrong |
Business Message Definitions
TradeCaptureReport (35=AE)
eFXO Trade STP FIX API
This message is provided by the PartyId who is the IntroducingFirm and transmitted to the PartyId who is the ClientId.
FIX Tag | FieldName | Req'd | Description / Comments |
571 | TradeReportId | Y | Unique identifier |
453 | NoPartyIds | Y | Must be 1 |
=>448 | PartyId | Y | LEI code of counterparty |
=>447 | PartyIdSource | Y | 'N': Legal Entity Identifier (ISO 17442) LEI, except 'C' for Custum value for PartyRole=12 |
=>452 | PartyRole | Y | 3=ClientId, 4=ClearingFirm (GiveUp), 6=IntroducingFirm (Sender), 12=ExecutingTrader, 17=ContraFirm, 18=ContraClearingFirm |
20000 | Venue | Y | 1=SEF,2=MTF,3=OTF,4=Other,5=OTC |
146 | NoRelatedSym | Y | Must be 1 |
=>55 | Symbol | Y | Symbol in EURUSD format |
5830 | PremiumCcy | N | Premium Currency |
138 | MicsFeeCurr | N | Trade Fee currency |
60 | TransActTime | N | |
20003 | MicCode | N | |
20006 | InvestmentDecisionWithin | N | |
20007 | ExecutionWithinFirm | N | |
=>555 | NoLegs | Y | Must be greater than 0 |
==>654 | LegRefId | Y | Start with 1 and must increase per leg |
==>9136 | OptionProductType | Y | 1=FX, 2=European |
<See product leg specs> | |||
==>5020 | PremiumDate | C | Required for Options |
==>6436 | Premium | C | Required for Options, can be 0 |
==>5678 | Volatility | N | |
==>137 | MiscFeeAmt | N | |
==>20001 | UsiPrefix | N | |
==>20002 | UsiValue | N | |
==> 2893 | UPI code | N | |
==>20004 | ComplexTradeComponent | N | |
==>20005 | InstrumentIdentificationCo | N | |
==>20008 | WaiverIndicator | N | |
==>20009 | OtcPostTradeIndicator | N | |
==> 20010 | LegRtn | N |
OptionProductType (1=FX)
FIX Tag | FieldName | Req'd | Description / Comments |
==>624 | LegSide | Y | 1=Buy,2=Sell; Left side currency for ClientID |
==>588 | LegSettlDate | Y | Delivery Date in YYYYMMDD format |
==>612 | LegStrikePrice | Y | FX rate |
==>687 | LegQty | Y | Notional Amount |
==>556 | LegCurrency | Y | Notional Currency |
==>63 | SettlType | Y | 0=Delivery, 1=Cash |
==>120 | SettlCurrency | N | Cash settlement currency |
==>611 | LegMaturityDate | N | Fixing Date in YYYYMMDD format |
==>9125 | LegCutOff | N | UTC expiry/fixing time in YY:MM format |
OptionProductType: (2=European)
FIX Tag | FieldName | Req'd | Description / Comments |
==>624 | LegSide | Y | 1=Buy,2=Sell; Option from ClientID perspective |
==>611 | LegMaturityDate | Y | Date in YYYYMMDD format |
==>9125 | LegCutOff | Y | UTC expiry time in YY:MM format |
==>588 | LegSettleDate | Y | Date in YYYYMMDD format |
==>612 | LegStrikePrice | Y | Strike price |
==>9072 | CallOrPut | Y | 1=Call, 2=Put on first currency of pair |
==>687 | LegQty | Y | Optional notional |
==>556 | LegCurrency | Y | Optional notional currency |
==>63 | SettlType | Y | 0=Delivery, 1=Cash |
==>120 | SettlCurrency | N | Cash settlement currency |
TradeCaptureReportAck (35=AR)
eFXO Trade STP FIX API
This message can be used by the client to confirm or reject a request to book a trade.
FIX Tag | FieldName | Req'd | Description / Comments |
571 | TradeReportId | Y | Unique identifier for request |
939 | TrdRptStatus | Y | See section 1.5 |
58 | Text | N | Readable text saying what is wrong or trade id |