Cboe Titanium Cboe Futures Exchange FIX Specification

Introduction

Cboe Futures Exchange (CFE) Trading Privilege Holders (TPHs) use a subset of the FIX 4.2 protocol for order entry and drop copies. Order entry for both futures instruments and options instruments will be available on the same FIX session. Features only applicable to Options on Futures will be notated with (Options Only).

It is assumed that the reader is familiar with the FIX 4.2 protocol as described at https://www.fixtrading.org. This document describes the differences between the CFE implementation and the FIX 4.2 standard.

Please refer to https://www.cboe.com/us/futures for updates and further information on CFE policies and procedures.

Certification Requirement

All customers must complete a formal certification in the appropriate Cboe Certification test environment before production orders or quotes will be accepted by Cboe. Formal certification scripts can be found in the Cboe Customer Web Portal. Customers may complete the formal certification using the Certification Tool app and selecting the applicable certification script. Customers are advised to test all functionality they plan to use in production in the Cboe Certification test environment.

Hours of Operation

Refer to the website for the CFE Hours and Holidays.

All orders are live upon acceptance by CFE. Orders are rejected if they are received outside the sessions as defined in the associated product contract specifications.

For more information on the CFE Opening Process, please refer to theCboe Titanium Cboe Futures Exchange Opening Process.

CFE trading hours on vary by product. The simulated Pre-Open period for ZVXT will begin within the same randomized three second time range during which VXT will go into a Pre-Open state. See the product contract specifications for details on trading hours for each product, which may differ for expiring and non-expiring contracts.

FIX sessions are available for connection on Sunday starting at 10:30 a.m. CT. FIX sessions will disconnect each day between 4:05 and 4:45 p.m. CT for the daily restart. This will reset all sequences to zero in preparation for the next trading segment. FIX sessions will disconnect on Friday at around 4:05 p.m. CT but will remain available for connectivity testing (telnet testing) until startup on the following Sunday.

Holiday Sessions

Submission Time Frames for Holidays

The chart below sets forth certain time frames for the submission of quotes and orders (including Order Cancel Request messages and Order Cancel/Replace messages) for products that are open for trading in connection with a holiday. All times referenced are Central Time.

Time FrameCFE Trading System StateWhat May be Submitted to CFE’s Trading System
From the close of a product's trading session to five minutes after the latest-product closing of that session.Cancel-Only PeriodCancels for all persisted orders and quotes.1
From the end of the cancel-only period to system start/restart (which occurs sometime between 10:00 a.m. CT and 10:15 a.m. CT on a Sunday and sometime between 4:05 p.m. CT and 4:30 p.m. CT on a weekday). Suspended Nothing
From approximately 10 minutes prior to product's pre-open to beginning of pre-open.SuspendedCancels for persisted Good-'til-Cancel (GTC) and Good-'til-Date (GTD) Orders from prior trading date and Cancels for persisted Day Quotes and Orders from same trading date (if applicable)
See Product Trading Hours2 Pre-OpenQuotes and Orders (except Market, Immediate or Cancel (IOC), and Fill or Kill (FOK) Orders)3
Trading hours during a holiday trading session.Extended Trading HoursQuotes and Orders (except Market Orders).

1The Cancel-Only Period begins immediately following the end of trading in each product and will continue for 5 minutes after the end of trading in the latest-closing product within that segment.

2The pre-open period at the beginning of a business day or holiday trading session for Trade-At-Settlement (TAS) single leg contract expirations and TAS spreads commences at the referenced start time for the pre-open period plus a randomized time period from 0 to 3 seconds. The pre-open period at the beginning of a business day or holiday trading session for non-TAS single leg contract expirations and non-TAS spreads commences at the referenced start time for the pre-open period plus a randomized time period from 3 to 6 seconds.

3Orders permitted to be submitted to the CFE trading system during these times are not executable until extended trading hours next commence.

Session Disconnect for Holidays

A session disconnect will occur during the suspended state between two segments of a holiday trading session. This disconnect will not cause any orders or quotes to cancel due to Cancel on Disconnect. As a general rule, Cancel on Disconnect is not in effect between the end of the cancellation period and the system restart. TPHs may refer to the FIX and BOE specifications for further information on how to configure Cancel on Disconnect settings.

Data Types

Timestamps

All FIX timestamps are GMT as per the FIX standard. TPHs are expected to synchronize their clocks with an external time source.

Prices

Price fields (e.g., Price (55), LastPx, (31), StopPx (99), AvgPx (6)) can contain positive, negative and zero values as a result of Spread instrument support. Order prices (e.g., Price (44), StopPx (99)), must comply with product-specific minimum trading price increments as specified in associated product contract specifications.

TPHs should program systems to allow execution prices to be returned with up to four decimals.

Protocol Features

The exchange does not guarantee messages sent by Members/TPHs to the exchange, including through protocols such as TCP. Members/TPHs are responsible to monitor the status of the messages they send to the exchange.

Architecture and Message in Flight Settings

Each FIX order handler process will allow a single TCP connection from a member. Connection attempts from unknown source IP ranges will be blocked to prevent unauthorized access to FIX ports. The Cboe NOC should be contacted in the event that a Member desires to connect from a new source IP range.

Each FIX order handler will connect, using a proprietary UDP protocol, to all matching units. Connections from order handlers to matching engines are latency equalized. The connections between order handlers and matching units are governed by an internal flow control mechanism to control burst rates.

Effective 07/13/26:

The maximum number of messages in flight between a FIX or BOE order handler and a CFE matching engine is 64. In addition, when the total number of unacknowledged messages between an order handler and all CFE matching engines exceeds 1024, the order handler will stop reading from the TPH-facing TCP socket. This will cause the order handler to stop removing bytes from the TCP receive buffer and will prevent the TPH from sending more TCP data through the order handler once the TPH's own configured send buffer is full.

When the total number of unacknowledged messages falls below 960, the order handler will resume reading from the TPH-facing TCP socket.

Messages in flight are defined as messages that have been sent by an order handler to a CFE matching engine that have not yet been acknowledged. Each application message sent by a CFE TPH (e.g., a new order, quote update, cancel/replace, cancel, or purge message) counts as one message for this purpose. An order handler includes a CFE FIX or unitized BOE order or quoting match capacity allocation or purge port.

CFE may update either the message in flight or the total number of unacknowledged messages settings with notice. Changes to reduce either limit will be made with a notice period of at least two weeks. CFE reserves the ability to increase either limit immediately with notice.

Carried Order Restatements

Good ‘til Cancel (GTC) orders, Good ‘til Date-Time (GTD) orders, and Day orders entered during partial holiday sessions can result in orders persisting between sessions. The CFE FIX protocol provides a mechanism for clients to request restatement of orders that have been carried forward from the previous business day trading session. See FIX Order Entry Port Attributes for information on available port attributes, including Carried Order Restatements.

When enabled, Carried Order Restatements are sent to connected clients for each product on the CFE for which orders have been carried forward from the previous business day trading session. Carried Order Restatements are sent approximately 10 minutes before the pre-open period for each product.

Carried Order Restatements are represented using Execution Report messages with the following optional attributes set:

  • ExecTransType = 3 (Status)
  • ExecType = D (Restated)
  • ExecRestatementReason:
    • GTC, GTD: ExecRestatementReason = 1 (GT renewal)
    • Day: ExecRestatementReason = 4 (Day order restatement)

To receive Carried Order Restatements, the Carried Order Restatement port attribute must be set (contact CFE Trade Desk). Since the Carried Order Restatement Execution Report messages are delivered to the session handler before the TPH connects, the MsgSeqNum (34) field of the Logon Message received by the TPH reflects the number of Carried Order Restatements that are available to retrieve by using a subsequent Resend Request message.

Note that no notification is provided at the end of a trading session to indicate when GTC, GTD, or Day orders on partial holiday sessions are persisted to carry over to the next trading sessions. Instead, Carried Order Restatements can be used by members to be notified of orders that have persisted from the previous session.

The number of GTC/GTD orders in test classes that can be carried over from the prior business day is limited to three GTC/GTD orders per session per matching unit, for a total of six GTC/GTD orders per session.

Cancellation of Carried Orders or Quotes Between Sessions

GTC and GTD orders persist within CFE's trading system between CFE business days. By default, GTC, GTD, and Day orders/quotes persist between multiple trading sessions on the same business day in connection with a holiday. Persisted orders/quotes can be cancelled while the associated product is in a suspended state and during other trading states as described above.

At the end of the scheduled Cancel-Only Period for a product, cancellation requests for persisted orders/quotes in that product will be rejected with reason O = Order known, but cannot be canceled at this time until after the next trading segment when persisted orders/quotes are reloaded on the book. After the orders/quotes are reloaded on the book, they can be cancelled from that time until the end of the scheduled Cancel-Only Period for a product. In other words, the period of time in which persisted orders/quotes cannot be canceled starts at the end of the scheduled Cancel-Only Period for the associated product and ends after the persisted orders/quotes are reloaded on the book, after the system restarts.

Note that port Cancel on Disconnect behavior is in effect from the time persisted orders are reloaded to the book to the end of the Cancel-Only period. Clients may modify this port attribute via the logical port request tool available on the customer web portal.

The Multi-Segment Holiday Day Order Handling port attribute will enable TPHs to designate if Day orders and quotes are cancelled or preserved across holiday trading segments comprising a single business date.

Table 1. Regular Trading Example
PeriodDescriptionTime
System StartSystem starts up but no new orders, modifies, nor cancellations are accepted. ~10:00 a.m. CT on Sunday
Pre-Open and Regular TradingNew orders may be entered. Existing persisted orders may be modified or cancelled starting approximately 10 minutes before Pre-Open period begins for each productTime varies by product
Product Close (PITCH status S)Day orders are cancelled. Time varies by product
Cancel-Only PeriodOrders and quotes can be cancelled during a product's cancel-only period. GTC and GTD orders are persisted to the next trading date at the end of the cancel-only period.From product close to 4:05 p.m. CT on Monday
System Restart1System starts up but no new orders, modifies, nor cancellations are accepted.4:05 p.m. - 4:30 p.m. CT on Monday
Table 2. Monday Holiday Example
PeriodDescriptionTime
System StartSystem starts up but no new orders, modifies, nor cancellations are accepted.~10:00 a.m. CT on Sunday
Pre-Open and Regular Trading for Segment 1New orders may be entered. Existing persisted orders may be modified or cancelled starting approximately 10 minutes before Pre-Open period begins for each productTime varies by product
Product Close for Segment 1 (PITCH status S)No new orders are accepted.10:30 a.m. CT on Monday
Cancel-Only PeriodOrders and quotes can be cancelled during a product's cancel-only period. Live GTC and GTD orders are persisted to segment 2. Day Order persistence is dependent on port attribute210:30 a.m. - 10:35 a.m. CT on Monday
System Restart1System starts up but no new orders, modifies, nor cancellations are accepted. Segment 2 will begin after system restart.4:05 p.m. - 4:30 p.m. CT on Monday
Table 3. Tuesday Half-Day Followed By Wednesday Holiday Example
PeriodDescriptionTime
Tuesday Half-Day
System StartSystem starts up but no new orders, modifies, nor cancellations are accepted.4:05 p.m. - 4:30 p.m. CT on Monday
Pre-Open and Regular TradingNew orders may be entered. Existing persisted orders may be modified or cancelled starting approximately 10 minutes before Pre-Open period begins for each productTime varies by product
Product Close (PITCH status S)Day orders are cancelled.Time varies by product
Cancel-Only PeriodGTC and GTD orders may be cancelled. Remaining GTC and GTD orders are persisted to the next trading date.From product close to 12:20 p.m. CT on Tuesday
Wednesday Holiday
System Restart1System starts up but no new orders, modifies, nor cancellations are accepted.4:05 p.m. - 4:30 p.m. CT on Tuesday
Pre-Open and Regular Trading for Segment 1 New orders may be entered. Existing persisted orders may be modified or cancelled starting approximately 10 minutes before Pre-Open period begins for each product.Time varies by product
Product Close for Segment 1 (PITCH status S)No new orders are accepted.10:30 a.m. CT on Wednesday
Cancel-Only PeriodOrders and quotes may be cancelled. Live GTC and GTD orders are persisted to segment 2. Day Order persistence is dependent on port attribute210:30 a.m. - 10:35 a.m. CT on Wednesday
System Restart1System starts up but no new orders, modifies, nor cancellations are accepted. Segment 2 begins after system restart.4:05 p.m. - 4:30 p.m. CT on Wednesday

1The disconnect/reconnect sequence of a system restart generally take less than ten minutes and could occur anytime between 4:05 p.m. and 4:30 p.m. CT.

2See the Multi-Segment Holiday Day Order Handling port attribute.

Post-Settlement Execution Restatements

Execution Report messages received at the time of the trade in Trade-At-Settlement (TAS) should be considered initial notification of trade. In all three of these products, information available only after the settlement time of the associated contract is required before the trade can be cleared. The following describe the post-settlement processing required for each applicable product:

