FIX Session Guide
This guide describes SpiderRock FIX sessions and session administration messages. For application-level information see the appropriate application message guide.
SpiderRock FIX sessions utilize a custom template (tag re-write) mechanism which allows most tags to be modified in flight between a client system and SpiderRock. SpiderRock natively uses FIX 4.4 style messages, however; SpiderRock can switch to FIX 4.2 style message handling if necessary. Consult with SpiderRock customer support when a session is being certified if tag re-write features are required.
User Support
Production support is available at 312-256-9602.
Please email questions or comments regarding this document to: cs@spiderrock.net
Hours of Operation
The SpiderRock Fix Gateways are available from Sunday 12:00PM EST through Saturday 10:00AM EST year-round with normal software maintenance occurring on most Saturdays.
Symbology
SpiderRock internally and in both the MLink and SRSE APIs represents securities as a combination of their exchange or common symbol (1-12 letter ticker), their issuing authority (ticker source), and their asset type; and optionally, an expiration, strike, and/or call/put designation. For example, “MSFT-NMS-EQT” would represent Microsoft common equity and “MSFT-NMS-EQT-2019-01-17-100-C” would represent a Microsoft 100 Call expiring 2019-01-17.
The complete live SpiderRock security master is available via SRSE or by request. Clients wishing to send orders using native SpiderRock symbology can utilize SRSecKey<5015> instead of the normal FIX security tags. SpiderRock also supports most traditional methods of designating securities using normal FIX security tags.
Exchange ticker symbol can be communicated in Symbol<55> with symbol suffixes communicated with SymbolSfx<65>. However, the symbol and suffix may be communicated together, either in Symbol<55>, or in SecurityID<48> with the IDSource<22> = 8 (Exchange Symbol).
The issuing authority is communicated using SecurityExchange<207> or SRTickerSrc<5018>. Note that NMS is the issuing authority for all US national market equity tickers and equity option roots. If not otherwise specified, NMS is assumed.
The issuing authority for single-listed futures and futures options is represented by the exchange’s acronym (e.g. ICE, CME, CBOT, COMEX, NYMEX, etc.). See Appendix A for a complete list of issuing authority exchange acronyms recognized by SpiderRock. To specify futures and options on futures either SecurityExchange<207> or SRTickerSrc<5018> must be specified.
Security type may be expressed using either CFICode<461> or by using the SecurityType<167> field (along with the PutOrCall<201> field for equity and future options).
SpiderRock also accepts an OSI code in Symbol<55> for OPRA options.
For standard listings of futures and options on futures, SpiderRock accepts the full exchange product code in Symbol<55>; this in lieu of a separately populated MaturityMonthYear<200> field.
Use StrikePrice<202> to specify equity and futures option strike prices.
Expirations and maturities for standard security listings may be stated with either the MaturityDate<541> field or by using MaturityMonthYear<200> in combination with the MaturityDay<205> field.
For Multileg orders, use the corresponding symbology fields having the “Leg” prefix, e.g. LegSymbol<600>, LegSecurityType<609>.
Tag | Field Name | Req'd | Type | Comments |
---|---|---|---|---|
207 | Security Exchange | N | string | Market used to identify a security’s issuing authority. See Appendix A for those accepted by SpiderRock. For Futures and Options on Futures the issuing authority must be supplied in SecurityExchange<207>. For Equities and Equity Options (i.e. SecurityType<167> = CS, OPT, <blank>), if the issuing authority SecurityExchange<207> is not explicitly supplied, NMS is assumed. |
461 | CFICode | N | string | ES = Equity Common Shares [CS] F = Future [FUT] OC = Option - Call [OPT] OP = Option - Put [Opt] |
201 | PutOrCall | N | int | Alternative to using CFICode<461>. 0 = Put 1 = Call |
167 | SecurityType | N | string | Alternative to using CFICode<461>. Must be specified for Futures and Options. If not specified, Equity is assumed. FUT - Futures OPT - Equity/Futures Option CS or <empty> - Equity |
55 | Symbol | Y | string | Exchange symbol May incorporate symbol suffix, e.g. VIA.A For OPRA options, SpiderRock accepts an OSI code in this field. For standardized futures products, maturity information can be included in this field, e.g. GCZ2 (for the Dec-22 Comex Gold Future) |
65 | SymbolSfx | N | string | SymbolSuffix |
22 | IDSource | N | string | 8 = Exchange Symbol is accepted when used in conujunction with SecurityID<48> to communicate the Exchange Symbol. |
48 | SecurityID | N | string | Exchange symbol, when IDSource = 8 and Symbol<55> is blank. |
541 | MaturityDate | N | string | For Futures and Options YYYYMMDD |
200 | MaturityMonthYear | N | string | Alternative to using MaturityDate<541> YYYYMM |
205 | MaturityDate | N | int | Alternative to using MaturityDate<541> 1-31 |
202 | StrikePrice | N | price | Option strike price |
Examples:
Equity Example:
VIA.B
55=VIA, 65=B (preferred)
55=VIA.B
22=8, 48=VIA.B
22=8, 48=VIA.B, 207=NMS
Equity Option Example:
VIA.B Equity Option – 95 PUT JAN 2018:
167=OPT, 55=VIA.B, 207=NMS, 200=201801, 201=0, 202=95
167=OPT, 55=VIA, 65=B, 200=201801, 201=0, 202=95
Futures Examples:
COMEX Gold Future - DEC 2022:
167=FUT, 55=GC, 200=202212, 207=COMEX
167=FUT, 55=GC, 207=COMEX, 22=8, 48=GCZ2
ICE Russell Index - DEC 2017:
167=FUT, 55=TF, 200=201712, 207=ICE
167=FUT, 55=TF, 22=8, 48=5414698, 207=ICE
CME E-mini S&P 500 Future - MAR 2018
167=FUT, 55=ES, 200=201803, 207=CME
167=FUT, 55=ES, 22=8, 48=ESH8, 207=CME
Future Option Example:
COMEX Gold DEC 2022 Futures Option - 1850 CALL MAR 2017
167=OPT, 55=OG, 201=1, 202=1850, 200=201703 207=COMEX
CME E-mini S&P 500 MAR 2018 Futures Option – 238000.0 CALL DEC 2017
167=OPT, 55=ES, 201=1, 202=238000, 200=201712, 207=CME
- Note: when sending ExecutionReports back to clients, SpiderRock will reflect back the symbology used in sending the original order. For example, if the original order was specified used SRSecKey<5015> then the resulting execution reports would contain the same tag.
Alternatively, if the original order utilized tags (167, 55, 200, 201, 202, and 207) were used to communicate the security then these same tags would appear in corresponding execution reports.
Prices
SpiderRock accepts prices to any number of decimal places; however, prices with precision exceeding an exchange’s legal price increment (tick) are rounded before forwarded to the exchange.
SpiderRock reports prices (fills, average prices) to the exchange’s tick precision plus 2 decimal places.
Equity and equity option prices should be priced in dollars (1.00 = 1 dollar). Future and options on futures should be priced in the instrument’s exchange price unit.
While we discourage use of custom price scaling, you can specify this at the time of session certification if necessary.
Dates and Times
SpiderRock accepts UTC time formats either with or without milliseconds. SpiderRock reports UTC time with milliseconds.
FIX Header
SpiderRock follows either FIX 4.2 or FIX 4.4 message header requirements; however, both FIX 4.2 and FIX 4.4 style body tags are acceptable.
FIX Trailer
SpiderRock follows either FIX 4.2 or FIX 4.4 message trailer requirements.
Session Overview
Logon
The Logon<A> message authenticates a user who establishes a connection to a remote system. The Logon<A> message must be the first message sent by the application to initiate the FIX session.
The Logon<A> message’s HeartBtInt<108> field defines the period after which a quiet session will send a heartbeat message. The same period is used by both sides. The HeartBtInt<108> value set by the session initiator should be echoed back by the session acceptor.
Upon receipt of a Logon<A> message, the SpiderRock FIX Order Gateway authenticates the requesting party and acknowledges the session by sending a Logon<A> message back to the initiator. If SpiderRock cannot establish a session, a Logout<5> message is sent.
The session initiator can choose to begin transmission of FIX messages before receipt of the session acceptance message; however, it is recommended that normal message delivery wait until after the Logon<A> acknowledgment is received.
Tag | Field Name | Req'd | Comments |
---|---|---|---|
Standard Header | Y | MstType = A | |
108 | HeartBtInt | Y | No greater than 5 seconds |
141 | ResetSeqNumFlag | N | If Y, session sequence number resets to 1 |
Standard Trailer | Y |
Logout
The Logout<5> message initiates or confirms the closing of a FIX session.
If SpiderRock initiates the logout, it will attempt to cancel all open orders, and then pause for up to 5 seconds, to allow order state to be communicated. A logout message will then be sent. SpiderRock will close the connection after the client Logout<5> confirmation is received, or after 5 seconds, if there is no reply from the client.
If the SpiderRock client initiates the logout, SpiderRock will attempt to cancel all open orders, and then pause for up to 5 seconds, to allow order state to be communicated. A logout message will then be sent and the connection will be closed.
Tag | Field Name | Req'd | Comments |
---|---|---|---|
Standard Header | Y | MstType = 5 | |
58 | Text | N | |
Standard Trailer | Y |
Heartbeat
Tag | Field Name | Req'd | Comments |
---|---|---|---|
Standard Header | Y | MstType = 0 | |
112 | TestReqID | N | |
Standard Trailer | Y |
Reject (Session)
If an invalid message is received, e.g. one containing
- unsupported message type
- missing header fields
- invalid repeating groups
- field whose length exceeds the 255-character FIX limit,
a Reject<3> message will be sent, which contains a SessionLevelReject<373> reason code.
Tag | Field Name | Req'd | Comments |
---|---|---|---|
Standard Header | Y | MstType = 3 | |
45 | RefSeqNum | Y | MsgSeqNum of rejected message (will be 0 if not present on original message). |
371 | RefTagID | N | Tag number of the field being rejected |
372 | RefMsgType | N | |
373 | SessionRejectReason | N | 0 - Invalid tag number 1 - Required tag missing 2 - Tag not defined for this message type 3 - Undefined Tag 4 - Tag specified without a value 5 - Value is incorrect (out of range) for this tag 6 - Incorrect data format for value 7 - Decryption problem 8 - Signature problem 9 - CompID problem 10 - SendingTime accuracy problem 11 - Invalid MsgType Codes Not used by SpiderRock |
58 | Text | N | |
Standard Trailer | Y |
ResendRequest
A ResendRequest<2> message is used by the SpiderRock client to initiate the retransmission of messages. It can be used to manage the following circumstances.
- sequence number gap
- lost message
- session recovery
The ResendRequest<2> message can be used to request a single message, a range of messages, or all messages following a specific sequence number.
Tag | Field Name | Req'd | Comments |
---|---|---|---|
Standard Header | Y | MstType = A | |
7 | BeginSeqNo | Y | SpiderRock will accept 0, but never send 0 |
16 | EndSeqNo | Y | May be zero |
Standard Trailer | Y |
TestRequest
Tag | Field Name | Req'd | Comments |
---|---|---|---|
Standard Header | Y | MstType = 1 | |
112 | TestReqID | Y |
Sequence Reset
Tag | Field Name | Req'd | Comments |
---|---|---|---|
Standard Header | Y | MstType = 4 | |
123 | GapFillFlag | N | SpiderRock will accept 0, but never send 0 |
36 | NewSeqNo | Y | |
Standard Trailer | Y |
Appendix A - Issuing Authority
Issuing authority symbol prefixes accepted in SecurityExchange<207> by SpiderRock.
Prefix | Issuing Authority |
---|---|
CBOT | CBOT – CME Group |
CFE | Chicago Future Exchange |
CME | Chicago Mercantile Exchange – CME Group |
COMEX | COMEX – CME Group |
ICE | Intercontinental Exchange |
NMS | US Equity National Market System Tickers (NYSE, NASDAQ, AMEX, etc) |
NYMEX | NYMEX – CME Group |
Appendix B - LastMkt/ExDest Values
These values are based on the MIC Codes.
Exchange | Stock | Options | Spreads/Cob |
---|---|---|---|
AMEX | XASE | AMXO | |
ARCA | ARCX | ARCO | |
BATS | BATS | BATO | |
BATS-Y | BATY | ||
BOX | XBOX | ||
CBOE | XCBO | XCBO | |
C2 | C2OX | ||
EDGA | EDGA | ||
EDGX | EDGX | ||
ISE Gemini | GMNI | ||
ISE | XISX | XISX | |
Miami MIAX | XMIO | ||
NYSE | XNYS | see ARCA | |
NASDAQ | XNAS | XNDQ | |
NASDAQ BX | XBOS | XBXO | |
PHLX | XPHL | XPHL | |
AMEX | XASE | AMXO | |
ARCA | ARCX | ARCO | |
BATS | BATS | BATO | |
ISE Mercury | MCRY | MCRY | |
Edge Options | EDGO | ||
IEX | IEXG |
Appendix C - Reject Codes - SRRejectCode<5605>
0 = None | 32 = DupLegID | 64 = badLegKeyType | 96 = MarMaxFc2 |
1 = AccntHold | 33 = MixedRoots | 65 = UnknwnRefStk | 97 = MarNoRec3 |
2 = UnknwnOpt | 34 = OffMkt | 66 = BadRefMktPrc | 98 = MarDisabled3 |
3 = UnknwnStk | 35 = CentVol | 67 = UnknwnRefFut | 99 = MarMaxCn3 |
4 = Expired | 36 = CentLeg | 68 = UnknwnRefAtm | 100 = MarMaxSh3 |
5 = BadSize | 37 = CentRn | 69 = BadRefVe | 101 = MarOptMny3 |
6 = BadOrdNum | 38 = CentSAtm | 70 = BadProdDef | 102 = MarStkMny3 |
7 = DupordNum | 39 = CentSpln | 71 = MarNopRec | 103 = MarRestricted3 |
8 = BadVolPx | 40 = CentErr | 72 = MarDisabled | 104 = MarCrdtAcc3 |
9 = badLmtType | 41 = NoRiskGrp | 73 = MarMaxCn | 105 = MarCrdtDay3 |
10 = BadMktPrc | 42 = BadDDivs | 74 = marMaxSh | 106 = MarTotExp3 |
11 = BadLimit | 43 = NoPricer | 75 = MarOptMny | 107 = MarOddLot3 |
12 = SysReject | 44 = CalcErr | 76 = MarStikMny | 108 = MarFutMny3 |
13 = TestOrder | 45 = TwapLate | 77 = MarRestricted | 109 = MarMaxFc3 |
14 = CustType | 46 = TwapTime | 78 = MarCrdtAcc | 110 = SpdrMaxSh |
15 = NoFirmPos | 47 = NoAcctMap | 79 = MarCrdtDay | 111 = SpdrMaxFc |
16 = BadCent | 48 = UserUnk | 80 = MarTotExp | 112 = SpdrMaxCn |
17 = NoSurface | 49 = UserHold | 81 = MarOddLot | 113 = SpdrStkMny |
18 = UnknwnAcc | 50 = GTCHold | 82 = MarFutMny | 114 = SpdrFutMny |
19 = UnknwnRoot | 51 = SysException | 83 = MarMaxFc | 115 = SpdrOptMny |
20 = OrdSpacing | 52 = StkCrossed | 84 = MarNoRec2 | 116 = SpdrHold |
21 = BadOptMkt | 53 = BadOrdType | 85 = MarDisabled2 | 117 = SpdrOptNv |
22 = BadStkMkt | 54 = BadSSaleFlag | 86 = MarMaxCn2 | 118 = SpdrDayCn |
23 = SendFailed | 55 = NoBorrow | 87 = MarMaxSh2 | 119 = SpdrDayFc |
24 = BadExpose | 56 = NoFacilitateAccnt | 88 = MarOptMny2 | 120 = SpdrDaySh |
25 = BadPrem | 57 = UnknwnFut | 89 = MarStkMny2 | 121 = SpdrDayNv |
26 = NoOptLeg | 58 = MktNotOpen | 90 = MarRestricted2 | 122 = SpdrFutPosDeAbs |
27 = Min2Leg | 59 = NoRoutes | 91 = MarCrdtAcc2 | 123 = SpdrFutDayDeAbs |
28 = Max6Leg | 60 = NoLocate | 92 = MarCrdtDay2 | 124 = SpdrFutDayDeBot |
29 = BadStkSz | 61 = SSaleRstr | 93 = MarTotExp2 | 125 = SpdrFutDayDeSld |
30 = BadRatio | 62 = NoLegs | 94 = MarOddLot2 | 126 = SpdrExpPosDeAbs |
31 = BadLegID | 63 = BadSide | 95 = MarFutMny2 | 127 = SpdrExpDayDeAbs |
128 = SpdrExpDayDeBot | 160 = NoProdDef | ||
129 = SpdrExpDayDeSld | 161 = NoProdDef | ||
130 = UserRisk | 162 = InvldAutoH | ||
131 = UserMaxCn | 163 = LegChange | ||
132 = UsermaxSh | 164 = CxlSpacing | ||
133 = UserOptMny | 165 = BadHedgeInst | ||
134 = UserStkMny | 166 = TooLateToReduce | ||
135 = UserFutMny | 167 = PendCxlRepl | ||
136 = UserOptNv | 168 = InvldCxlRepl | ||
137 = UserDayCn | 169 = InvldCxl | ||
138 = UserDayNv | 170 = DmaReject | ||
139 = UserDayFc | 171 = NoUPrc | ||
140 = UserDaySh | 172 = TwapSteps | ||
141 = USymFutMny | 173 = UnknwnFirm | ||
142 = UserMaxFc | |||
143 = USyMMaxFc | |||
144 = USymHold | |||
145 = USymMaxCn | |||
146 = USymMaxSh | |||
147 = USymOptMny | |||
148 = USymStkMny | |||
149 = USymOptNv | |||
150 = USymDayCn | |||
151 = USymDayNv | |||
152 = USymDayFc | |||
153 = USymDaySh | |||
154 = AccFrozen | |||
155 = ConfigErr | |||
156 = NoFMFuture | |||
157 = NoSpdrSymCtrl | |||
158 = NoSpdrSymExpCtrl | |||
159 = NoLinkage |