Skip to main content
Version: 8.4.08.4

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

TagField NameReq'dTypeComments
207Security ExchangeNstringMarket 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.
461CFICodeNstringES = Equity Common Shares [CS]
F = Future [FUT]
OC = Option - Call [OPT]
OP = Option - Put [Opt]
201PutOrCallNintAlternative to using CFICode<461>.
0 = Put
1 = Call
167SecurityTypeNstringAlternative 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
55SymbolYstringExchange 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)
65SymbolSfxNstringSymbolSuffix
22IDSourceNstring8 = Exchange Symbol is accepted when used in conujunction with SecurityID<48> to communicate the Exchange Symbol.
48SecurityIDNstringExchange symbol, when IDSource = 8 and Symbol<55> is blank.
541MaturityDateNstringFor Futures and Options
YYYYMMDD
200MaturityMonthYearNstringAlternative to using MaturityDate<541>
YYYYMM
205MaturityDateNintAlternative to using MaturityDate<541>
1-31
202StrikePriceNpriceOption 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: that 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) 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.

TagField NameReq'dComments
Standard HeaderYMstType = A
108HeartBtIntYNo greater than 5 seconds
141ResetSeqNumFlagNIf Y, session sequence number resets to 1
Standard TrailerY

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.

TagField NameReq'dComments
Standard HeaderYMstType = 5
58TextN
Standard TrailerY

Heartbeat

TagField NameReq'dComments
Standard HeaderYMstType = 0
112TestReqIDN
Standard TrailerY

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.

TagField NameReq'dComments
Standard HeaderYMstType = 3
45RefSeqNumYMsgSeqNum of rejected message (will be 0 if not present on original message).
371RefTagIDNTag number of the field being rejected
372RefMsgTypeN
373SessionRejectReasonN0 - 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
58TextN
Standard TrailerY

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.

TagField NameReq'dComments
Standard HeaderYMstType = A
7BeginSeqNoYSpiderRock will accept 0, but never send 0
16EndSeqNoYMay be zero
Standard TrailerY

TestRequest

TagField NameReq'dComments
Standard HeaderYMstType = 1
112TestReqIDY

Sequence Reset

TagField NameReq'dComments
Standard HeaderYMstType = 4
123GapFillFlagNSpiderRock will accept 0, but never send 0
36NewSeqNoY
Standard TrailerY

Appendix A - Issuing Authority

Issuing authority symbol prefixes accepted in SecurityExchange<207> by Spiderrock.

PrefixIssuing Authority
CBOTCBOT – CME Group
CFEChicago Future Exchange
CMEChicago Mercantile Exchange – CME Group
COMEXCOMEX – CME Group
ICEIntercontinental Exchange
NMSUS Equity National Market System Tickers (NYSE, NASDAQ, AMEX, etc)
NYMEXNYMEX – CME Group

Appendix B - LastMkt/ExDest Values

These values are based on the MIC Codes.

ExchangeStockOptionsSpreads/Cob
AMEXXASEAMXO
ARCAARCXARCO
BATSBATSBATO
BATS-YBATY
BOXXBOX
CBOEXCBOXCBO
C2C2OX
EDGAEDGA
EDGXEDGX
ISE GeminiGMNI
ISEXISXXISX
Miami MIAXXMIO
NYSEXNYSsee ARCA
NASDAQXNASXNDQ
NASDAQ BXXBOSXBXO
PHLXXPHLXPHL
AMEXXASEAMXO
ARCAARCXARCO
BATSBATSBATO
ISE MercuryMCRYMCRY
Edge OptionsEDGO
IEXIEXG

Appendix C - Reject Codes - SRRejectCode<5605>

0 = None32 = DupLegID64 = badLegKeyType96 = MarMaxFc2
1 = AccntHold33 = MixedRoots65 = UnknwnRefStk97 = MarNoRec3
2 = UnknwnOpt34 = OffMkt66 = BadRefMktPrc98 = MarDisabled3
3 = UnknwnStk35 = CentVol67 = UnknwnRefFut99 = MarMaxCn3
4 = Expired36 = CentLeg68 = UnknwnRefAtm100 = MarMaxSh3
5 = BadSize37 = CentRn69 = BadRefVe101 = MarOptMny3
6 = BadOrdNum38 = CentSAtm70 = BadProdDef102 = MarStkMny3
7 = DupordNum39 = CentSpln71 = MarNopRec103 = MarRestricted3
8 = BadVolPx40 = CentErr72 = MarDisabled104 = MarCrdtAcc3
9 = badLmtType41 = NoRiskGrp73 = MarMaxCn105 = MarCrdtDay3
10 = BadMktPrc42 = BadDDivs74 = marMaxSh106 = MarTotExp3
11 = BadLimit43 = NoPricer75 = MarOptMny107 = MarOddLot3
12 = SysReject44 = CalcErr76 = MarStikMny108 = MarFutMny3
13 = TestOrder45 = TwapLate77 = MarRestricted109 = MarMaxFc3
14 = CustType46 = TwapTime78 = MarCrdtAcc110 = SpdrMaxSh
15 = NoFirmPos47 = NoAcctMap79 = MarCrdtDay111 = SpdrMaxFc
16 = BadCent48 = UserUnk80 = MarTotExp112 = SpdrMaxCn
17 = NoSurface49 = UserHold81 = MarOddLot113 = SpdrStkMny
18 = UnknwnAcc50 = GTCHold82 = MarFutMny114 = SpdrFutMny
19 = UnknwnRoot51 = SysException83 = MarMaxFc115 = SpdrOptMny
20 = OrdSpacing52 = StkCrossed84 = MarNoRec2116 = SpdrHold
21 = BadOptMkt53 = BadOrdType85 = MarDisabled2117 = SpdrOptNv
22 = BadStkMkt54 = BadSSaleFlag86 = MarMaxCn2118 = SpdrDayCn
23 = SendFailed55 = NoBorrow87 = MarMaxSh2119 = SpdrDayFc
24 = BadExpose56 = NoFacilitateAccnt88 = MarOptMny2120 = SpdrDaySh
25 = BadPrem57 = UnknwnFut89 = MarStkMny2121 = SpdrDayNv
26 = NoOptLeg58 = MktNotOpen90 = MarRestricted2122 = SpdrFutPosDeAbs
27 = Min2Leg59 = NoRoutes91 = MarCrdtAcc2123 = SpdrFutDayDeAbs
28 = Max6Leg60 = NoLocate92 = MarCrdtDay2124 = SpdrFutDayDeBot
29 = BadStkSz61 = SSaleRstr93 = MarTotExp2125 = SpdrFutDayDeSld
30 = BadRatio62 = NoLegs94 = MarOddLot2126 = SpdrExpPosDeAbs
31 = BadLegID63 = BadSide95 = MarFutMny2127 = SpdrExpDayDeAbs
128 = SpdrExpDayDeBot160 = NoProdDef
129 = SpdrExpDayDeSld161 = NoProdDef
130 = UserRisk162 = InvldAutoH
131 = UserMaxCn163 = LegChange
132 = UsermaxSh164 = CxlSpacing
133 = UserOptMny165 = BadHedgeInst
134 = UserStkMny166 = TooLateToReduce
135 = UserFutMny167 = PendCxlRepl
136 = UserOptNv168 = InvldCxlRepl
137 = UserDayCn169 = InvldCxl
138 = UserDayNv170 = DmaReject
139 = UserDayFc171 = NoUPrc
140 = UserDaySh172 = TwapSteps
141 = USymFutMny173 = 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