Execution prices of TAS trades will represent an offset to the end-of-day settlement price of the associated futures contract. For example, a trade executed at 0.02 in a VXT contract is an agreement to buy and sell VX contracts of the same expiration at a price that 2-cents above the end-of-day settlement price, which is available after 3:00 p.m. CT. When VX end-of-day settlements are available, TAS trades executed during the business date will be resolved by updating the execution price and changing the symbol to the associated futures contract. TAS trades will be cleared as regular futures contract (i.e. VX) trades.

Trades executed intraday are acknowledged back to participants using standard Execution Report messages. The first Execution Report message received in these products is considered a Pending trade. CFE follows up each initial (i.e., pending) TAS execution with post-settlement Execution Report messages with the following field values:

  • ExecTransType = 2 (Correct)
  • ExecType = D (Restated)

In addition, custom fields are added to the follow-up Execution Report messages (see Custom FIX Fields). The following summarizes the restatement details for each product:

TAS trades will be restated with the same ExecID and ClOrdID as the original trade. The as-executed symbol, price and size are maintained in the Symbol, LastPx and LastShares fields respectively. The symbol with which the TAS execution will clear (i.e., the VX symbol with the equivalent expiration as the as-executed VXT symbol) will be contained in the ClearingSymbol (21053) field. The price with which the TAS execution will clear (i.e., the as-executed price from the LastPx field offset by the settlement price of the associated VX contract) will be contained in the ClearingPrice (21050) field.

Post-execution restatement Execution Report messages associated with orders originally submitted with TimeInForce (59) = 4 (FOK) will contain TimeInForce = 3 (IOC) rather than the originally specified 4 value.

Futures Spreads and Signed Prices

Spreads instruments trade on CFE in a well-defined universe of two, three and four legged spreads with a restricted set of ratios and buy/sell conventions as shown in the table below. The notation S(1):B(1) means sell the first (earliest) expiration and buy the second (latest) expiration. The ratios of each leg is one, which means one unit of the spread contract is equivalent to selling 1 unit of the first expiration and buying one unit of the second expiration.

LegsSpreads (B=Buy, S=Sell, ()=Ratio)
2S(1):B(1), B(1):B(1), S(1):B(2), S(2):B(1)
3B(1):B(1):B(1), B(1):S(2):B(1)
4B(1):B(1):B(1):B(1), B(1):S(1):B(1):S(1), B(1):S(1):S(1):B(1)

The bold two leg spread - S(1):B(1) - is a special spread that always exists in the CFE system. As new contracts are listed, the S(1):B(1) two leg spread instruments are automatically created between the new contract and all existing active contracts.

Spread instruments can result in executions where the buyer gets paid and the seller pays. This can be non-intuitive in all but the simplest spreads. Consider the simplest two leg spread VX1:VX2 comprising selling one unit of the VX1 contract and buying one unit of the VX2 contract. To illustrate how buyers can get paid and sellers can pay, we examine spread pricing in Contango and Backwardated price environments.

Figure 1 below illustrates spread pricing in a Contango price environment in which the price of the early expiration contract is lower than the later expiration contract. In this example the Bid/Offer of the VX1 simple contract is 15.00 x 15.50 and the Bid/Offer for the VX2 contract is 16.50 x 16.75. The synthetic market for the VX1:VX2 spread (i.e., the Bid/Offer implied by the leg markets) is 1.00 x 1.75. The bid of 1.00 derives from the fact that the offer on the VX1 leg is 15.50 and the bid on the VX2 leg is 16.50 and the net of the two is 1.00 net debit (i.e., buyer pays). Figure 1 shows the implied spread market in italics. This is the normal intuitive situation where spread buyer pays and seller gets paid.

Figure 1. Contango S(1):B(1) spread price example


Next, consider the same example in the context of a Backward, or Inverted, market in which the price of the early expiration is higher than the price of the later expiration. Figure 2 below illustrates spread pricing in a Backward price environment. The Bid/Offer of the VX1 simple contract Is 16.50 x 17.00 and the Bid/Offer for the VX2 contract is 15.50 x 15.75. The synthetic market for the VX1:VX2 spread is -1.50 x -0.75. The bid of -1.50 derives from the fact that the offer on the VX1 leg is 17.00 and the bid on the VX2 leg is 15.50 and the net of the two is 1.50 net credit (i.e., buyer gets paid).

Figure 2. Backwardation (Inverted) S(1):B(1) spread price example


Spread pricing requires thinking of instrument prices on the entire real number line and not just positive numbers. In the example above the bid is less than the offer as it is left of the offer on the real number line. One can buy at the offer (paying -0.75 = receiving 0.75) and subsequently sell back at the bid (receiving -1.50 = paying 1.50), giving up the bid/offer spread (0.75) in the process; the same as positive prices. This concept generalizes to two and three leg spreads and unequal ratios; prices can just as easily be negative as positive as a result of the pricing environment (i.e., shape of the price curve vs. expiration date) and the spread definition (which legs bought/sold and ratios).

OCC Clearing Reference

The following table can be used to assist firms in mapping values sent in FIX to their associated field names at the OCC. Note that ClearingAccount (FIX Tag 440) is not sent to the OCC.

TagField NameOCC Mapping
115OnBehalfOfCompIDExec Broker
1Account
  • The first ten characters will appear in the Account # field.
  • The entire 16 character string will appear in the Optional CM Data field.
17ExecIDTrade ID
37OrderIdExchange Data
11ClOrdIdOrder ID
439CMTANumberCMTA CM#
440ClearingAccountNot sent to the OCC.

Maximum Open Order Limits

The exchange limits the Maximum number of open orders allowed on a FIX port to 100,000 per port. New orders will be rejected once this limit is breached until the number of open orders drops back below 100,000.

Price Validations (Options Only)

Minimum Price Checks:

CFE will reject any complex/spread limit orders that would result in individual leg prints being priced below $0.01 if executed at that limit price. For example, a complex instrument with a 1:1 ratio containing all buys must have a net limit price of at least $0.02.

CFE will also reject any limit orders where the limit price of the order is less than an exchange determined buffer value for calendar, vertical, diagonal, butterfly, and box spreads. The current default buffer value applied for all spread types and products is zero.

Maximum Price Checks:

CFE will reject any limit orders where the limit price of the order is greater than the intrinsic value of a call or put vertical, butterfly, or box spread plus an exchange determined buffer value. The current buffer applied for this check is 1% of intrinsic value with a minimum of $0.03 and maximum of $0.50.

Protocol

Message Format

FIX messages are ASCII formatted. The TPH will be provided with a SenderCompID and SenderSubId that must be sent on every message. The TargetCompID for all messages the TPH sends will be CFE. All messages the TPH receives will have the Sender and Target fields swapped.

FIX Tags not defined in this specification will be ignored and will not be returned on Execution Reports back to the TPH.

Sequence Numbers

Sequence numbers, both inbound and outbound, will be reset to one daily between 4:00 p.m. CT and 4:45 p.m. CT. Existing FIX connections will be forcibly disconnected at that time each day.

Messages are processed in sequence order. Behind sequence messages (other than Sequence Reset) cause immediate logout. Ahead of sequence messages (other than a Resend Request) trigger a message recovery via a Resend Request.

Version Compatibility

CFE uses the FIX 4.2 session protocol.

Sessions

The following session messages are supported in both directions:

MessageTypeComment
LogonABegin session (or resume a broken session)
Heartbeat0
Test Request1
Resend Request2
Reject3Malformed message or improper session level handling
Sequence Reset4Both Gap Fill (GapFillFlag=Y) and Reset
Logout5Used to gracefully close session

Connectivity

TypeDescriptionInput
IP AddressAddress to connect toSupplied by CFE
TCP PortPort to connect toSupplied by CFE
SenderCompIDSent in every FIX message to CFESupplied by CFE
SenderSubIDSent in every FIX message to CFESupplied by CFE
TargetCompIDSent in every FIX message to CFECFE
TargetSubIDSent in every FIX message to CFE
  • TEST = test system
  • PROD = production

For information on connectivity options to CFE, refer to the Cboe Titanium Cboe Futures Exchange Connectivity Manual.

Logon

TagField NameRequiredDescription
35MsgTypeYA
108HeartbeatIntervalYClient Heartbeat Interval (in seconds).

Logon must be the first message sent by the TPH after the TCP connection is established. EncryptMethod is ignored (FIX level encryption is not supported).

CFE will wait one second after a Logon is received to ensure that no Resend Request messages are in flight from the TPH. A Heartbeat will be sent to indicate that the one second wait period has ended. TPHs should not send any orders prior to receiving this first Heartbeat from CFE.

The IP Address of the TPH, the SenderCompID, SenderSubID, TargetCompID, and TargetSubID ( TEST/PROD) will be validated. If validation fails the connection will be dropped without a reject (to avoid corrupting the TPHs sequence in the case that the TPH merely mistakenly connected to the wrong port).

If connection is unexpectedly broken, upon reconnection the TPH may receive a login reply with a sequence number greater than expected. This means that in-flight messages were missed (likely important execution reports). The TPH should issue a Resend Request to retrieve the missed messages.

Similarly CFE will issue a Resend Request to the TPH for messages that it missed. The TPH may wish to send gap fill messages in place of new orders to avoid re-submission of potentially stale orders.

HeartbeatInterval must be specified by the TPH in the Logon message. This value will be clamped between five and 300 seconds and returned in the logon reply message. We recommend using as low a value as the reliability and latency of your telecommunications channel will allow.

Logon and Carried Order Restatement

If the Carried Order Restatements port attribute is set, unsolicited Execution Report messages representing carried orders loaded by the system at startup will be sent after the Logon response. Carried orders are orders that persist across a trading segment. Trading segments are delimited by periods of time in which the exchange is closed for trading. Good ‘til Cancel (GTC), Good ‘til Date-Time, and Day orders persisting across holiday trading segments comprising a single business date are the only order types that will appear in Carried Order Restatements.

Carried GTC, GTD, and Day orders that span holiday trading segments within a single Business day will use ExecTransType= 3 (status), ExecType= D (Restated) and ExecRestatementReason= 1 (GT renewal / restatement) for GTC and GTD orders and 4 for Day orders.

Heartbeat

Tag Field Name Required Description
35 MsgType Y 0
112 TestReqID N Required in response to a Test Request.

A Heartbeat message should be sent if the agreed upon HeartbeatInterval has elapsed since the last message sent. If any message has been sent during the preceding HeartbeatInterval a Heartbeat message need not be sent.

Test Request

TagField NameRequiredDescription
35MsgTypeY1
112TestReqIDYAuto-generated request ID.

If a HearbeatInterval + one seconds have elapsed since the last message received, a Test Request should be issued. If another HearbeatInterval + one seconds go by without receiving a message the TCP connection should be dropped. This ensures that a broken TCP connection will be detected even if the TCP stack doesn't notice (this has been observed to happen in WAN environments, particularly when a VPN is involved).

Resend Request

TagField NameRequiredDescription
35MsgTypeY2
7BeginSeqNoYSequence number of first message in range to be resent.
16EndSeqNoY0 means + infinity

A Resend Request message should be processed even if it is received ahead of sequence. Only after resending the requested range (all marked PossDup= Y, including any gap fills) should Resend Request be issued in the opposite direction.

As discussed in the FIX 4.2 specification, it is possible to send an open or closed sequence range in a Resend Request (an open range uses sequence zero as the EndSeqNo). CFE will honor either type of request, but will always issue Resend Requests with a closed sequence range.

Reject

Tag Field Name Required Description
35 MsgType Y 3
45 RefSeqNum Y MsgSeqNum of rejected message.
371 RefTagID N
372 RefMsgType N
373 SessionRejectReason N
58 Text N

Session level rejects are used to indicate violations of the session protocol, or missing (or bogus) fields. These are to be expected during development and certification, while the TPH is being adapted for CFE, but should be extremely rare in production. Application layer rejects (like Order Reject and Cancel Reject) are normal.

Sequence Reset

Tag Field Name Required Description
35 MsgType Y 4
36 NewSeqNo Y Next expected sequence number.
123 GapFillFlag N
  • Sequence Reset - Gap Fill messages (GapFillFlag=‘Y’) must be received in sequence. Any messages (including any Gap Fills) sent in response to a Resend Request should have PossDup=‘Y’.
  • Sequence Reset - Reset (GapFillFlag not ‘Y’) is used only as a last resort, and always by human intervention, to allow an otherwise hopelessly confused session to be resumed. In these cases all chance at automatic message recovery are lost.

Logout

TagField NameRequiredDescription
35MsgTypeY5
58TextNIndicates reason for Logout.

Either side may issue a Logout to gracefully close the session. The side that issues the logout should process messages normally until it sees the logout reply, and then break the TCP connection. CFE will typically only request Logout after the scheduled end of FIX session.

This includes the pausing of a session due to holidays.

FIX Messages

Standard Message Header

TagField NameRequiredDescription
8BeginStringY
  • FIX.4.2
  • Must be first field in message
9BodyLengthY
  • Length of message following BodyLength field up to and including the delimiter preceding the CheckSum field.
  • Must be second field in message.
35MsgTypeYMust be third field in message
49SenderCompIDY
  • ID of sender:
  • Assigned by CFE for messages sent to CFE
  • (TargetCompID for messages from CFE)
50SenderSubIDY
  • Sub ID of sender:
  • Assigned by CFE for messages sent to CFE. (TargetSubID for messages from CFE)
56TargetCompIDY
  • ID of destination:
  • CFE = messages sent to CFE
  • (SenderCompID for messages from CFE)
57TargetSubIDY
  • Sub ID of destination:
  • TEST = messages sent to CFE test system
  • PROD = messages sent to CFE production system (SenderSubID for messages from CFE)
34MsgSeqNumYSequential sequence number for session
43PossDupFlagN
  • N = (Default)
  • Y = Indicates a message resend and should be used during FIX Replay. All inbound orders with a value of ‘Y’ will be rejected by Cboe.
52SendingTimeYGMT date-time that message was sent
122OrigSendingTimeNFor messages with PossDupFlag=‘Y’, indicates time that message was first sent
115OnBehalfOfCompIDN
  • Used to specify clearing information on messages to CFE. Must be an allowed Executing Firm ID (EFID).
  • Sent to OCC in Exec Broker field.
116OnBehalfOfSubIDNEnd-client sub identifier. 4 Characters alphanumeric, otherwise not validated. Recorded and returned in DeliverToSubID. Available via Drop feeds
128DeliverToCompIdNIdentifies end-client on messages from CFE. Used to specify clearing information
129DeliverToSubIDNReturns OnBehalfOfSubID optionally sent by client
142SenderLocationIDYIdentifies the country code of the person or system submitting the order using the ISO 3166 two-character code (must be entered using uppercase letters only). An order with a country code for a comprehensively sanctioned country will be rejected.

Standard Message Trailer

TagField NameRequiredDescription
10CheckSumYModulo 256 checksum of all characters in message up to and including the delimiter preceding the CheckSum field. Three digits with leading zeroes if necessary

User Defined FIX Fields

The following FIX fields in the user defined tag range 5,000-9,999 are used by CFE:

TagField NameDescription
7692RiskResetRefer to definition in New Order Single
7695MassCancelIDRefer to definition in Order Cancel Request
7698CustomGroupIDCntRefer to definition in Purge Request
7699CustomGroupIDRefer to definition in Purge Request
7700MassCancelInstRefer to definition in Order Cancel Request
7928PreventMatchRefer to definition in New Order Single
8641NoOfComplexInstrumentsRefer to definition in Execution Report
9617ModifySequenceRefer to definition in New Order Single
9619CancelOrigOnRejectRefer to definition in Order Cancel/Replace
9620CorrectedPriceRefer to definition in Trade Cancel/Correct
9688OrigCompIDRefer to definition in Execution Report
9689OrigSubIDRefer to definition in Execution Report
9702CTICodeRefer to definition in New Order Single
9730TradeLiquidityIndicatorRefer to definitions in Execution Report and Trade Cancel/Correct
9882FeeCodeRefer to definition in Execution Report

Custom FIX Fields

The following FIX fields in the custom tag range 20,000-39,999 are used by CFE:

TagField NameDescription
25004OEOIDRefer to definition in New Order Single
21050ClearingPriceRefer to definition in Execution Report
21051ClearingSizeRefer to definition in Execution Report
21053ClearingSymbolRefer to definition in Execution Report

Order Protocol - TPH to CFE

Order Protocol - TPH to CFE contains New Order Single, Order Cancel Request, Order Cancel/Replace Request, and Security Definition Request (Options only) information.

New Order Single

TagField NameReq’dDescription
35 Standard Message Header YMsgType = D
97PossResendN
  • N = Default. Indicates a new order.
  • Y = Indicates an application level resend and is NOT supported.
  • For reasons of economy, CFE does not track (in primary storage) the ClOrdID values of orders that are no longer live.
  • For reasons of performance, CFE does not access secondary storage to enforce unique ClOrdID values against orders that are no longer live.
  • Without full duplicate ClOrdID value enforcement, it is not possible to safely implement the full behavior specified in the FIX 4.2 Protocol for PossResend = Y.
  • To remain economical, fast, and safe, all New Order Single messages with PossResend = Y will simply be ignored.
1AccountY
  • This field will be reflected back on execution reports associated with this order.
  • 16 characters or less (ASCII 32-126).
  • The first 10 characters are sent to the OCC in the Account # field. The entire 16 character string will appear in the Optional CM Data field.
  • Available via FIX DROP on an opt-in basis at the port level.
11ClOrdIdY
  • ID chosen by client. 20 characters or less. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
  • A leading tilde (~) cannot be sent on any ClOrdId and will result in a reject. These are reserved for internal use by CFE and could be received as a result of a system-generated ClOrdId.
  • If the ClOrdId matches a live order it will be rejected as duplicate (unless PossResend = Y, see above).
  • Sent to the OCC in the Order ID field.
  • Note: CFE only enforces the uniqueness of ClOrdID values among currently live orders, which includes long-lived GTC and GTD orders. However it is strongly recommended to keep ClOrdID values unique.
60TransactTimeYTime order initiated/released. Required by FIX 4.2.
167SecurityTypeY
  • Indicates the type of security.
  • FUT = Simple instrument (Futures only)
  • OPT = Simple instrument (Options only)
  • MLEG = Multi-leg/Spread instrument (Futures only)
  • MLO = Multi-leg/Spread instrument (Options only)
  • Order rejected if instrument type (Simple vs. Multi-leg) of specified symbol doesn’t match SecurityType (167).
55SymbolN
  • Futures Product or CFE format symbol (case sensitive).
  • (Futures only), if MaturityMonth (200) AND MaturityDay (205) are both provided, then the Symbol (55) is a Futures Product identifier (e.g., ‘VX’, ‘VXT’, ‘VU’, etc.). Otherwise, Symbol (55) is the 6 character mapped SymbolID.
  • (Options only), if SecurityDesc (107) is provided, then the Symbol (55) value is not used and should be blank or not provided. Otherwise, Symbol (55) is the 6 character mapped SymbolID.
  • Note Spread instruments must use 6 character mapped SymbolID.
200MaturityMonthNUsed when specifying the Symbol (55) by Futures Product and Expiration Date rather than Symbol ID. When MaturityMonth is specified, MaturityDay (205) is required and Symbol must refer to valid Futures Product identifier.
205MaturityDayNUsed when specifying the Symbol (55) by Futures Product and Expiration Date rather than Symbol ID. When MaturityDay is specified, MaturityMonth (200) is required and Symbol must refer to valid Futures Product identifier.
107SecurityDesc (Options only)NUsed for to identify an instrument by the security description (e.g. "UX1A/K4 C2000"). If this tag is provided, Symbol (55) should be blank or not provided.
54SideY
  • 1 = Buy
  • 2 = Sell
38OrderQtyYNumber of contracts for order, 1 to 999,999
40OrdTypeY
  • 1 = Market
  • 2 = Limit
  • 4 = Stop Limit (Futures only)
  • Market implies TimeInForce of IOC.
  • Stop Limit orders must have a TimeInForce of DAY (0), GTC (1), or GTD (6).
  • Market orders are not allowed for complex Options on Futures and will be rejected.
44PriceN
  • Limit Price.
  • Required for limit orders. If populated for a market order (OrdType=1), the order will be accepted and behave like a market order (i.e. Price will be ignored).
  • Orders will be rejected if Price does not fall on the applicable minimum trading increment.
  • For all contracts other than TAS, simple orders will be rejected if Price is less than or equal to zero, or greater than or equal to 100,000. For TAS, simple orders will be rejected if Price is outside the price limits presented in the contract specification.
  • Spread orders will be rejected if Price is outside the price limits implied by the spread instrument definition and constituent instrument min and max prices.
99StopPxNThe trigger price for Stop Limit orders. Required if OrdType (40) = 4.
47OrderCapacityY
  • The capacity for the order.
  • C = Customer
  • F = Firm
  • The OrderCapacity refers to the OCC account type. C denotes an account that clears in the Customer range at OCC. F denotes an account that clears in the Clearing Firm range at OCC.
59TimeInForceN
  • 0 = DAY (Default) (Expires at end of market day.)
  • 1 = GTC (Order remains until cancelled.)
  • 3 = IOC (Portion not filled immediately is cancelled. Market orders are implicitly IOC.)
  • 4 = FOK (An IOC where the entire size must be filled, else the order will be cancelled back)
  • 6 = GTD (Expires at the date-time specified in the ExpireTime (126) field).
126ExpireTimeNRequired for TimeInForce (59) = 6 (GTD) orders, specifies the date-time (in GMT) that the order expires. Values may be specified at a millisecond level.
110MinQtyN
  • Minimum fill quantity for IOC orders. Ignored for other Simple instrument orders.
  • Not supported for Spread or Options instruments. Spread or Options instrument orders with MinQty specified will be rejected.
77OpenCloseN
  • Indicates status of client position.
  • O = Open
  • C = Close
  • N = None (same as not present)
7692RiskResetN
  • Values may be combined
  • S = Product-level risk/lockout reset (Futures only)
  • F = Firm-level risk/lockout reset (Futures only)
  • C = CustomGroupID lockout reset (Futures only)
  • R = Product-level risk/lockout reset (Options only)
  • I = Firm-level risk/lockout reset (Options only)
  • D = CustomGroupID lockout reset (Options only)
  • Resets by CustomGroupID require FIX Tag (7699) to be populated. Values may be combined together to allow for resets of multiple risk trips or self-imposed lockouts in a single message. For example, FS, SC, FC, and SFCare all acceptable values.
  • The characters may be combined in any order. For example, to "reset all futures", set this field to SFC, which is the equivalent to CFS. To "reset all options", set this field to RID, which is equivalent to DIR. To "reset all futures and options" set the field to SFCRID, which is equivalent to DIRCFS.
  • For more information, see the Cboe Titanium Cboe Futures Exchange Risk Management Specification.
7928PreventMatchN
  • CFE Match Trade Prevention: 3 characters (not space separated):
  • 1st character - MTP Modifier:
  • N = Cancel Newest
  • O = Cancel Oldest
  • B = Cancel Both
  • 2nd character - Unique ID Level:
  • F = Prevent Match at CFE Exchange TPH level
  • M = Prevent Match at EFID Level
  • N = None (do not prevent match at any level)
  • 3rd character - Trading Group ID (optional):
  • TPH-specified alphanumeric value 0-9, A-Z, or a-z.
  • The Unique ID Level (character 2) of both orders must match to prevent a trade. If specified on both orders, Trading Group ID (character 3) must match to prevent a trade.
  • On New Orders, an empty PreventMatch string (NUL filled) results in default Port Attribute settings applied.
439CMTANumberN
  • CMTA Number of the firm that will clear the trade.
  • Must be supplied for CMTA orders and left unspecified for non-CMTA orders.
  • Sent to the OCC in the CMTA CM# field.
440ClearingAccountN
  • This field can be blank or filled out with an optional four character string.
  • This field is recorded and returned in Execution Reports.
  • This field is not sent to the OCC.
  • Available via FIX Drop.
7699CustomGroupIDN
  • Optional TPH-specified ID for the order. Cancellation by CustomGroupID available using Purge Port only.
  • Integer 1-65535
9702CTICodeY
  • 1 = CTI 1: Transactions initiated and executed by an individual TPH for the TPH’s own account, for an account the TPH controls, or for the account in which the TPH has an ownership or financial interest.
  • 2 = CTI 2: Transactions executed for the proprietary account of a clearing TPH or non-clearing TPH.
  • 3 = CTI 3: Transactions where an individual TPH or authorized trader executes for the personal account of another individual TPH, for an account the other individual TPH controls or for an account in which the other individual TPH has an ownership or financial interest.
  • 4 = CTI 4: Any transaction not meeting the definition of CTI 1, 2 or 3. (These should be non-TPH customer transactions).
1028ManualOrderIndicatorY
  • Y = Manual order entry
  • N = Automated order entry
1031CustOrderHandlingInstN
  • Execution source code provided during order entry to describe broker service. A default value can be set using the "Default Customer Order Handling Instruction" port attribute.
  • W = Desk (high touch)
  • Y = Electronic (default)
  • C = Vendor-provided platform, billed by Executing Broker
  • G = Sponsored Access via Exchange API or FIX, provided by executing broker
  • H = Premium algorithmic trading provider, billed by executing broker
  • D = Other, including other-provided screen
25004OEOIDYIdentifies the Order Entry Operator responsible for this message. Minimum and maximum length is 3 and 18 characters, respectively. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
21097FrequentTraderIDN
  • Supplemental customer identifier used for billing related programs.
  • 6 character alphanumeric (0-9, A-Z, or a-z ) value.
  • 555
  • Repeating Group
NoLegs (Options only) NFor a complex order, the number of legs of the complex instrument specified in Symbol (55). For simple orders OpenClose (77) should be used.
564 LegPositionEffect (Options only) N
  • Indicates status of client position in the option for this leg.
  • O = Open
  • C = Close
  • N = None
Standard Message TrailerY

Order Cancel Request

Request the cancellation of a single order or multiple orders (Mass Cancel) on the FIX session. Note that Order Cancel Requests do not apply to open orders across multiple sessions unless submitted on a Purge Port.

The system limits the rate at which identical Mass Cancel and Purge Orders requests can be submitted to the system. Requests are restricted to twenty (20) messages per second per port.

An identical Mass Cancel message is defined as a message having all of the same CustomGroupID, Symbol, Clearing Firm, Lockout Instruction, Instrument Type Filter and GTC Order Filter field values, as a previously received message.

TagField NameReq’dDescription
35Standard Message HeaderYMsgType=‘F’
97PossResendN
  • Y = Indicates an application level unsolicited resend. If ClOrdID has not yet been seen, the cancel is treated as normal. If ClOrdID already exists, the resent cancel is ignored.
  • N = (default) Indicates a new cancel.
11ClOrdIDY
  • Unique cancel ID chosen by TPH. 20 characters or less. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
  • A leading tilde (~) cannot be sent on any ClOrdId and will result in a reject. These are reserved for internal use by CFE and could be received as a result of a system-generated ClOrdId.
  • Duplicate order ClOrdIDs will be rejected (or ignored if PossResend= Y ).
41OrigClOrdIDNClOrdID of the order to cancel. If the referenced order has undergone multiple changes, this will be the ClOrdID of the most recent accepted change.
37OrderIdN
  • OrderId of the order to cancel as supplied by CFE on the associated order acknowledgement. The OrderId is constant even in the event of multiple changes to a single order.
  • If both the OrigClOrdID and OrderId are supplied and MassCancelInst is not, OrderId is used.
60TransactTimeYTime cancel initiated/released. Required by FIX 4.2.
55SymbolNFutures product will be used when specifying a Mass Cancel operation by product level.
7700MassCancelInstN
  • Used to perform Mass Cancel operation rather than single order cancel. If MassCancelInst is provided, OrderId, OrigClOrdId, MaturityMonth, and MaturityDay will be ignored.
  • At least one character must be provided (Clearing Firm Filter). Contiguous characters must be specified up to total length. Truncated/unspecified characters will default to values indicated (Default) below.
  • 1st Character : Clearing Firm Filter
  • A = No filtering by EFID is performed.
  • F = All orders that were sent under the EFID specified in OnBehalfOfCompId (115) will be cancelled.
  • 2nd Character : Acknowledgement Style
  • M = (Default) Individual Execution Reports are sent for each cancelled order.
  • S = Single Execution Report sent once all cancels have been processed. Single Execution Report will contain MassCancelId (7695) and CancelledOrderCount (7696). MassCancelId (7695) must be specified or the Order Cancel Request will be rejected.
  • B = Both individual Execution Reports and single summary Execution report. Also requires MassCancelId (7695) to be specified or the Order Cancel Request will be rejected.
  • 3rd Character : Lockout Instruction
  • N = (Default) No lockout
  • L = Lockout until corresponding Risk Reset received. Lockout can be used only with Clearing Firm Filter set to ‘F’, otherwise the Order Cancel Request will be rejected. Lockout will apply to all new orders and cancel/replace orders for the EFID (and Symbol (55), if specified), regardless of other filtering in the MassCancelInst.
  • 4th Character : Instrument Type Filter
  • B = (Default) Cancel both Simple and Spread orders
  • S = Cancel Simple orders only
  • C = Cancel Spread orders only
  • 5th Character : GTC Order Filter
  • C = (Default) Cancel GTC and GTD orders
  • P = Don’t cancel (preserve) GTC and GTD orders
  • 6th Character : Security Type
  • F = Cancel orders (Futures only)
  • O = Cancel orders (Options only)
  • A = (Default) Cancel All Futures and Options orders
  • If Symbol (55) is specified, it must contain a valid product symbol (e.g., VX ), in which case only orders associated with the specified product will be cancelled.
  • A self-imposed lockout can be released using RiskReset (7692) in the New Order Single message. If Symbol (55) is specified, a Product level reset is required, otherwise a Firm level reset is required to release a lockout. For more information, refer to the Cboe Titanium Cboe Futures Exchange Risk Management Specification.
7695MassCancelIDN
  • This field will be echoed back in the resulting order execution report when MassCancelInst (7700) Acknowledgement Style = S or B.
  • Mass Cancel requests containing a MassCancelID that is currently outstanding will be rejected.
1028ManualOrderIndicatorY
  • Y = Manual order entry
  • N = Automated order entry
25004OEOIDYIdentifies the Order Entry Operator responsible for this message. Minimum and maximum length of the field is 3 and 18 characters, respectively. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
Standard Message TrailerY

Order Cancel/Replace Request

Price, OrderQty, OrdType, StopPx, ManualOrderIndicator, OEOID, CustOrderHandlingInst, and FrequentTraderID may be adjusted. Modifies will result in a loss of time priority unless (1) they have no change in Price and also reduce OrderQty or (2) they change the StopPx for a stop order that has not been elected. OrdType may be adjusted from Limit to Market.

Time priority is maintained on a cancel/replace order in the following cases:

  • A decrease in OrderQty with no other changes.
  • A decrease in OrderQty, a change to the OEOID and/or the ManualOrderIndicator, and no other changes.
  • A decrease in OrderQty and/or a change to the StopPx on an unelected stop order with no other changes.
  • A decrease in the OrderQty and/or a change to the StopPx on an unelected stop order, a change to the OEOID and/or the ManualOrderIndicator, and no other changes.

Other fields will be ignored, and the value from the original order will be reused.

Changes in OrderQty result in an adjustment of the current order’s OrderQty. The new OrderQty does not directly replace the current order’s LeavesQty; rather, a delta is computed from the current OrderQty and the replacement OrderQty. This delta is then applied to the current LeavesQty. If the resulting LeavesQty is less than or equal to zero the order is cancelled. This results in safer behavior when the replace request overlaps partial fills for the current order, leaving the TPH in total control of the exposure of the order.

A Cancel/Replace should not be issued until the ack for the previous Cancel/Replace has been received for that order (or the New Order Ack for the first Cancel/Replace). The FIX handler will reject a new Cancel/Replace if it has not seen the prior Cancel/Replace return from the Matching Engine.

Cancel/Replace requests that merely reduce OrderQty may be overlapped if the existing ClOrdID is re-used. This is the only case where re-use of the existing ClOrdID is allowed.

A maximum of 1,679,615 Cancel/Replace requests may be made to a single order each trading day. Once the 1,679,615th modification is made, then the next user-generated message on the order should be an Order Cancel Request.

TagField NameReq’dDescription
35Standard Message HeaderYMsgType= G
97PossResendN
  • Y = Indicates an application level resend. If the ClOrdID does not indicate an already pending Cancel/Replace, the cancel is treated as normal. If ClOrdID does indicate an already pending Cancel/Replace then the resent Cancel/Replace is ignored.
  • N = (default) Indicates a new cancel.
1AccountNIgnored - value preserved from original order
11ClOrdIdY
  • Unique ID chosen by TPH. 20 characters or less. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
  • A leading tilde (~) cannot be sent on any ClOrdId and will result in a reject. These are reserved for internal use by CFE and could be received as a result of a system-generated ClOrdId.
  • Duplicate order ClOrdIds will be rejected (or ignored if PossResend= Y ).
41OrigClOrdIDN
  • ClOrdID of the order to replace. In the case of multiple changes to a single order, this will be the ClOrdID of the most recent accepted change.
  • OrderID must be sent if OrigClOrdID is not.
37OrderIdN
  • OrderId of the order to replace as supplied by CFE on the associated order acknowledgement. The OrderId is constant even in the event of multiple changes to a single order.
  • OrigClOrdID must be sent if OrderId is not. If both the OrigClOrdID and OrderId are supplied, OrderId is used.
60TransactTimeYTime Cancel/Replace initiated/released.
54SideNMust match original order.
38OrderQtyYNumber of contracts for order. This will modify the OrderQty of the current order; it does not directly set the remaining quantity.
40OrdTypeN
  • Defaults to original order if not sent.
  • 1 = Market
  • 2 = Limit
  • 4 = Stop Limit (Futures only)
  • May replace Limit with Market and vice versa, but otherwise must match original order (or not sent).
44PriceYLimit Price. Order rejected if priced finer than the minimum trading increment for the symbol.
99StopPxNDefaults to original order if not sent
9619CancelOrigOnRejectN
  • Default is configurable per port (N if not configured).
  • N = Leave original order alone.
  • Y = Cancel original order if replacement fails (an unsolicited cancel report will be sent for original order in this case).
1028ManualOrderIndicatorY
  • Y = Manual order entry
  • N = Automated order entry
1031CustOrderHandlingInstN
  • Execution source code provided during order entry to describe broker service. A default value can be set using the "Default Customer Order Handling Instruction" port attribute.
  • W = Desk (high touch)
  • Y = Electronic (default)
  • C = Vendor-provided platform, billed by Executing Broker
  • G = Sponsored Access via Exchange API or FIX, provided by executing broker
  • H = Premium algorithmic trading provider, billed by executing broker
  • D = Other, including other-provided screen
25004OEOIDYIdentifies the Order Entry Operator responsible for this message. Minimum and maximum length is 3 and 18 characters, respectively. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
21097FrequentTraderIDN
  • Supplemental customer identifier used for billing related programs.
  • 6 character alphanumeric (0-9, A-Z, or a-z ) value.
Standard Message TrailerY

Security Definition Request (Options Only)

A Security Definition Request message is used to request that the system create a complex strategy. The resulting symbol (if accepted by the system) will be returned in a Security Definition message with the Cboe symbol in Symbol (55). Complex instruments must contain a minimum of 2 and a maximum of 16 legs. Creating new complex strategies is allowed for Options on Futures only.

TagField NameReq’dDescription
35Standard Message HeaderYMsgType= c
97PossResendN
  • N = (Default) indicates a new order.
  • Y = Indicates an application level resend and is NOT SUPPORTED.
  • For reasons of economy, Cboe does not track in primary storage the ClOrdID values of orders that are no longer live.
  • For reasons of performance, Cboe does not access secondary storage to enforce unique ClOrdID values against orders that are no longer live.
  • Without full duplicate ClOrdID value enforcement, it is not possible to safely implement the full behavior specified in the FIX 4.2 Protocol for PossResend= Y .
  • To remain economical, fast, and safe, all messages with PossResend= Y will be ignored.
11ClOrdIdY
  • ID chosen by client. 20 characters or less. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
  • A leading tilde (~) cannot be sent on any ClOrdId and will result in a reject. These are reserved for internal use by Cboe and could be received as a result of a system-generated ClOrdId.
  • If the ClOrdId matches a live order it will be rejected as duplicate (unless PossResend= Y , see above).
  • Note: Cboe only enforces the uniqueness of ClOrdID values among currently live orders, which includes long-lived, persisting GTC/GTD orders. However it is strongly recommended users maintain unique ClOrdID values.
60TransactTimeYTime request initiated/released. Required by FIX 4.2.
167SecurityTypeY
  • Indicates the type of security
  • MLO = Multi-leg/Spread instrument
  • 555
  • Repeating Group
NoLegsYThe number of legs in this complex instrument. Must be a minimum of 2 legs and a maximum of 16 legs.
654LegRefIDY
  • Required tag to start each repeated group.
  • Leg ID chosen by client. Five alphanumeric or space characters or less.
600LegSymbolYThe symbol id of for the simple Options on Futures instrument.
623LegRatioQtyY
  • Ratio of number of contracts in this leg per order quantity. All legs must be reduced (i.e., 2:2 must be sent as 1:1) in order to be accepted by the system when using this message type.
  • Accepted values are 1 - 99,999.
624LegSideY
  • 1 = Buy
  • 2 = Sell

Order Protocol - CFE to TPH

Order Protocol - CFE to TPH contains Execution Report, Cancel Reject, Trade Cancel/Correct, and Security Definition (Options only) information.

Execution Report

Please note that Execution Reports with ExecType (150) = M are responses to Mass Cancel requests. Mass Cancel Execution Reports are compact and will only carry fields as stated in the description of ExecType that follows.

The MultilegReportingType (442) field can be used to determine whether a fill or partial fill corresponds to a Spread instrument, a Single leg instrument that is part of a Spread instrument execution or a Single leg instrument fill only (field will not be present in this case). Similarly, the SecondaryExecID (527) field can be used to distinguish Single leg instrument executions from Spread instrument executions and to identify Single leg instrument executions that comprise a Spread instrument execution.

  • If the SecondaryExecId (527) field is not present, the Execution Report is associated with a Simple instrument.
  • If the SecondaryExecId (527) field is present and is identical to the ExecId (17) field, the Execution Report represents a Spread instrument execution for which associate individual leg Execution Reports will follow.
  • If the SecondaryExecId (527) field is present and not identical to the ExecId (17) field, the Execution Report represents a Simple instrument execution that comprises a Spread execution and the SecondaryExecId (527) field is set to the ExecId (17) field of the associated Spread execution.

For executions involving Spread orders, if both sides of a complex/spread trade are on the same order entry session, Cboe does not guarantee that the leg executions will not be interleaved between sides.

TagField NameDescription
35Standard Message HeaderMsgType=8
52SendingTimeGMT date-time that Execution Report was sent by CFE.
75TradeDate
  • Business date of the Execution Report.
  • Note that on CFE, TradeDate is not always the same as the calendar date. For example, the VX/VT products open for trading on the calendar day prior to the associated business date or TradeDate. Executions that occur after the open and before midnight will have a TradeDate that is not the same as the calendar date of the execution.
20ExecTransType
  • 0 = New
  • 1 = Cancel
  • 2 = Correct
  • 3 = Status
  • 2 (Correct) is used for post-Settlement Execution Reports that update Trade At Settlement (TAS) trades with settlement offset prices and symbol changes as appropriate.
  • 3 (Status) is used for Carried Order Restatements if associated port attribute is set.
17ExecID
  • Day-unique ID of execution message. Will be zero when ExecTransType = 3.
  • Sent to the OCC in the Trade ID field.
527SecondaryExecID
  • Field indicates whether a fill or partial fill (ExecType (150) = 1 or 2) is a Spread instrument fill or a Simple instrument fill that comprises a Spread execution.
  • If SecondaryExecID (527) is not present, the fill is a Simple instrument fill only.
  • If SecondaryExecID is present and is the same as the ExecID (17) the fill represents a Spread execution for which associated Simple instrument fills will follow.
  • Simple instrument fills associated with a Spread execution will contain a SecondaryExecID matching the ExecID of the associated Spread execution.
442MultilegReportingType
  • 1 = Simple instrument execution
  • 2 = Simple instrument execution that is part of a Spread instrument execution.
  • 3 = Spread instrument execution.
19ExecRefIDOnly present when ExecTransType = 1 (Cancel) or 2 (Correct). Refers to the ExecID of the message being cancelled or corrected.
150ExecType
  • Reason for this execution report:
  • 0 = New (acknowledgement of new order)
  • 1 = Partial Fill
  • 2 = Fill
  • 4 = Canceled
  • 5 = Replaced
  • 8 = Rejected
  • D = Restated
  • M = Mass Cancel Complete
  • For Standard FIX Drop, only ExecType = 1 (Partial Fill), 2 (Fill), and D (Restated) Execution Reports will be sent. For Order by Order FIX Drop, all ExecTypes will be sent. See FIX Drop Port information in FIX Drop Port Attributes.
  • When responding to a Mass Cancel request, ExecType = M. This indicates that the only tags present in this message are the following:
  • Standard Message Header (35)
  • SendingTime (52)
  • ExecTransType (20)
  • ExecType (150)
  • MassCancelID (7695)
  • CancelledOrderCount (7696)
378ExecRestatementReason
  • Only present when 150=D
  • 1 = GTC and GTD Restatement
  • 4 = State Change
  • 5 = Reduction of OrdQty
  • 1 is used for GTC and GTD Carried Order Restatements if associated port attribute is set.
  • 4 is used for post-Settlement Execution Reports that update Trade At Settlement (TAS) trades with settlement offset prices and symbol changes as appropriate. Restatements of Day orders on intraday system starts (for example, during holidays involving multiple trading segments for a day) will also use 4.
828TrdType
  • If present, the Execution represents a Block or an ECRP trade.
  • 1 = Block Trade
  • 2 = ECRP Trade
  • Block and ECRP trades will only appear on Standard FIX DROP connections and not on Order-By-Order DROP connections or FIX sessions.
11ClOrdID
  • ClOrdID of the order being accepted, executed or rejected.
  • -or-
  • ClOrdID of the cancel or replace request.
  • -or-
  • ClOrdID of the order subject to unsolicited cancel
  • (OrigClOrdID will not be present).
41OrigClOrdIDClOrdID of the order being cancelled or replaced (for a solicited Cancel or Cancel/Replace, otherwise not present).
37OrderId
  • OrderId (supplied by CFE).
  • Sent to the OCC in the Exchange Data field.
382NoContraBrokersOnly present on trades. Always 1
375ContraBrokerOnly present on trades. Always CFE
39OrdStatus
  • State of order:
  • 0 = New
  • 1 = Partially Filled
  • 2 = Filled
  • 4 = Canceled
  • 5 = Replaced
  • 6 = Pending Cancel
  • 8 = Rejected
  • A = Pending Ack
  • B = Calculated
  • E = Pending Replace
  • For FIX Drop, only ‘1’ or ‘2’ will be sent and will always equal ExecType (150). For Order by Order FIX Drop, all execution information will be sent.
  • OrderStatus (39) will always = B for TAS post-settlement restatements.
103OrdRejReason
  • Optional when ExecType is Rejected (8):
  • 0 = Broker option
  • 1 = Unknown symbol
  • 2 = Exchange closed
  • 3 = Order exceeds limit
  • 5 = Unknown order
  • 6 = Duplicate order
  • 8 = Stale order
1AccountCopied from order (available in FIX DROP)
59TimeInForce
  • Copied from order unless overridden by the system. For example, Market orders are implicitly IOC.
  • Post-settlement restatement messages for TAS executions for which the associated order was submitted with TimeInForce = 4 (FOK) will include TimeInForce = 3 (IOC).
126ExpireTimeCopied from order
110MinQtyCopied from order
439CMTANumberCopied from order
440ClearingAccountCopied from order
55Symbol
  • Copied from order
  • For FIX DROP and Order by Order DROP only, Execution Reports for Futures will always contain "Expiration Symbology" in fields Symbol (55), MaturityMonth (200), and MaturityDay (205). Symbol will always contain the Product identifier associated with the traded instrument (e.g., ‘VX’). MaturityMonth and MaturityDay specify the expiration of the traded instrument.
  • Note if MultilegReportingType (442) is set to 3 (i.e., Spread execution), Expiration Symbology does not uniquely identify the traded option instrument, and in this case both Symbol (55) and SecurityID (48) contain the 6 character mapped SymbolID of the traded spread instrument.
  • (Options only), SecurityDesc (107) and Symbol (55) are always populated for simple instruments. Symbol (55) will contain the 6-character mapped Symbol ID. Complex/spread instruments will only include Symbol (55).
200MaturityMonth
  • Copied from order (Futures only).
  • For FIX DROP and Order by Order DROP Execution Reports, MaturityMonth (200) specifies the month component of the expiration date of the traded instrument.
  • For Spread executions (i.e., MultilegReportingType (442) = 3), MaturityMonth (200) is not included since Symbol (55) contains mapped SymbolID and not Expiration symbology.
205MaturityDay
  • Copied from order (Futures only).
  • For FIX DROP and Order by Order DROP Execution Reports, MaturityDay (205) specifies the day component of the expiration date of the traded instrument.
  • For Spread executions (i.e., MultilegReportingType (442) = 3), MaturityDay (200) is not included since Symbol (55) contains mapped SymbolID and not Expiration symbology.
107SecurityDesc (Options only)Long format description of Options instrument (e.g. "UX1A/K4 C2000").
48SecurityID (Futures only)Present only for FIX DROP and Order by Order DROP Execution Reports. Field will always contain the associated symbol using the 6-character mapped symbol id.
142SenderLocationIDCopied from order
167SecurityTypeCopied from order
54SideCopied from order
38OrderQty
  • Copied from order
  • Field not present on TAS post-settlement restatements.
424DayOrderQtyFor GTC and GTD orders only. Contracts remaining to be filled for the order at the beginning of the current business day (i.e., OrderQty - CumQty at the end of the previous business day).
14CumQty
  • Cumulative quantity of contracts executed for the order over life of the order, which may be multiple business days in the case of GTC and GTD orders.
  • Populated for leg fills related to complex executions.
425DayCumQtyFor GTC and GTD orders only. Cumulative quantity of contracts executed for the order during the current business day.
151LeavesQty
  • Quantity of contracts or spread instruments still open for further execution. Will be zero if order is dead, otherwise will be (OrderQty -CumQty).
  • Note: It is possible for LeavesQty to be zero when ExecType = 5 indicating that the order is dead.
  • Field not present on TAS restatements.
32LastShares
  • Quantity of contracts traded on this fill (zero for nonfills).
  • Must request opt-in at firm or port level for "Report MTP Fields" to receive this field on a MTP triggered cancel/restatement where both sides were cancelled. LastShares is set to the number of contracts that would have been matched in the event of cancel on account of MTP.
44PriceCopied from order
31LastPx
  • Price of this fill (zero for non-fills).
  • Must request opt-in at firm or port level for "Report MTP Fields" to receive this field on a MTP triggered cancel/restatement where both sides were cancelled. LastPx is set to the price at which LastShares would have matched in the event of cancel on account of MTP.
6AvgPxAverage price of executions for this order weighted by trade size. Zero if CumQty is zero or if a leg fill related to a complex execution.
426DayAvgPxFor GTC and GTD orders only. Average price per contract of executions on current business date (TradeDate). Zero if DayCumQty is zero.
99StopPxCopied from order
198SecondaryOrderIDPresent on a MTP triggered cancel. Must request opt-in at firm or port level for "Report MTP Fields" to receive this field.
9730TradeLiquidityIndicator
  • Present for acknowledgements and fills (150 = 0, 150 = 1 or 150 = 2):
  • 1st Character
  • A = Trade Added Liquidity
  • R = Trade Removed Liquidity
  • C = Market opening/re-opening trade
  • 2nd Character (must opt-in to receive)
  • U = Qualifying Market Turner order. Only sent when first character value = A.
  • State Change Tracking
  • Order acks (150=0), modify acks (150=5) and restatements (150=D with 378=4 or 378=1) will carry 9730 messages defined as follows:
  • A = Zero or more immediate partial remove fills followed by posting.
  • AU = Zero or more immediate partial remove fills followed by posting as market turner.
  • R = Zero or more immediate partial remove fills followed by a cancel (or full fill).
9882FeeCodeSpecific fee code associated with execution. See the Fee Schedule for the respective market for possible values.
9617ModifySequenceFIX Drop only. Base 36. Number of times order has been replaced.
9688OrigCompIDFIX Drop only. TargetCompID of original FIX exec report FIX Drop port must be configured to send this optional field.
9689OrigSubIDFIX Drop only. TargetSubID of original FIX exec report FIX Drop port must be configured to send this optional field.
60TransactTimeGMT date-time that transaction occurred
58TextIf present, indicates reason for reject or cancel. Format is one letter reason code followed by colon and space followed by free form text (e.g., "N: No Liquidity at price"). See Reason Codes for a list of valid reason codes.
7695MassCancelIDMass cancel ID provided when ExecType = M (Mass Cancel Complete) indicating a Mass Cancel operation has completed.
7696CancelledOrderCountNumber of orders cancelled from a Mass Cancel request.
9702CTICodeCopied from order
1028ManualOrderIndicatorCopied from order
25004OEOIDCopied from order
47OrderCapacityCopied from order if provided
77OpenCloseCopied from order
21050ClearingPrice
  • Present in restatement execution reports in which the originally reported fill price (LastPx (31)) is transformed prior to clearing.
  • TAS executions are reported at the time of execution as a differential to the contract settlement price. Post-settlement the execution price offset with the contract settlement price and reported in the ClearingPrice (21050) field of the restatement.
21053ClearingSymbol
  • Present in restatement Execution Report message in which the symbol associated with execution at the time of the execution (Symbol (55)) is transformed prior to clearing.
  • Present only in restatement Execution Report messages for TAS instruments for which the execution clears with a different symbol than the symbol from the original Execution Report. Field contains the new mapped symbol ID that will used for clearing.
  • For TAS restatement Execution Report messages, the field will contain the mapped symbol ID of the standard futures instrument (i.e. "VX") with same expiration as the originally traded TAS instrument.
21097FrequentTraderIDCopied from order
1031CustOrderHandlingInstCopied from order
  • 555
  • Repeating Group
NoLegs (Options only) Copied from order
564 LegPositionEffect (Options only) Copied from order
Standard Message Trailer

Cancel Reject

Rejects a Cancel or Cancel/Replace request.

When a Cancel/Replace is rejected, by default the original order is left alive. A Cancel Reject should not be used as a sign that the original order has been cancelled. Even if the CancelOrigOnReject = Y option is being used a separate unsolicited cancel will be sent to close out the original order.

TagField NameDescription
35Standard Message HeaderMsgType=‘9’
11ClOrdIDClOrdID from the Cancel or Cancel/Replace request.
41OrigClOrdIDClOrdID of the order that failed to be cancelled or replaced.
37OrderId
  • OrderId of order that failed to be cancelled or replaced.
  • NONE if CxlRejReason = 1 (Unknown).
39OrdStatusOrdStatus of order that failed to be cancelled or replaced.
1AccountCopied from Cancel or Cancel/Replace request.
434CxlRejResponseTo
  • 1 = Cancel
  • 2 = Cancel/Replace
102CxlRejReason
  • 0 = Too late to cancel.
  • 1 = Unknown order.
  • 2 = Broker Option.
  • 3 = Already pending cancel or pending replace.
  • This field will not be reflected back on risk rejects.
58TextFree form text
7695MassCancelIDMassCancelID from a Cancel Request where MassCancel is set.
Standard Message Trailer

Trade Cancel/Correct

Sends a trade/cancel or correct message for trade breaks and adjustments.

Trade Cancel/Correct (UCC) is an optional message that must be enabled at the port level. It may be enabled for current-day only or for all cancels and corrections. Only the Price of a trade may be corrected, all other details remain the same. Trade cancels and corrections do not alter live order state.

TagField NameDescription
35Standard Message HeaderMsgType=‘UCC’
20ExecTransType
  • 1 = Trade Cancel
  • 2 = Trade Correct
17ExecIDDay-unique id of execution message.
19ExecRefIDRefers to the ExecID of the message being cancelled or corrected.
37OrderIDOrderID of the original trade being cancelled/corrected
11ClOrdIDClOrdID of the original trade being cancelled/corrected
55SymbolCopied from original trade being cancelled/corrected
200MaturityMonthCopied from original trade being cancelled/corrected
205MaturityDayCopied from original trade being cancelled/corrected
54SideCopied from original trade being cancelled/corrected
9730TradeLiquidityIndicatorCopied from original trade being cancelled/corrected
128DeliverToCompIDCopied from OnBehalfOfCompID (115)
439CMTANumberCopied from original trade being cancelled/corrected (if present)
440ClearingAccountCopied from original trade being cancelled/corrected (if present)
9620CorrectedPriceOnly for Trade Corrects. Corrected price
32LastSharesQuantity of contracts on the original trade being cancelled/corrected
31LastPxPrice on the original trade being cancelled/corrected.
42OrigTimeGMT date-time of original trade
60TransactTimeGMT date-time of cancel/correct
Standard Message Trailer

Security Definition (Options Only)

This message is a response to a Security Definition Request where the Security Definition Request is accepted or rejected.

TagField NameDescription
35Standard Message HeaderMsgType='d'
11ClOrdIDClOrdID from the Security Definition Request request.
167SecurityTypeCopied from Security Definition Request.
55SymbolCboe Symbol ID of created instrument.
323SecurityResponseType
  • 1 = Accept As-Is (legs were not modified)
  • 2 = Accept With Revisions (legs were modified)
  • 5 = Reject Security Proposal
  • "Accept As-Is" only applies if the input legs matches exactly the complex security definition. Any re-ordering of legs, reduction of ratios, or other changes will result in a value of "Accept with Revisions".
  • 555
  • Repeating Group
NoLegsCopied from Security Definition Request. Note ordering of legs may be different if SecurityResponseType (323) = 2.
654LegRefIDCopied from Security Definition Request.
600LegSymbolCopied from Security Definition Request.
623LegRatioQtyCopied from Security Definition Request. Note ratio may be reduced if SecurityResponseType (323) = 2.
624LegSideCopied from Security Definition Request.
8641NoOfComplexInstrumentsThe number of complex instruments created by the TPH in the underlying futures symbol in the current trading session.
58TextFree form text message.
Standard Message Trailer

Purge Port Protocol - TPH to CFE

A Purge Port may be created using either the FIX or BOE protocol. For BOE Purge Port messaging please refer to the Cboe Titanium Cboe Futures Exchange BOE Version 3 Specification.

The system limits the rate at which identical Mass Cancel and Purge Orders requests can be submitted to the system. Requests are restricted to twenty (20) messages per second per port.

An identical Mass Cancel message is defined as a message having all of the same CustomGroupID, Symbol, Clearing Firm, Lockout Instruction, Instrument Type Filter, and GTC Order Filter field values, as a previously received message.

Purge Request

Request the cancellation of a subset (or all) open orders across multiple logical ports/sessions (i.e. match capacity allocations).

This differs from a Mass Cancel sent via an Order Cancel Request as the Purge Request is applied across all the TPH’s sessions, not just the session on which the Order Cancel Request was received. In addition, the Purge Request message optionally accepts a list of one or more CustomGroupID (7699) values as part of the order matching filter.

  • Purge Request requires sending MassCancelInst (7700).
  • Optionally, OnBehalfOfCompID (115), Symbol (55), MassCancelID (7695) and list of CustomGroupID (7699) values may also be sent.
  • Symbol (55) and CustomGroupID (7699) are mutually exclusive. Messages containing both will be rejected.
  • A maximum of 10 CustomGroupID (7699) values may be sent in one message.
  • If cancelling by OnBehalfOfCompID (115) by using F as the first character of MassCancelInst (7700) in combination with one or more CustomGroupId (7699), only orders entered matching both CustomerGroupId (7699) and the EFID will be cancelled.
  • A Purge Acknowledgement (35= 8, 150= M) may be requested by setting the Acknowledgement Style to S or B, in which case the MassCancelID (7695) field must be provided or the Purge Request will be rejected.
    TagField NameReq’dDescription
    35Standard Message HeaderYMsgType=‘F’
    97PossResendN
    • Y = Indicates an application level unsolicited resend. If ClOrdID has not yet been seen, the cancel is treated as normal. If ClOrdID already exists, the resent cancel is ignored.
    • N = (default) indicates a new cancel.
    60TransactTimeYTime cancel initiated/released. Required by FIX 4.2.
    7700MassCancelInstY
    • At least one character must be provided (Clearing Firm Filter). Contiguous characters must be specified up to total length. Truncated/unspecified characters will default to values indicated (Default) below.
    • 1st Character : Clearing Firm Filter
    • A = No filtering by clearing firm relationship is performed.
    • F = All orders sent under the clearing relationship specified in OnBehalfOfCompId (115) will be cancelled.
    • 2nd Character : Acknowledgement Style
    • M = (Default) Individual Execution Reports are sent for each cancelled order.
    • S = Single summary Execution Report sent once all cancels have been processed. Single Execution Report will contain MassCancelId (7695) and CancelledOrderCount (7696). MassCancelId (7695) must be specified or the Order Cancel Request will be rejected.
    • B = Both individual Execution Reports and single summary Execution report. Also requires MassCancelId (7695) to be specified.
    • 3rd Character : Lockout Instruction
    • N = (Default) No lockout
    • L = Lockout until corresponding Risk Reset received. Lockout can be used only with Clearing Firm Filter set to ‘F’, otherwise the Order Cancel Request will be rejected. Lockout will apply to all new orders and cancel/replace orders for the EFID (and Symbol (55) or CustomGroupId (7699), if specified), regardless of other filtering in the MassCancelInst.
    • 4th Character : Instrument Type Filter
    • B = (Default) Cancel both Simple and Spread orders
    • S = Cancel Simple orders only
    • C = Cancel Spread orders only
    • 5th Character : GTC Order Filter
    • C = (Default) Cancel GTC and GTD orders
    • P = Don’t cancel (preserve) GTC and GTD orders
    • 6th Character : Security Type
    • F = (D) Cancel orders (Futures only)
    • O = Cancel orders (Options only)
    • A = Cancel Both Futures and Options orders
    • If Symbol (55) is specified, it must contain a valid product symbol (e.g., ‘VX’), in which case only orders associated with the specified product will be cancelled.
    • A self-imposed lockout can be released using the RiskReset (7692) field of the New Order Single message. If Symbol (55) is not specified a zero CustomGroupId (7699) values are specified, a Firm level reset is required. If Symbol is specified, a Product level reset is required. If one or more CustomGroupId values are provided a Custom Group level reset is required. For more information, refer to the CFE Risk Management Specification.
    7695MassCancelIDN
    • This field will be echoed back in the resulting order execution report when the Acknowledgement Style value of the MassCancelInst (7700) = S or ‘B’.
    • Purge requests containing a MassCancelID that is currently outstanding will be rejected.
    55SymbolNFutures product symbol (upper case). Limits cancellations to only orders with the specified product.
    • 7698
    • Repeating
    • Group
    CustomGroupIDCntN
    • Number of repeating CustomGroupIDs (7699) included in this message.
    • Integer 0-10
    7699CustomGroupIDN
    • CustomGroupID (7699) to cancel. Only present if CustomGroupIDCnt (7698) is non-zero.
    • Number of repeating groups must match number specified in CustomGroupIDCnt (7698).
    1028ManualOrderIndicatorY
    • Y = Manual order entry
    • N = Automated order entry
    25004OEOIDYIdentifies the Order Entry Operator responsible for this message. Minimum and maximum length is 3 and 18 characters, respectively. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe.
    Standard Message TrailerY

Purge Port Protocol - CFE to TPH

Purge Port Protocol - CFE to TPH contains Purge Acknowledgement and Purge Reject information.

Purge Acknowledgement

A response to a Purge Request will only be sent when the MassCancelID (7695) is populated on a Purge Request. This includes cases where the Acknowledgement Style of MassCancelInst = S or B.

TagField NameDescription
35
  • Standard Message
  • Header
MsgType=‘8’
52SendingTimeGMT date-time that execution report was sent by CFE.
20ExecTransType 3 = Status
150ExecType
  • Reason for this execution report:
  • M = Mass Cancel Complete
7695MassCancelIDCopied from original Purge Request.
7696CancelledOrderCountNumber of orders cancelled from a Purge Request with the specified MassCancelID.

Purge Reject

Rejects a Purge Request.

TagField NameDescription
35Standard Message HeaderMsgType=‘9’
39OrdStatus 8 = Rejected
434CxlRejResponseTo 1 = Cancel
102CxlRejReason 2 = Broker Option
58TextFree form text message with additional reject information.
7695MassCancelIDMassCancelID from the Purge Request
Standard Message Trailer

Implementation Issues

Automatic Cancel on Disconnect or Malfunction

Open orders for a TPH will be cancelled automatically if no messages have been received from the TPH for two heartbeat intervals. The set of open orders cancelled will include Good 'Til Cancel (GTC) and Good 'Til Date-Time (GTD) orders if the Cancel On Disconnect port setting is configured to include GTC and GTD orders. This is done to prevent orders from being stuck in an unknown state in the event of telecommunications failure. TPHs should choose their heartbeat interval carefully based on the latency and reliability of their telecommunications channel. The minimum supported interval is 5 seconds, and this is also the recommended interval if the latency and reliability of your telecommunications channel support it. Execution reports for the automatically cancelled orders are available upon reconnection. TPHs are responsible for rerouting orders to other market centers based on their business needs. This should be rare, but all open orders may also be cancelled in the event of a complete or partial system malfunction.

Note that Port Cancel on Disconnect behavior is in effect from the time persisted orders are reloaded to the book to the end of the Cancel-Only period. Clients may modify this port attribute via the logical port request tool available on the customer web portal.

Service Bureau (ISV) Configuration

Service Bureaus require special configuration. OnBehalfOfCompID should be set for New Order, Order Cancel and Cancel/Replace messages sent to CFE. Orders with an unknown OnBehalfOfCompID will be rejected. ClOrdId values are required to be unique only within a given OnBehalfOfCompID.

Execution Report and Cancel Reject messages sent by CFE will have the DeliverToCompID set.

Orders must be cancelled or replaced using the same OnBehalfOfCompID as was sent on the Order.

Common Session Level Issues

CFE uses FIX 4.2 as specified by the FPL document Version 4.2 (with Errata 20010501) with business level extensions described in our own FIX spec. The session level of the FPL spec is followed as closely as possible.

The version with errata cleared up many ambiguities with session level present in the earlier Version 4.2 (March 1, 2000).

Important notes direct from the public FPL spec (bold is emphasis/notes added by CFE):

FINANCIAL INFORMATION EXCHANGE PROTOCOL / FIX MESSAGE FORMAT AND DELIVERY / Ordered Message Processing

The FIX protocol assumes complete ordered delivery of messages between parties. Implementers should consider this when designing message gap fill processes. Two options exist for dealing with gaps, either request all messages subsequent to the last message received or ask for the specific message missed while maintaining an ordered list of all newer messages. For example, if the receiver misses the second of five messages, the application could ignore messages 3 through 5 and generate a resend request for messages 2 through 5, or, preferably 2 through 0 (where 0 represents infinity). Another option would involve saving messages 3 through 5 and resending only message 2. In both cases, messages 3 through 5 should not be processed before message 2.

FINANCIAL INFORMATION EXCHANGE PROTOCOL / SESSION PROTOCOL / Logon

After the initiator has been authenticated, the acceptor will respond immediately with a confirming Logon message.

FINANCIAL INFORMATION EXCHANGE PROTOCOL / SESSION PROTOCOL / Message Recovery

When the incoming sequence number does not match the expected number corrective processing is required. Note that the SeqReset-Reset message (CFE: this refers only to GapFillFlag=No 123=N) to be used only to recover from a disaster scenario vs. normal resend request processing) is an exception to this rule as it should be processed without regards to its MsgSeqNum. If the incoming message has a sequence number less than expected and the PossDupFlag is not set, it indicates a serious error. It is strongly recommended that the session be terminated and manual intervention be initiated. If the incoming sequence number is greater than expected, it indicates that messages were missed and retransmission of the messages is requested via the Resend Request (see Ordered Message Processing).

If there are consecutive administrative messages to be resent, it is suggested that only one SeqReset-GapFill message be sent in their place. The sequence number of the SeqReset-GapFill message is the next expected outbound sequence number. The NewSeqNo field of the GapFill message contains the sequence number of the highest administrative message in this group plus 1. For example, during a Resend operation there are 7 sequential administrative messages waiting to be resent. They start with sequence number 9 and end with sequence number 15. Instead of transmitting 7 Gap Fill messages (which is perfectly legal, but not network friendly), a SeqResetGapFill message may be sent. The sequence number of the Gap Fill message is set to 9 because the remote side is expecting that as the next sequence number. The NewSeqNo field of the GapFill message contains the number 16, because that will be the sequence number of the next message to be transmitted.

Sequence number checking is a vital part of FIX session management. However, a discrepancy in the sequence number stream is handled differently for certain classes of FIX messages. The table below lists the actions to be taken when the incoming sequence number is greater than the expected incoming sequence number.

NOTE: In *ALL* cases except the Sequence Reset - Reset message, the FIX session should be terminated if the incoming sequence number is less than expected and the PossDupFlag is not set. A Logout message with some descriptive text should be sent to the other side before closing the session.

Table 1. Response by Message Type
Message TypeAction to Be Taken on Sequence # Mismatch
LogonMust always be the first message transmitted. Authenticate and accept the connection. After sending a Logon confirmation back, send a ResendRequest if a message gap was detected in the Logon sequence number.

....

FINANCIAL INFORMATION EXCHANGE PROTOCOL / ADMINISTRATIVE MESSAGES / Resend Request

Note: the sending application may wish to consider the message type when resending messages; e.g. if a new order is in the resend series and a significant time period has elapsed since its original inception, the sender may not wish to retransmit the order given the potential for changed market conditions. (The Sequence Reset-GapFill message is used to skip messages that a sender does not wish to resend.)

FINANCIAL INFORMATION EXCHANGE PROTOCOL / ADMINISTRATIVE MESSAGES / Sequence Reset (Gap Fill)

The sequence reset message is used by the sending application to reset the incoming sequence number on the opposing side. This message has two modes: Sequence Reset-Gap Fill when GapFillFlag is Y and Sequence Reset-Reset when GapFillFlag is N or not present. The Sequence Reset-Reset mode should ONLY be used to recover from a disaster situation which cannot be otherwise recovered via Gap Fill mode. The sequence reset message can be used in the following situations:

  • During normal resend processing, the sending application may choose not to send a message (e.g. an aged order). The Sequence Reset - Gap Fill is used to mark the place of that message.

  • During normal resend processing, a number of administrative messages are not resent, the Sequence Reset - Gap Fill message is used to fill the sequence gap created.

...

The sending application will initiate the sequence reset. The message in all situations specifies NewSeqNo to reset as the value of the next sequence number immediately following the messages and/or sequence numbers being skipped.

...

If GapFillFlag is present (and equal to Y), the MsgSeqNum should conform to standard message sequencing rules (i.e. the MsgSeqNum of the Sequence Reset-GapFill message should represent the beginning MsgSeqNum in the GapFill range because the remote side is expecting that next message).

The sequence reset can only increase the sequence number. If a sequence reset is received attempting to decrease the next expected sequence number the message should be rejected and treated as a serious error. It is possible to have multiple ResendRequests issued in a row (i.e. 5 to 10 followed by 5 to 11). If sequence number 8, 10, and 11 represent application messages while the 5-7 and 9 represent administrative messages, the series of messages as result of the Resend

Request may appear as SeqReset-GapFill with NewSeqNo of 8, message 8, SeqReset-GapFill with NewSeqNo of 10, and message 10. This could then followed by SeqReset-GapFill with NewSeqNo of 8, message 8, SeqReset-GapFill with NewSeqNo of 10, message 10, and message 11. One must be careful to ignore the duplicate SeqReset-GapFill which is attempting to lower the next expected sequence number. This can be detected by checking to see if its MsgSeqNum is less than expected. If so, the SeqReset-GapFill is a duplicate and should be discarded.

FIX DROP Ports

CFE offers two types of FIX Drop ports (Standard FIX Drop and Order by Order FIX Drop). Both port types do not accept orders. Their purpose is to provide real time information about order flow. They may be configured to send order flow based on various combinations of information relating to specific TPH firms, clearing EFIDs, and/or sessions. With proper authorization (e.g., clearing relationships), a single FIX Drop session can be used to obtain information about multiple TPHs.

Standard FIX Drop

Standard FIX Drop ports only send execution information comprising Execution Report messages for Filled (150= 2), Partially Filled (150= 1) and Restated (150= D) for post-settlement restatement of TAS executions.

Block and ECRP executions are sent over Standard FIX Drop ports.

Order by Order FIX Drop

Order by Order FIX Drop ports are designed to send more than execution information.

All order message types are supported including, but not limited to Acknowledgements (150= 0), Partially Filled (150= 1), Filled (150= 2), Cancelled (150= 4), Replaced (150= 5), Rejected (150= 8), Restated (150= D), Order Cancel Rejects (35= 9) and optionally (if configured at the port level) Trade Breaks (35= UCC). If the Rejects/Cancels are due to incomplete clearing information, they may be unavailable on Order by Order FIX Drop ports.

Reject messages will be sent which originate from a FIX order entry session. However, rejects originating from a BOE order entry session will be suppressed. Block and ECRP executions are not sent over Order by Order FIX Drop ports.

Users of Order by Order FIX Drop must always be prepared to receive new/unknown FIX tag and FIX tag values for BOE/FIX ports being monitored. CFE reserves the right to add new FIX tags and to update values distributed on Order by Order FIX Drop with no notice.

Symbology on FIX and Order By Order Drop Execution Reports

Execution Report messages sent on FIX and Order By Order Drop ports will always contain both Expiration and Mapped Symbology. For Expiration Symbology, Symbol (55) contains the product identifier (e.g., VX) and MaturityMonth (200) and MaturityDay (205) specify the expiration date of the associated symbol. For Mapped Symbology, SecurityID (48) will contain the 6 character mapped symbol representation. It should be noted that Expiration Symbology is insufficient to uniquely identify the traded instrument in the case of Spread instrument executions.

FIX Drop Port Attributes

Unless specified, both types of FIX Drop ports can be configured with the following features:

AttributeDefaultDescription
Send Trade BreaksNoEnables Trade Break Messages (35=UCC). Please note that enabling trade breaks on Order by Order FIX Drop port will be dependent on enabling trade breaks on corresponding BOE and/or FIX order entry ports.
Unique Wash Execution IdsNoAppends a ‘.B’ or ‘.S’ to ExecID (17) on all trades.
Concatenate CompID and SubIDNoRequires all FIX traffic to contain concatenated (combined) Comp and Sub ID's.
Send OrigCompID/OrigSubIDNoSend OrigCompID (9688) and OrigSubID (9689).
Send AccountNoSend Account (1).
Send OrdTypeNo
  • Send OrdType (40). Standard FIX Drop only.
  • Order by Order FIX Drop will receive OrdType (40) based on FIX order entry port attribute "Echo Tag 40 on Ack".
Send 2nd Liquidity CharacterNoSends the second character in TradeLiquidityIndicator (9730).

FIX Order Entry Port Attributes

The table below lists FIX order entry port attributes that are configurable on the port or firm level. Changes to these attributes can be made by submitting a request through the Logical Port Request form.

AttributeDefaultDescription
Allowed Executing Firm Id(s) All Executing Firm Ids Executing Firm Id(s) allowed for trading on port.
Default Executing Firm IdNoneDefault Executing Firm Id to use if none is sent on New Order.
Cancel on DisconnectAll
  • Cancels open orders upon order handler disconnect; both graceful and ungraceful. Cancel on disconnect behavior is in effect from the time persisted orders are reloaded to the book to the end of the cancel-only period.
  • All = Cancel Day, GTC and GTD orders
  • Day = Cancel only Day orders.
  • None = Disabled
Cancel on ME DisconnectAll
  • Controls whether orders are cancelled or preserved on a Matching Unit failover and provides for the ability to preserve GTC orders (Day). In any event, if a failover takes longer than 5 minutes, all orders are cancelled (including GTCs).
  • All = Cancel Day, GTC and GTD orders
  • Day = Cancel only Day orders
  • None = Disabled
Cancel on RejectNoCancels an order upon a cancel or modify reject for that order.
Cancel Open Orders on DROP Port Disconnect None
  • Only applicable if Reject Orders on DROP Port Disconnect has been enabled. When the last Standard FIX DROP port associated with an order handler session has disconnected, open orders, associated with the session are cancelled.
  • All = Cancel Day, GTC and GTD orders
  • Day = Cancel only Day orders
  • None = Disabled
  • Note this parameter applies to Standard FIX DROP ports and not Order-By-Order DROP ports (ODROP).
Carried Order RestatementsYes
  • If the Carried Order Restatements port attribute is set, Execution Report messages representing orders carried forward from the previous business date will be made available to the TPH as described in Carried Order Restatements.
  • Note that any changes made to any port attribute will not be enforced on carried GTC orders. Members who wish to apply updated port attributes to resting GTC orders must cancel those orders, and then resubmit them following the effective time of the port attribute change.
Concatenate CompID and SubId NoRequires all FIX traffic to contain concatenated (combined) Comp and Sub Id’s.
Default MTP Value^NoneSpecifies Default value for PreventMatch (7928).
Echo Tag 40 on AckNoReturn OrdType (40) on FIX Ack. Note this value will also be returned on Order by Order FIX DROP.
Echo Tag 47 on AckNoReturn OrderCapacity (47) on FIX Ack. Note this value will also be returned on Order by Order FIX DROP.
Default Customer Order Handling Instruction Y = Electronic
  • Sets a default CustOrderHandlingInst (1031) that will be used unless overridden at the individual order level.
  • W = Desk (high touch)
  • Y = Electronic (default)
  • C = Vendor-provided platform, billed by Executing Broker
  • G = Sponsored Access via Exchange API or FIX, provided by executing broker
  • H = Premium algorithmic trading provider, billed by executing broker
  • D = Other, including other-provided screen
Maximum Order Size25,000 contractsA system-wide maximum order size limit that is set by the CFE. TPHs may not request a change to this port attribute.
Microsecond Timestamp Granularity NoDisplay microsecond level timestamp granularity for TransactTime (60), OrigTime (42) and SendingTime (52). These tags default to millisecond or second (SendingTime (52)) granularity.
Multi-Segment Holiday Day Order HandlingNone
  • Controls whether Day (TimeInForce (59) = 0) orders and quotes are cancelled or preserved across holiday trading segments comprising a single business date.
  • None = All Day orders and quotes on the book are carried between trading segments
  • Cancel = All Day orders and quotes on the book at the conclusion of the current trading segment are cancelled back
Reject Orders on DROP Port Disconnect NoAllows TPH to associate a FIX DROP port(s) to a FIX port(s). Once the association has been established and all FIX DROP ports associated with a FIX port experience a session disconnect, reject orders on the FIX port until at least one of the DROP port sessions have been reestablished.
Reject Orders on DROP Port Timeout(s) 30
  • Only applicable for sessions where "Reject Orders on DROP Port Disconnect" has been enabled. When the last associated FIX DROP port for the order entry session has disconnected, the reject/cancel actions will be taken on the order entry session if an associated FIX DROP port has not reestablished its connection in the defined time.
  • Minimum value allowed is 0.
Report MTP Fields^NoEnables LastPx (31) LastShares (32), and SecondaryOrderId (198) on Execution Reports caused by MTP.
Send Trade Breaks^NoEnables Trade Break Messages (35=‘UCC’).
Unique Wash Execution IdsNoAppends a ‘.B’ or ‘.S’ to ExecID (17) on all trades.
Send 2nd Liquidity CharacterNoSends the second character in TradeLiquidityIndicator (9730).
Port Order Rate Threshold
  • Default and Max Allowed = 3000 msgs/sec
  • 1 msg/sec for CFE test products
  • The maximum allowed message rate on the session. When the first non-administrative message is received, a one second window begins. During the second no more than 2,999 additional non-administrative messages will be allowed within that window. If the rate is exceeded all new orders in the time window are rejected, modifies are treated as cancels, and cancels are processed.
  • Note: Order handler burst rates towards each matching unit may be limited as described in Architecture and Message in Flight Settings.
Symbol Order Rate ThresholdDefault and Max Allowed = 3000 msgs/sec
  • Functions the same as the Port Order Rate Threshold but is calculated at the symbol level. It is capped by the Port Order Rate Threshold.
  • Note: Order handler burst rates towards each matching unit may be limited as described in Architecture and Message in Flight Settings.

Port attribute can be overridden via FIX on an order by order basis.

^ Requires certification.

Reason Codes

The following is a list of all reason codes used by CFE. These reason codes are used in a variety of contexts (order cancellations, order rejections, etc.). All reasons are not valid in all contexts. The reason code will be followed by free-form text. The specific text the system delivers may vary from the test listed below, to provide clarification of the reject reason. CFE may add additional reason codes without notice. Members must gracefully ignore unknown values.

CodeDescription
AAdmin
BUnknown maturity date
CUnknown product name
DDuplicate identifier (e.g., ClOrdID)
HHalted
IIncorrect data center
JToo late to cancel
KOrder rate threshold exceeded
MLiquidity available exceeds order size
NRan out of liquidity to execute against
OClOrdID doesn't match a known order
PCan't modify an order that is pending
UUser requested
VWould wash
XOrder expired
YSymbol not supported
ZUnforeseen reason
fRisk management firm level or custom group ID level
mMarket access risk limit exceeded
nRisk defaults not set
oMax open orders count exceeded
sRisk management product level
uLimit Up Limit Down (LULD)
yOrder received by CFE during replay

Revision History

  • Document
  • Version
DateDescription
1.0.005/01/17Initial version.
1.0.105/17/17
  • Added Cancel on ME Disconnect port attribute.
  • Cleanup of minor typos and formatting.
1.1.007/14/17
  • Added additional fields to accommodate Spread instrument executions.
  • Updated Mass Cancel and Purge fields to add additional filtering based on GTC orders and Spread instruments.
1.1.107/24/17
  • Introduced improved method of specifying Mass Cancel and Purge Orders operations using the MassCancelInst field.
  • Modified and clarified explanation for Variance and TAS pending and restatement Execution Reports and associated custom fields for transformed symbol, price and size for clearing.
1.1.208/07/17Renamed VariancePrice, VarianceSize and NewSymbol to ClearingPrice, ClearingSize and ClearingSymbol respectively. Removed TAS Price field using ClearingPrice instead to report transformed TAS execution price.
1.1.308/25/17Clarified ClOrdId uniqueness in New Order Single to account for long-lived GTC orders. Added ‘N’ to optional field OpenClose values in New Order Single message. Clarified Cancel on Disconnect to apply whether graceful or ungraceful disconnect. Updated Cancel on ME Disconnect and Cancel on DROP Port Disconnect port attributes to provide ability to filter out GTC orders.
1.1.409/06/17Corrected description of SecurityType(167) field description in New Order Single. Value must be either FUT or MLEG and must match instrument type of specified symbol or new order will be rejected.
1.1.509/12/17Clarified description of Carried Order Restatements and details of restatement delivery to connected TPH.
1.1.609/25/17
  • Added to documentation of Price field of New Order Single message to specify that orders that don’t comply with tick increments or values outside of system price limits will be rejected.
  • Removed CorrectedSize from Trade Cancel/Correct message as it does not apply to CFE. Added more detail to mass cancel and Purge Request, especially for Lockout behavior in MassCancelInst.
1.1.710/03/17Added missing CMTANumber (439) field to the Trade Cancel/Correct CFE to TPH message. Changed name of Tag 439 from ClearingFirm to CMTANumber for consistency.
1.1.810/17/17Cboe branding/logo changes
1.1.910/30/17
  • Both Expiration and Mapped Symbology are provided for FIX and Order-By-Order DROP. Spec changes include clarification of 55, 200 and 205 fields for DROP and the addition of SecurityID (48) field which will always contain Mapped Symbology for DROP port Execution Reports.
  • Added calculation of trade size in Variance units to VA pending Execution Report ClearingSize (21051) field. For consistency with VA, added ClearingSize (21051) to the pending Execution Report for VAO trades.
1.1.1011/02/17
  • Removed superfluous MTP comment from TradeLiquidityIndicator (9730) field in Execution Report message.
  • Added value ‘B’ (Calculated) to OrdStatus (39) field of Execution Report message to be used for all TAS and Variance post-settlement restatements. Clarified that OrderQty (38) and LeavesQty (151) are not included for TAS and Variance post-settlement restatements.
1.1.1111/14/17
  • Added Port Order Rate Threshold and Symbol Order Rate Threshold port attributes.
  • Updated description of MinQty (110) field in New Order Single message to clarify usage.
  • Added Good ‘till Date-Time orders ("GTD"), which includes support for TimeInForce (59) value of ‘6’ and addition of ExpireTime (126) in New Order Single and Execution Report messages.
1.1.1212/05/17
  • Combined the two ‘f’ Reason Codes into one line for clarity.
  • Updated Purge Acknowledgement description to replace legacy MassCancel language with MassCancelInst.
1.1.1312/21/17
  • Clarified use of Expiration symbology vs. mapped SymbolID for Spread execution Execution Reports. Specifically, updated description of Symbol (55), MaturityMonth (200) and MaturityDay (205).
  • Added OperatorId (25004) and ManualOrderIndicator (1028) as fields that may be changed with an Order Cancel/Replace Request.
  • Added GTC and GTD TimeInForce (59) values as accepted for Stop and Stop Limit orders.
1.1.1401/19/18
  • FIX Tags not defined in this specification are ignored.
  • Updated description of the Capacity (47) to clarify meaning of C and F with respect to OCC ranges.
1.1.1502/02/18
  • The TimeInForce value on an Execution Report may differ from what was sent in cases where the value is overridden by the system.
  • MinQty was missing from Execution Report message and has been added.
1.1.1602/27/18
  • Added session availability times and description of daily restart to Hours of Operation section.
  • Documented the system limit of 1,295 Cancel/Replace Requests per order per day.
1.1.1703/06/18
  • Added OCC Clearing Reference section to more clearly describe the FIX to OCC field mappings.
  • Maximum number of Cancel/Replace Requests per order per day will be raised to 1,679,615 effective 3/18/18.
1.1.1803/14/18
  • Changed valid Account field characters from 33-126 to 32-126 (i.e., space is a valid character).
  • Effective 3/18/18, updated definition of the OperatorId field to include characters 33-126, except for comma, semicolon, and pipe with minimum length of 3 and maximum length of 18 characters.
1.1.1904/10/18CumQty (14) to be populated on leg fills related to complex executions (effective 4/29/18).
1.1.2004/26/18
  • Changed field name from OperatorID (25004) to OEOID (25004).
  • Removed references to 150 = 3 (Done for Day). This feature is specific to other Cboe platforms.
1.1.2105/30/18Added section to Protocol Features detailing the conditions under which persisted orders can be cancelled while the associated product is in a suspended state.
1.1.2207/20/18
  • For TradeLiquidityIndicator, added 2nd character value of ‘U’ to indicate qualifying Market Turner order. Added State Change Tracking definitions.
  • Added Fix port and Drop port attribute "Send 2nd Liquidity Character". Added Fix port attribute "Enable State Change Tracking".
1.1.237/25/18Removed Fix port attribute "Enable State Change Tracking". Already enabled by default on all CFE FIX ports.
1.1.248/7/18Added notes to Order Cancel Request and Purge Request sections indicating request limits of 20 per second per port for identical requests.
1.1.2510/9/18Added FrequentTraderID (21097) to be used as a supplemental customer identifier for billing related programs.
1.1.2610/10/18Added description of Maximum Order Size limit set by CFE in Port Attributes section.
1.1.2704/02/19Added note identifying nomenclature change from logical port to match capacity.
1.1.2806/12/19Removed references to Firm Risk Reset as they do not apply to CFE.
1.1.2902/05/20Added note indicating that the reason code text is followed by free-form text that may vary from the text listed, to provide clarification of the reject reason. Clarified description of TransactTime (60).
1.1.3005/05/20
  • Modified Start of queuing period for the CFE Test Product ‘ZVXT’. Modified message rate for CFE test products to 10 messages per second (effective TBD).
  • Added Maximum Open Order Limits section.
1.1.3105/07/20Postponement for changes to ZVXT trading schedule and test message rate limit.
1.1.3205/13/20Modified Start of queuing period for the CFE Test Product ‘ZVXT’. Modified message rate for CFE test products to 10 messages per second (effective 5/31/20).
1.2.005/21/20Added CustOrderHandlingInst (1031) field to New Order Single, Order Cancel/Replace, and Execution Report messages. The field may be defaulted at the port level using the ‘Default Customer Order Handling Instruction’ port attribute (effective 6/28/20).
1.2.109/22/20Added note indicating availability of daily settlement price for VXT will be updated to 3:00 (effective 10/26/20).
1.2.212/11/20Updated ClOrdID (11) descriptions to indicate that a leading tilde (~) cannot be sent on any ClOrdId and will result in a reject.
1.2.307/28/21Added ‘Section 1.4.1 - Architecture’ to provide high level overview of protocol architecture and source IP blocking feature.
1.2.411/02/21Updated CxlRejReason (102) description to indicate that 2 = Broker Option.
1.2.512/06/21Added SenderLocationID (142) field to New Order Single and Execution Report messages to identify the country code of the person or system submitting the order using the ISO 3166 two-character code (effective 02/27/22).
1.2.612/16/21
  • Added SenderLocationID (142) field to Standard Message Header messages (effective 02/27/22).
  • Removed SenderLocationID (142) field from New Order Single messages.
1.2.701/26/22
  • Updated Logical Port Request form link.
  • Updated PreventMatch description to indicate that N = None (do not prevent match at any level) and on new orders, an empty PreventMatch string (NUL filled) results in default Port Attribute settings applied.
1.2.802/28/22Noted that for executions involving Spread orders, if both sides of a complex/spread trade are on the same order entry session, Cboe does not guarantee that the leg executions will not be interleaved between sides.
1.2.903/21/22Added a note indicating an order with a country code for a comprehensively sanctioned country will be rejected.
1.2.1005/26/22
  • Updated ZVXT Test Product Pre-Open period and maximum number of inbound messages per second on FIX ports for CFE Test Products (effective 06/12/22).
  • Noted the number of allowed GTC/GTD orders in test classes is three per session per matching unit (effective 06/12/22).
1.2.1106/16/22Added Section 1.3 - Holiday Sessions to provide submission timeframes and session disconnect information for holidays.
1.3.007/29/22
  • Major updates to introduce Options on Futures (effective 07/10/23 04/03/23).
  • Re-certification required before TPHs may trade options on the CFE platform (effective 07/10/23 04/03/23).
1.3.108/10/22
  • Added PossDupFlag (43) = Y, indicating a message resend and should be used during FIX Replay.
  • Noted in Microsecond Timestamp Granularity Port Attribute description "these tags default to millisecond or second (SendingTime (52)) granularity."
  • Noted Reject messages will be sent which originate from a FIX order entry session. However, rejects originating from a BOE order entry session will be suppressed.
1.3.209/09/22
  • Added NoLegs (555) and LegPositionEffect (564) to New Order Single and Execution Report messages (effective 07/10/23 04/03/23).
  • Clarified RiskReset (7692) = R indicates product-level risk/lockout reset and RiskReset (7692) = I indicates Firm-level risk/lockout reset (effective 07/10/23 04/03/23).
1.3.301/19/23Updated effective date for Options on Futures (effective 07/10/23).
1.3.405/08/23Updated reject text for persisted orders attempting to be canceled outside of trading hours to more accurately reflect when an order is known but the request is not currently being accepted (effective 05/21/23).
1.3.506/08/23OrdType = Stop Limit will not be allowed for Options on Futures orders (effective 07/10/23).
1.3.607/03/23Removed "Duplicative Order Protection Order Count Threshold" and "Duplicative Order Protection Action" port attributes.
1.3.707/20/23Updated LeavesQty (151) description to indicate the field will be sent on single-leg instrument fills resulting from spread executions (effective 08/28/23).
1.3.807/31/23Noted modifications to quotes or orders and order cancellations will result in the same time priority behavior (effective 10/01/23).
1.3.901/22/24Added new Security Definition Request and Security Definition messages (Options Only) (effective 03/25/24).
1.3.1002/02/24Updated section 1.5 to include latency expectations as well as Members/TPH's responsibility to monitor the status of the messages they send to the exchange.
1.3.1108/06/24Added new Section 1.2 - Certification Requirement.
1.3.1201/15/25Updated with Cboe Titanium branding.
1.3.1310/13/25
  • Updated to include Cancel-Only Period and Multi-Segment Holiday Day Order Handling port attribute (effective 01/12/2611/17/25).
  • Added Multi-Segment Holiday Day Order Handling port attribute in FIX Order Entry Port Attributes (effective 01/12/2611/17/25).
  • Updated table to include new Cancel-Only Period (effective 01/12/2611/17/25).
1.3.1411/05/25Updated Cancel-Only Period and Multi-Segment Holiday Day Order Handling port attribute effective date to 01/12/26.
1.3.1511/18/25Updated BeginSeqNo description from "auto-generated request ID" to "Sequence number of first message in range to be resent" in Resend Request messages.
1.3.1601/05/26Updated Carried Order Restatements, Cancellation of Carried Orders or Quotes Between Sessions, and Submission Time Frames for Holidays to reflect the new time that persisted orders are added back into the order book.
1.3.1701/14/26Updated Session Disconnect for Holidays, Automatic Disconnect on Cancel or Malfunction, and FIX Order Entry Port Attributes to explain behavior of Cancel on Disconnect with regards to the new cancel-only period.
1.3.1805/04/26
Cboe Titanium Cboe Futures Exchange FIX Specification | Cboe