# Cboe Titanium U.S. Equities FIX Specification

Version 2.9.57 · August 4, 2026

## Introduction

Note that this specification is the standard FIX specification to be used for Cboe BYX Exchange, BZX Exchange, EDGA Exchange and EDGX Exchange platforms within the NY5 data center (collectively, "Cboe" or "the Exchanges").

Cboe members use a subset of the FIX 4.2 protocol for order entry and drop copies.

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

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

### Document Format

Blue highlighted sections highlight key differences between the Cboe U.S. Equities Exchanges: (BYX only), (BZX only), (EDGA only), and (EDGX only).

### Data Types

#### Timestamps

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

#### Prices

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

- Order prices below $1.00 may be priced up to four decimal places.
- Order prices of $1.00 or more may be priced up to two decimal places.
- Order prices for securities in any of the Tick Size Pilot Program Test Groups must be entered in $0.05 increments.

Example:

| Price | Notes |
|---|---|
| 0.0001 to 0.9999 | Accepted. |
| 1.0010, 1.0001, 12.3456 | Rejected - sub-penny not allowed above one dollar (except for Retail Price Improving orders (BYX only). |
| 1.0000, 1.00, 12.3400, 12.34, etc. | Accepted - round penny (extra trailing zeroes are fine). |

### Hours of Operation

All times noted are Eastern Time zone (ET) based.

Refer to the website for the Cboe Holiday schedule.

BZX only supports an opening and closing auction for BZX Exchange listed securities. Refer to the Cboe Titanium U.S. Equities Auction Process Specification for more information.

Orders entered prior to the start of trading which are accepted will be queued for trading in the session designated by the order. Once trading begins, queued orders will be released to the respective book and crossing orders will be matched by time priority. Refer to the Cboe Titanium U.S. Equities Opening Process Specification for more information.

Orders are rejected if they are received outside the hours Cboe is available for trading or queuing. All orders remaining after the Post Market Session will be cancelled automatically (Execution Reports will be delivered).

Product and session trading hours can be found on the Cboe website.

### Protocol Features

The Exchanges do not guarantee messages sent by members/TPHs to the destination 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.

The number of messages in flight between each order handler and matching engine is 32. In addition, when the total number of unacknowledged messages exceeds 1,024, the FIX order handler will stop reading from the member-facing TCP socket. This will cause the order handler to stop removing bytes from the TCP receive buffer, and will prevent the member from sending more TCP data once the member’s send buffer is full.

When the total number of unacknowledged messages falls below 960, the reading of the member facing TCP socket will be resumed.

For message in flight counting purposes, each new order, cancel/replace, or cancel message will count as one message.

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

#### Maximum Open Order Limits

The Exchanges limit the maximum number of open orders allowed on a FIX port to 100,000 per port (BYX/EDGA only) and 300,000 per port (BZX/EDGX only). New orders will be rejected once this limit is breached until the number of open orders drops back below the limit.

#### Stale NBBO

A stale NBBO will occur when the Cboe trading system determines that one or more SIP quote channels is impaired or down completely. If the trading system detects that an NBBO is stale, new orders for the affected symbol(s) will be rejected. Any existing orders will remain on the book but will not be allowed to update (user updates, peg movements, or sliding updates). Members will be allowed to cancel any open orders. Regular trading will resume when the NBBO for a given symbol is determined to be healthy by the Cboe trading system.

## Protocol

### Message Format

FIX messages are ASCII formatted. The member will be provided with a SenderCompId and SenderSubId that must be sent on every message. The TargetCompId for all messages the member sends is based on the destination exchange as follows.

| Destination Exchange | TargetCompID |
|---|---|
| BYX Exchange | BYXX |
| BZX Exchange | BATS |
| EDGA Exchange | EDGA |
| EDGX Exchange | EDGX |

All messages the member receives will have the Sender and Target fields swapped.

### Sequence Numbers

Sequence numbers, both inbound and outbound, will be reset to 1 each night during the down time.

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

### Version Compatibility

Cboe uses the FIX 4.2 session protocol.

## Sessions

The following session messages are supported in both directions:

| Message | Type | Comment |
|---|---|---|
| Logon | A | Begin session (or resume a broken session). |
| Heartbeat | 0 |  |
| Test Request | 1 |  |
| Resend Request | 2 |  |
| Reject | 3 | Malformed message or improper session level handling. |
| Sequence Reset | 4 | Both Gap Fill (GapFillFlag = Y) and Reset. |
| Logout | 5 | Used to gracefully close session. |

### Connectivity and Certification

| Attribute | Description | Input |
|---|---|---|
| IP Address | Address to connect to. | Supplied by Cboe. |
| TCP Port | Port to connect to. | Supplied by Cboe. |
| SenderCompID | Sent in every FIX message to Cboe. | Supplied by Cboe. |
| SenderSubID | Sent in every FIX message to Cboe. | Supplied by Cboe. |
| TargetCompID (BZX only) | Sent in every FIX message to Cboe. | ‘BATS’ |
| TargetCompID (BYX only) | Sent in every FIX message to Cboe. | ‘BYXX’ |
| TargetCompID (EDGX only) | Sent in every FIX message to Cboe. | ‘EDGX’ |
| TargetCompID (EDGA only) | Sent in every FIX message to Cboe. | ‘EDGA’ |
| TargetSubID | Sent in every FIX message to Cboe. | ‘TEST’ for test/certification system. ‘PROD’ for production. |

For information on connectivity options to Cboe, refer to the Cboe Titanium U.S. Equities/Options Connectivity Manual.

All new members must pass certification before they will be permitted to enter orders in the production marketplace. Certain new order types and options will also require certification before they may be utilized. Contact the Cboe Trade Desk for more information.

### Logon Message Fields

**Table 1. Logon Message Fields**

| Tag | Field Name | Required | Description |
|---|---|---|---|
| 35 | MsgType | Y | A |
| 108 | HeartbeatInterval | Y | Client Heartbeat Interval (in seconds). |
| 141 | ResetSeqNumFlag | N | Indicates whether the FIX client and FIX server should reset sequence numbers. Absence of this field is interpreted as Do Not Reset Sequence Numbers (N). `Y` = Reset Sequence Numbers `N` = Do Not Reset Sequence Numbers |

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

If the FIX client requires both parties to re-initialize sequence numbers (i.e. reset to 1), it may use the ResetSeqNumFlag (141) field sent on the `Logon`message. The FIX server will respond with a `Logon`with the ResetSeqNumFlag (141) field set to Y to confirm the initialization of sequence numbers. This feature is intended to help a FIX client manage an emergency situation. Re-initializing sequence numbers on a login should not be relied upon as a regular practice.

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

The IP Address of the member, the SenderCompId, SenderSubId and TargetCompId (defined in table above) and TargetSubId (TEST/PROD) will be validated. If validation fails the connection will be dropped without a Reject (to avoid corrupting the members sequence in the case that the member merely mistakenly connected to the wrong port).

If connection is unexpectedly broken, upon reconnecting the member 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 member should issue a Resend Request to retrieve the missed messages.

Similarly, Cboe will issue a Resend Request to the member for messages that it missed. The member 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 member in the `Logon` message. This value will be clamped between 5 and 300 seconds and returned in the logon reply message. Cboe recommends using as low a value as the reliability and latency of your connectivity will allow.

### Heartbeat Message Fields

**Table 1. Heartbeat Message Fields**

| 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 Message Fields

**Table 1. Test Request Message Fields**

| Tag | Field Name | Required | Description |
|---|---|---|---|
| 35 | MsgType | Y | 1 |
| 112 | TestReqID | Y | Auto-generated request ID. |

If a HearbeatInterval + 1 seconds have elapsed since the last message received, a `Test Request` message should be issued. If another HearbeatInterval + 1 seconds elapse 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 Message Fields

**Table 1. Resend Request Message Fields**

| Tag | Field Name | Required | Description |
|---|---|---|---|
| 35 | MsgType | Y | 2 |
| 7 | BeginSeqNo | Y | Sequence number of first message in range to be resent. |
| 16 | EndSeqNo | Y | 0 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` message 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` message (an open range uses sequence zero as the EndSeqNo). Cboe will honor either type of request, but will always issue `Resend Request` message with a closed sequence range.

### Reject Message Fields

**Table 1. Reject Message Fields**

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

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 member is being adapted for Cboe, but should be extremely rare in production. Application layer rejects (like Order Reject and Cancel Reject) are normal.

### Sequence Reset Message Fields

**Table 1. Sequence Reset Message Fields**

| 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 Message Fields

**Table 1. Logout Message Fields**

| Tag | Field Name | Required | Description |
|---|---|---|---|
| 35 | MsgType | Y | 5 |
| 58 | Text | N | Indicates 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. Cboe will typically only request Logout after the scheduled end of FIX session.

## FIX Messages

### Standard Message Header Message Fields

**Table 1. Standard Message Header Message Fields**

| Tag | Field Name | Required | Description |
|---|---|---|---|
| 8 | BeginString | Y | FIX.4.2 Must be first field in message. |
| 9 | BodyLength | Y | Length of message following BodyLength field up to and including the delimiter preceding the CheckSum field. Must be second field in message. |
| 35 | MsgType | Y | Must be third field in message. `0` = Heartbeat `1` = TestRequest `2` = Resend/Request `3` = Reject `4` = SequenceReset `5` = Logout `8` = ExecutionReport `9` = OrderCancelReject `A` = Logon `D` = NewOrderSingle `F` = OrderCancelRequest `G` = OrderCancelReplaceRequest `UCC` = Trade Cancel/Correct |
| 49 | SenderCompID | Y | ID of sender: Assigned by Cboe for messages sent to Cboe. ( TargetCompID for messages from Cboe) |
| 50 | SenderSubID | Y | Sub ID of sender: Assigned by Cboe for messages sent to Cboe. ( TargetSubID for messages from Cboe) |
| 56 | TargetCompID | Y | ID of destination: ‘BATS’ for messages sent to BZX Exchange. ‘BYXX’ for messages sent to BYX Exchange. ‘EDGX’ for messages sent to EDGX Exchange. ‘EDGA’ for messages sent to EDGA Exchange. ( SenderCompID for messages from Cboe) |
| 57 | TargetSubID | Y | Sub ID of destination: ‘TEST’ for messages sent to Cboe test/certification system. ‘PROD’ for messages sent to Cboe production system. ( SenderSubID for messages from Cboe) |
| 34 | MsgSeqNum | Y | Sequential sequence number for session. |
| 43 | PossDupFlag | N | `N` = (Default) `Y` = Indicates a message resend and should be used during FIX Replay. All inbound orders with ‘Y’ will be rejected by Cboe. |
| 52 | SendingTime | Y | GMT date-time that message was sent. |
| 122 | OrigSendingTime | N | For messages with PossDupFlag=‘Y’, indicates time that message was first sent. |
| 115 | OnBehalfOfCompId | N | Identifies end-client on messages to Cboe. Must be allowed NSCC MPID. Service Bureaus must use. May be used by non-service bureau to specify which clearing arrangement to use if multiple clearing arrangements are configured. Alternatively, non-service bureaus may use 439 instead. |
| 116 | OnBehalfOfSubID | N | End-client sub identifier. Four characters alphanumeric, otherwise not validated. Recorded and returned in DeliverToSubID . Available via FIX Drop. |
| 128 | DeliverToCompId | N | Service Bureau use. Identifies end-client on messages from Cboe. Must be allowed NSCC MPID. |
| 129 | DeliverToSubID | N | Returns OnBehalfOfSubID optionally sent by client. |

### Standard Message Trailer Message Fields

A standard trailer terminates each message.

**Table 1. Standard Message Trailer Message Fields**

| Tag | Field Name | Description |
|---|---|---|
| 10 | CheckSum | Modulo 256 checksum of all characters in message up to and including the delimiter preceding the CheckSum field. Three digits with leading zeroes if necessary. |

### Cboe Specific Message Fields

The following FIX fields are specific to Cboe:

**Table 1. Cboe Specific Message Fields**

| Tag | Field Name | Description |
|---|---|---|
| 5700 | LocateBroker | Refer to definition in New Order Single. |
| 7692 | RiskReset | Refer to definition in New Order Single. |
| 7694 | ContraCapacity | Refer to definition in Execution Report. |
| 7695 | MassCancelID | Refer to definition in Purge Request, Purge Acknowledgment, and Purge Rejected. |
| 7696 | CancelledOrderCount | Refer to definition in Purge Acknowledgment. |
| 7698 | RiskGroupIDCnt | Refer to definition in Purge Request. |
| 7699 | RiskGroupID | Refer to definition in New Order Single, Purge Request, Execution Report, and Risk Threshold Warnings. |
| 7700 | MassCancelInst | Refer to definition in Purge Request. |
| 7928 | PreventMemberMatch | Refer to definition in New Order Single. |
| 8020 | DisplayRange | Refer to definition in New Order Single. |
| 9303 | RoutingInst | Refer to definition in New Order Single. |
| 9350 | RoutDeliveryMethod | Refer to definition in New Order Single. |
| 9355 | CrossTradeFlag | Refer to definition in New Order Single. |
| 9400 | RoutStrategy | Refer to definition in New Order Single. |
| 9479 | DisplayIndicator | Refer to definition in New Order Single. |
| 9617 | ModifySequence | Refer to definition in Execution Report. |
| 9619 | CancelOrigOnReject | Refer to definition in Order Cancel/Replace. |
| 9620 | CorrectedPrice | Refer to definition in Trade Cancel/Correct. |
| 9621 | AccessFee | Refer to definition in Execution Report. |
| 9622 | DiscretionAmount | Refer to definition in New Order Single and Execution Report. |
| 9688 | OrigCompID | Refer to definition in Execution Report. |
| 9689 | OrigSubID | Refer to definition in Execution Report. |
| 9690 | WorkingPrice | Refer to definition in Execution Report. |
| 9691 | InitialDisplayPrice | Refer to definition in Execution Report. |
| 9730 | TradeLiquidityIndicator | Refer to definition in Execution Report and Trade Cancel/Correct. |
| 9732 | AttributedQuote | Refer to definition in New Order Single. |
| 9882 | FeeCode | Refer to definition in Execution Report. |
| 25013 | RiskRuleType | Refer to definition in Risk Threshold Warnings. |
| 25014 | RiskWarnPct | Refer to definition in Risk Threshold Warnings. |
| 25015 | RiskCurrentValue | Refer to definition in Risk Threshold Warnings. |
| 25016 | RiskMaxValue | Refer to definition in Risk Threshold Warnings. |
| 25020 | CmcSessions | Refer to definition in New Order Single and Execution Report. |
| 25023 | CmcMatchQty | Refer to definition in Execution Report. |
| 25025 | StepUpAmount | Refer to definition in New Order Single. |

### Order Protocol - Member to Cboe

#### New Order Single Message Fields

**Table 1. New Order Single Message Fields**

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 35 | Standard Message Header | Y | MsgType=‘D’ |
| 97 | PossResend | N | ‘N’ (default) indicates a new order. ‘Y’ indicates an application level resend and is not supported. The message will be logged, but effectively ignored. 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 (97) =‘Y’. |
| 1 | Account | N | Reflected back on Execution Reports associated with this order. 16 characters or less Characters in ASCII range 33-126 are allowed. Available via Standard FIX Drop on an opt-in basis at the port level. Available by default on Order by Order FIX Drop. |
| 11 | ClOrdId | Y | Day-unique ID chosen by client. 20 characters or less. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe. The ‘at’ symbol and double quotes will also not be allowed. For proper OATS handling, ClOrdId must comply with OATS ‘Routed Order ID’ as defined in Appendix A of the ‘OATS Reporting Technical Specifications’. If the ClOrdId matches a live order it will be rejected as duplicate (unless PossResend (97) =‘Y’, see above). Note: Cboe only enforces the uniqueness of ClOrdID values among currently live orders. However we strongly recommend that you keep your ClOrdID values day unique. |
| 60 | TransactTime | Y | Time order initiated/released. Required by FIX 4.2, but not used by Cboe. |
| 55 | Symbol | Y | Symbol (upper case) Entire Cboe format symbol or symbol root if using CQS or CMS format. |
| 65 | SymbolSfx | N | SymbolSfx: CQS or CMS suffix if used. Do not send SymbolSfx if using Cboe format or if symbol does not have a suffix. (See Cboe Titanium U.S. Symbology Reference for more details) |
| 54 | Side | Y | `1` = Buy `2` = Sell `5` = Sell Short (client affirms ability to borrow) `6` = Sell Short Exempt |
| 114 | LocateReqd | N | Only processed for Sell Short and Sell Short Exempt. `N` = (Default) Client affirms ability to borrow, or member is relying on an exception to the Regulation SHO locate requirement. `Y` = Client does not affirm ability to borrow (results in a reject). |
| 38 | OrderQty | Y | Number of shares for order, 1 to 999,999. |
| 111 | MaxFloor | N | Portion of OrderQty to display. The balance is reserve. 0 displays entire quantity ( Default ). The displayed quantity of each order at a price level is decremented first. When displayed quantity is decremented below one round lot, it is reloaded up to MaxFloor from reserve. Ignored if order is hidden or IOC |
| 8020 | DisplayRange | N | Used for random replenishment of Reserve Orders. Refer to Reserve Order for more details. |
| 40 | OrdType | Y | `1` = Market (Regular Session only) `2` = Limit `3` = Stop `4` = Stop Limit `P` = Pegged Market implies TimeInForce of DAY. Market DAY orders can post in LULD straddle state or for short sale orders during Reg SHO circuit breakers. Pegged requires ExecInst (18) = d, e, L, m, P, Q, R, or M. Pegged orders may not be routable except for Midpoint Pegs on BYX where RoutStrategy = RMPT, RMPL, or DIRC. Effective 12/07/26 , Pegged orders entered without a Price (44) are only accepted during RTH. |
| 44 | Price | N | Limit Price. Required for limit orders. If populated for a market order ( OrdType (40) = 1), the order will be accepted and behave like a market order (i.e. Price will be ignored). This field is also used to specify an optional Cap Price for Pegged Orders. Order rejected if priced finer than the minimum trading increment for the stock. |
| 99 | StopPx | N | The trigger price for Stop and Stop Limit orders. Required if OrdType (40) is equal to 3 or 4. Stop and Stop Limit orders will only be triggered off Last Sale Eligible trades. |
| 9622 | DiscretionAmount | N | Discretion is implicitly added to bid prices and subtracted from offer prices. Order will be displayed at Price but can execute in discretionary range. A discretionary order will use the minimum amount of discretion necessary to achieve execution. Zero applies no discretion (Default). Max discretion to apply to Price (non-negative 0.00 to 99.99). Non-zero DiscretionAmount does not mix with IOC. It also does not mix with Post-Only ( RoutingInst (9303) = P). |
| 211 | PegDifference | N | Signed dollar value up to two (four) decimal places* is added to result of peg calculation when the peg difference is at or above (below) $1.00. Signed dollar value up to two decimal places* is added to result of peg calculation when peg difference is above $1.00. Default is zero for Midpoint Discretionary Orders with ExecInst (18) = `d` ( EDGA and EDGX Only ). Default is $0.01 (-$0.01) for sell (buy) Midpoint Discretionary Orders with ExecInst (18) = `e` . ( EDGA and EDGX Only ). Displayed Primary Peg orders with non-aggressive offset must have TimeInForce (59) = R (Regular Hours Only) or 0 (Day). Day orders must be submitted after 9:30 a.m. ET. May be an aggressive offset (i.e. positive number on a buy order) for hidden Primary pegs. Must be zero (or not specified) for non-pegged orders. * PegDifference is rounded (down for Buy, up for Sell) if the resulting price is above $1.00 except as noted below. BYX and EDGX Only: If ExtendedExecInst (9416) = `T` (Retail Price Improving order): May be priced in $0.001 increments. Must be >= 0 for Buy orders. Must be <= 0 for Sell orders. For Periodic Auction Only orders, aggressive offsets only for primary peg orders. No restrictions for Periodic Auction Eligible orders. Orders with passive offsets will be rejected. |
| 110 | MinQty | N | Minimum fill quantity for non-routable hidden or non-routable IOC orders which only interact with liquidity on the target Cboe Exchange. Ignored if Enable True MinQty is set to "No" and the order is a routable displayed or routable IOC. Order is rejected if Enable True MinQty is set to "Yes" and the order is a routable displayed or routable IOC. Default is zero. Odd lot and mixed lot quantities allowed. When the remaining size on an order is less than the defined MinQty , then MinQty will be automatically set to the remaining size. MinQty is not compatible with Retail Price Improving (RPI) orders (BYX and EDGX Only) . When ‘Enable True MinQty’ is set to "No" the minimum total fill size may be made up of several consecutive smaller fills. Setting this port attribute to "Yes" will require every fill to meet the defined MinQty . See US Equities FIX Port Attributes for details. If ‘Enable True MinQty’ is set to ‘Yes’, orders will be converted into standard MinQty during a Periodic Auction. Periodic Auction Eligible orders will remain as True MinQty in the continuous book (BYX Only) . |
| 47 | OrderCapacity | Y | The capacity for the order. `A` = Agency `P` = Principal `R` = Riskless Principal |
| 59 | TimeInForce | N | `0` = DAY (Default) (Early Trading Session until end of Regular Session) (EDGX only effective 12/07/26: Overnight Trading Session until end of Regular Session) `1` = GTC (Allowed, but treated same as Day) `2` = At the Open ( Available on BZX and applicable to Cboe listed securities only ) `3` = IOC (Portion not filled immediately is cancelled) `4` = FOK (An IOC where the entire size must be filled, else the order will be cancelled back) `5` = GTX (Early Trading Session until end of Post-Market Session) (EDGX only effective 12/07/26: Overnight Trading Session until end of Post-Market Session) `6` = GTD (Early Trading Session; expires at earlier of specified ExpireTime or end of Post-Market Session) (EDGX only effective 12/07/26: expires at earlier of specified ExpireTime or end of Post-Market Session) `7` = At the Close ( Available on BZX and applicable to Cboe listed securities and Cboe Market Close symbols ) `E` = PRE (Pre-Market Trading Session until end of Regular Session) `R` = RHO (Regular Hours/Session Only) `T` = PTD (Pre-Market Trading Session; expires at earlier of specified ExpireTime or end of Post-Market Session) `X` = PTX (Pre-Market Trading Session until end of Post-Market Session) |
| 126 | ExpireTime | N | Required for TimeInForce (59) = `6` (GTD) or `T` (PTD) orders, specifies the UTC Date/Time timestamp that the order expires. Valid timestamps must have today’s date and a time within trading hours. Values may be specified at a millisecond level. |
| 18 | ExecInst | N | Single value only (with no trailing space) All values not defined below are ignored. `f` = Intermarket Sweep (Directed or Cboe) `P` = Market Peg (peg Buy [Sell] to NBBO Offer [Bid]) `Q` = Market Maker Peg (see below) `R` = Primary Peg (peg Buy [Sell] to NBBO Bid [Offer]) `U` = Supplemental Peg Order `M` = Midpoint (peg to NBBO Midpoint) `m` = Midpoint (peg to NBBO Midpoint, but do not match when NBBO is locked) `L` = Alternate Midpoint (less aggressive of midpoint and 1 tick inside NBBO) EDGA and EDGX: `d` = Midpoint Discretionary Order `e` = Midpoint Discretionary Order with Quote Depletion Protection BZX: `r` = Late (for use with Auction Only orders); refer to the Cboe Titanium U.S. Equities Auction Process Specification for more information BZX and EDGX: `o` = Listing Market Opening (for ROOC strategy only) `c` = Listing Market Close (for ROOC strategy only) `a` = Both Listing Market Open and Close (for ROOC strategy only; also eligible for participation in halt auctions) |
| 9416 | ExtendedExecInst | N | `N` = None `R` = Retail Order; eligible for Retail rebate. BYX and EDGX: `P` = Retail Order (Price Improvement Only) `T` = Retail Price Improving Order `Refer to Retail Price Improvement Program for other fields required if 9416` = P, R or T. EDGX: `X` = Retail Priority Order ; eligible for Retail Priority and Retail rebate rate. |
| 9479 | DisplayIndicator | N | Re-pricing Options: `V` = Default. As determined by port level setting (defaults to S) `P` = Price Adjust `m` = Multiple Price Adjust `R` = Cancel back the order if it cannot be booked and displayed without adjustment `r` = Hidden; cancel back the order if it cannot be booked without adjustment `S` = Display Price Sliding (this is to override an opt-out of Display Price Siding at the port level) `L` = Display Price Sliding, but cancel back if order crosses the NBBO on entry `M` = Multiple Display Price Sliding `h` = Hidden Multiple Price Slide (effective 09/04/26) Other Options: `v` = Visible (for visible peg orders only; others will be rejected) `I` = Invisible (see Peg Order for applicability to peg orders) `N` = No Rescrape at Limit. Applicable only to fully routable, IOC orders ( RoutingInst = R and TimeInForce = 3). After walking the price to the limit, there will be no final scrape at Cboe and the cancel reason code will state X (Expired) rather than N (No Liquidity). Refer to Re-Priced Orders for more information. |
| 7928 | PreventMemberMatch | N | Cboe Match Trade Prevention: 3 characters (not space separated): 1 st character - MTP Modifier: `N` = Cancel Newest `O` = Cancel Oldest `B` = Cancel Both `S` = Cancel Smallest `D` = Decrement Larger / Cancel Smaller `d` = Same as D above, but only decrement LeavesQty. Do not restate OrderQty. 2 nd character Unique ID Level: `F` = Prevent Match at Firm(Member) Level `M` = Prevent Match at MPID Level `X` = Prevent Match at the Affiliate (Exchange Member) or Sponsored Participant Level 3 rd character Trading Group ID (optional): Member-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. The MTP Modifier (character 1) of the inbound order will be honored, except that if the inbound order specifies Decrement and the resting order does not, and the resting order is larger, then both orders will be cancelled. This exception is to protect the order entry software for the resting order from receiving an unexpected restatement message. If order entry software is prepared to handle unexpected restatement messages, this exception may be overridden at the port level by requesting "Allow MTP Decrement Override" functionality. Uses of MTP Modifier D or d and users of "Allow MTP Decrement Override" functionality must be prepared to receive a FIX Restatement message that decrements LeavesQty (and, for method D, OrdQty as well). Match Trade Prevention will be supported for Periodic Auctions (BYX only) . |
| 9303 | RoutingInst | N | 1 st character: `B` = Book Only (not routable, will remove from local book) `P` = Post Only (not routable) `R` = Routable ( Default if not specified on the port or order level ) `S` = Super Aggressive - Cross or Lock (order will be removed from the book and routed to any away quote that is locking or crossing the order). May remove liquidity after posting. `X` = Aggressive - Cross or Lock (order will be removed from the book and routed to any away quote that is locking or crossing the order) `K` = Super Aggressive When Odd Lot (routable order will be automatically assigned Super Aggressive status when it becomes an odd lot) `A` = Post to Away (a limit order that will post remainder to an away venue specified in ExDestination for applicable routing strategies) `N` = Non-Displayed Swap - Book only, Hidden order that may remove liquidity after posting. Requires DisplayIndicator = I. 2 nd character (for use with RoutStrategy (9400) = DIRC, TRIM, SLIM, SLIM+ only): `D` = Eligible to route to DRT ( Default if not specified on the port or order level ) `L` = Route to displayed markets only |
| 9350 | RouteDelivery Method | N | `RTI` = Route to Improve ( Default if not specified ) `RTF` = Route to Fill Route to Improve : Ability to receive price improvement will take priority over speed of execution. Route to Fill : Speed of execution will take priority over potential price improvement. Only applicable to RoutStrategy (9400) = ROUT, ROUX, and ROOC. |
| 9400 | RoutStrategy | N | Please note: DRT: Dark Routing Technique LCPMC: Low Cost Protected Market Centers All exchanges: `ALLB` = Book + IOC Other Cboe Exchanges `RDOT` = Book + DRT + IOC/Day NYSE `ROUT` = Book + DRT + Street ( default if not specified ) `ROUX` = Book + Street `ROUZ` = Book + DRT `SWPA` = ISO Sweep of All Protected Markets `DIRC` = Book + DRT + Directed IOC or Directed ISO if ExecInst (18) = f. ExDestination must also be sent. EDGA/EDGX: `ROUC` = Book + DRT + LCPMC + All Other Protected Markets + Posts to EDGX (EDGX only) or EDGA (EDGA only) BYX: `DIRC` = Book + Midpoint IOC IEX (also requires Ordtype = P, ExecInst (18) = M or m, and ExDestination = I) `RMPT` = Book + Midpoint IOC Select (DRT/Lit Venues) + Post to Local Book if non-IOC (must be used in conjunction with Midpoint Peg order type) `RMPL` = Book + Midpoint IOC RMPT Venues + Midpoint IOC RMPL Venues + Post to Local Book if non-IOC (must be used in conjunction with Midpoint Peg order type) BYX : `TRIM` = Book + NYSE National + Nasdaq Texas + (DRT) `SLIM` = Book + LCPMC + (DRT) + LCPMC + All other protected markets BZX: `TRIM` = BZX + BYX + NYSE National + Nasdaq Texas + NYSE American+ (DRT) `SLIM` = BZX + BYX + LCPMC + (DRT) + LCPMC + All other protected markets SLIM+ = BYX 1 + BZX + LCPMC + (DRT) + LCPMC + All other protected markets BZX/EDGX: `ROOC` = Listing Market Open + Book + DRT + Street + Listing Market Close 2 1 Route to BYX prior to scraping BZX unless price improvement is available. 2 Can be used with ExecInst (18) = a, c, or o to specify listing market opening/closing eligibility. |
| 100 | ExDestination | N | Specifies the designated away venue for RoutStrategy (9400) = DIRC. Also used in conjunction with RoutingInst (9303) = A (Post to Away) & RoutStrategy (9400) = ROUT or ROUX to specify where order is to be posted. `A` = NYSE American 1 `B` = NASDAQ Texas 1 `C` = NYSE National `F` = Texas Stock Exchange 1 `G` = 24X National Exchange `H` = MIAX Pearl `I` = Investors Exchange `J` = EDGA 1 `K` = EDGX 1,2 `L` = Long Term Stock Exchange `M` = NYSE Texas 1 `N` = NYSE 1 `P` = NYSE Arca 1 `Q` = Nasdaq 1 `T` = Intelligent Cross (pending approval) `U` = MEMX `X` = Nasdaq PSX `Y` = BYX 1 `Z` = BZX 1 1 Post to Away option available for ROUT and ROUX. 2 Post to EDGX (for ROUT, ROUX, ROUZ, RDOT). |
| 9355 | CrossTradeFlag (BYX Only) | N | Used to set eligibility for Periodic Auctions. Can be entered on individual orders or as a port setting. `0` = None (to override port setting as necessary) `1` = Periodic Auction Only `2` = Periodic Auction Eligible |
| 439 | ClearingFirm | N | Firm that will clear trade. Must be allowed NSCC MPID. 4 characters upper case alphanumeric. NOTE: Shares storage with OnBehalfOfCompID . If both fields are sent they must be equal. |
| 440 | ClearingAccount | N | Supplemental identifier. Four characters alphanumeric, not otherwise validated. Recorded and returned in Execution Reports. Available via FIX Drop. NOTE: Shares storage with OnBehalfOfSubID . If both fields are sent then OnBehalfOfSubID takes precedence for Service Bureau connections, and ClearingAccount takes precedence for other connections. |
| 9732 | AttributedQuote | N | Allow for order to be attributed to firm’s MPID or optionally "RTAL" (for retail firms) in Cboe market data feeds. The order may also be included within attributed summary information displays related to quote/trade information on the Cboe web site. Must opt-in to support through Cboe Trade Desk. `N` = Do not attribute firm MPID to this order. `Y` = Attribute firm MPID to this order. `R` = Attribute "RTAL" to this order. |
| 7692 | RiskReset | N | For use by customers to reset or release MPID, symbol or RiskGroupID (7699) level lockout conditions resulting from self-imposed lockouts issued via `Purge Request` messages. Single Character Values: `S` = Symbol level lockout reset `F` = MPID level lockout reset `C` = RiskGroupID lockout reset Values may be combined together to allow for resets of multiple self-imposed lockouts in a single message. For example, ‘FS’, ‘SC’, ‘FC’, and ‘SFC’ are all acceptable values. If orders have been locked out at any level, inbound orders for the locked Symbol (55) , MPID , or RiskGroupID (7699) will be rejected until this field is filled with the appropriate value on a `New Order Single` message. |
| 7699 | RiskGroupID | N | Optional member-specified ID for the order. Cancellation by RiskGroupID available using Purge Port Protocol - Member to Cboe only. Integer 1-65535. |
| 5700 | LocateBroker | N | Used for short sale orders to identify the broker that the short seller has identified as the source from which they will borrow the securities they are selling short. |
| 25020 | CmcSessions | N | 2 character field. Specifies the range of CMC sessions the order is eligible to participate in. If not specified CMC orders will be eligible to participate in all CMC matching sessions. 1st Character: First CMC session the order is eligible to participate in. If the second character is not provided the order will only participate in this session. 2nd Character: If provided, specifies the final CMC session the order is eligible to participate in. `A` = 3:15 p.m. `D` = 3:30 p.m. `L` = 3:49 p.m. `S` = 3:54 p.m. (Nasdaq-listed only) |
| 25025 | StepUpAmount(BYX only) | N | StepUpAmount is implicitly added to bid prices and subtracted from offer prices for Enhanced RPI (Retail Price Improvement) orders. The StepUpAmount value is specified in 0.001 minimum increments. The minimum value is 0.000 (default). The maximum value is 99.999. |
| 58 | Text | N | Free format text string. Limit of 64 characters. |
|  | Standard Message Trailer | Y |  |

#### Order Cancel Request Message Fields

Request to cancel an order.

**Table 1. Order Cancel Request Message Fields**

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 35 | Standard Message Header | Y | MsgType=‘F’ |
| 97 | PossResend | N | ‘N’ ( default ) indicates a new cancel. ‘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. |
| 11 | ClOrdID | Y | Day-unique cancel ID chosen by member. 20 characters or less. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe. Duplicate order ClOrdID s will be rejected (or ignored if PossResend =‘Y’). |
| 41 | OrigClOrdID | N | ClOrdID of the order to cancel. OrderID must be sent if ClOrdID is not. |
| 37 | OrderId | N | OrderID supplied by Cboe on the order acknowledgment. Optional but recommended for performance. ClOrdID must be sent if OrderID is not. |
| 60 | TransactTime | N | Time cancel initiated/released. Required by FIX 4.2 but not used by Cboe. |
| 55 | Symbol | N | Ignored |
| 65 | SymbolSfx | N | Ignored |
| 54 | Side | N | Ignored |
| 38 | OrderQty | N | Ignored |
|  | Standard Message Trailer | Y |  |

#### Order Cancel/Replace Request Message Fields

Request to modify an order. Only Price, Side, OrderQty, StopPx, MaxFloor, and OrdType may be adjusted. Modifies will result in a loss of time priority unless the modification involves a decrease in OrderQty, a change to MaxFloor, a change to StopPx, or a change in Side from sell long to sell short or vice-versa.

Other fields (including ExecInst) will be ignored, and the value from the original order will be re-used. In particular note that when a Day-ISO is modified the ISO designation continues to apply to the order.

A change in MaxFloor takes effect on the next reserve reload.

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 modification request overlaps partial fills for the current order, leaving the member in total control of the share exposure of the order.

The `Cancel/Replace` message will only be accepted if the original order can be successfully removed. Requests which cannot be processed will be rejected using the `Cancel Reject` message. The `Cancel Reject` message will provide the ClOrdID and OrigClOrdID values which were specified on the `Cancel/Replace` message for identification.

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

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

**Table 1. Order Cancel/Replace Request Message Fields**

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 35 | Standard Message Header | Y | MsgType=‘G’ |
| 97 | PossResend | N | ‘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/Replace. |
| 1 | Account | N | Ignored - Value preserved from original order. |
| 11 | ClOrdId | Y | Day-unique ID chosen by member. 20 characters or less. Characters in ASCII range 33-126 are allowed, except for comma, semicolon, and pipe. Duplicate order ClOrdID s will be rejected 1 (or ignored if PossResend =‘Y’). |
| 41 | OrigClOrdID | Y | 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. |
| 37 | OrderId | N | OrderId supplied by Cboe on the order acknowledgment. In the case of multiple changes to a single order, this will be the OrderId from the most recent acknowledgment. |
| 60 | TransactTime | Y | Time Cancel/Replace initiated/released. |
| 55 | Symbol | N | Ignored - value preserved from original order |
| 65 | SymbolSfx | N | Ignored - value preserved from original order |
| 54 | Side | N | May only be used to change from sell long to sell short or vice-versa. `1` = Buy `2` = Sell `5` = Sell Short (client affirms ability to borrow) `6` = Sell Short Exempt |
| 38 | OrderQty | N | Number of shares for order. This will modify the OrderQty of the current order; it does not directly set the remaining quantity. |
| 40 | OrdType | N | `1` = Market (Regular Session only) `2` = Limit `3` = Stop `4` = Stop Limit `P` = Pegged Defaults to original order if not sent. May replace Limit with Market and vice versa OR Stop with Stop Limit and vice versa, but otherwise must match original order (or not be sent). |
| 44 | Price | N | Limit Price. Order rejected if priced finer than the minimum trading increment for the stock. |
| 18 | ExecInst | N | Ignored - value preserved from original order |
| 111 | MaxFloor | N | Portion of OrderQty to display. The balance is reserve. Takes effect on the next reserve order reload or priority losing event. A value of zero will be ignored. If MaxFloor is to be removed completely, then the order should be cancelled and a new order sent. |
| 99 | StopPx | N |  |
| 9619 | CancelOrigOnReject | N | `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). Default is configurable per port (N if not configured). |
| 5700 | LocateBroker | N | Used for short sale orders to identify the broker that the short seller has identified as the source from which they will borrow the securities they are selling short. |
|  | Standard Message Trailer | Y |  |

1 Cancel/Replace messages that merely reduce OrderQty may be overlapped if the existing ClOrdID is re-used. This is the only case (due to OATS restrictions) where re-use of the existing ClOrdID is allowed.

### Order Protocol - Cboe to Member

#### Execution Report Message Fields

This section contains all possible fields that are sent in Execution Reports. Not all fields are sent on each Execution Report. Additional or unexpected FIX fields on all FIX messages should be ignored.

**Table 1. Execution Report Message Fields**

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 35 | Standard Message Header | Y | MsgType=‘8’ |
| 20 | ExecTransType | Y | `0` = New `3` = Status |
| 17 | ExecID | Y | Day-unique id of execution message. Will be zero for ExecTransType of Status (3). |
| 18 | ExecInst | N | Copied from order. |
| 9416 | ExtendedExecInst | N | Copied from order. |
| 150 | ExecType | Y | Reason for this Execution Report: `0` = New (acknowledgment of new order) `1` = Partial Fill `2` = Fill `3` = DoneForDay `4` = Canceled `5` = Replaced `6` = Pending Cancel `8` = Rejected `D` = Restated `E` = Pending Replace Pending Cancel ‘6’ and Pending Replace ‘E’ are only valid for routed orders that have posted to an away market. For Standard FIX Drop, only ‘1’ or ‘2’ will be sent and will always equal OrdStatus (39). For Order by Order FIX Drop , all execution information will be sent. |
| 378 | ExecRestatementReason | N | Only present when 150=D `3` = Repricing of Peg Order `4` = State Change `5` = Reduction of OrdQty due to SWP or MTP Decrement `6` = Price Sliding Reprice or Reserve Order Reload `C` = Cboe Market Close (CMC) |
| 11 | ClOrdID | Y | 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). |
| 41 | OrigClOrdID | N | ClOrdID of the order being cancelled or replaced (for a solicited Cancel or Cancel/Replace, otherwise not present). |
| 37 | OrderId | Y | OrderId (supplied by Cboe). |
| 382 | NoContraBrokers | N | Only present on trades. Always 1. |
| 375 | ContraBroker | N | Only present on trades. `AMEX` = Routed to NYSE American `ARCA` = Routed to NYSE Arca `BEX` = Routed to Nasdaq Texas `CHX` = Routed to NYSE Texas `ICRS` = Routed to Intelligent Cross (pending approval) `IEX` = Routed to Investors Exchange `INET` = Routed to Nasdaq `LTSE` = Routed to Long Term Stock Exchange `MEMX` = Routed to Members Exchange `NYSE` = Routed to NYSE `PERL` = Routed to MIAX PEARL `PSX` = Routed to Nasdaq PSX `NSX` = Routed to NYSE National `DRT` = Routed to DRT Pool `TFXE` = Routed to 24X National Exchange `TXSE` = Routed to Texas Stock Exchange `BATS` = Routed to Cboe BZX Exchange* `BYXX` = Routed to Cboe BYX Exchange* `EDGA` = Routed to Cboe EDGA Exchange* `EDGX` = Routed to Cboe EDGX Exchange* *Internally matched if ContraBroker matches the identifier of the local trading platform’s book. |
| 39 | OrdStatus | Y | State of order. `0` = New `1` = Partially Filled `2` = Filled `3` = DoneForDay `4` = Canceled `5` = Replaced `6` = Pending Cancel `8` = Rejected `A` = Pending Ack `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. |
| 103 | OrdRejReason | N | Only used when ExecType is Rejected (8). `0` = Exchange option `1` = Unknown symbol `2` = Exchange closed `3` = Order exceeds limit `5` = Unknown order `6` = Duplicate order `8` = Stale order |
| 1 | Account | N | Copied from order. For Order by Order FIX Drop, all execution information will be sent. |
| 55 | Symbol | Y | Copied from order. |
| 65 | SymbolSfx | N | Copied from order. |
| 54 | Side | Y | Copied from order. |
| 38 | OrderQty | Y | Copied from order. On restatements ( `150` = D ) the OrderQty may be updated (for example, for SWP or CMC restatements). |
| 111 | MaxFloor | N | Copied from order. |
| 44 | Price | N | Copied from order. |
| 8020 | DisplayRange | N | Copied from order. |
| 9622 | DiscretionAmount | N | Copied from order. |
| 59 | TimeInForce | N | Copied from order. |
| 126 | ExpireTime | N | Copied from order if TimeInForce is GTD (6) or PTD (T). |
| 439 | ClearingFirm | N | Copied from order. |
| 440 | ClearingAccount |  | Copied from order if present. |
| 32 | LastShares | N | Quantity of shares traded on this fill (zero for non-fills). Reports the amount of shares cancelled for Cboe Market Close restatements, which are sent after each matching session cut-off time. Reports the size of Cboe Market Close fills, which are sent after the official closing price is received from the primary listing exchange.. 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 either reduced or cancelled (i.e. inbound Cancel Both or Decrement). With MTP, this is the number of shares that would have matched. |
| 31 | LastPx | N | Price of this fill (zero for non-fills). Reports the price of Cboe Market Close fills, which are sent after the official closing price is received from the primary listing exchange. 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 either reduced or cancelled (i.e. inbound Cancel Both or Decrement). With MTP, the price at which LastShares would have matched. |
| 151 | LeavesQty | Y | Quantity of shares still open for further execution. Will include shares already matched in an earlier session for CMC restatements. Will be zero if order is dead, otherwise will be OrderQty (38) - CumQty (14). Note: It is possible for LeavesQty to be zero when ExecType (150) = 5 indicating that the order is dead. |
| 14 | CumQty | Y | Cumulative quantity of shares executed for this order. |
| 99 | StopPx | N | Copied from order. |
| 6 | AvgPx | Y | Average price of executions for this order weighted by trade size. Zero if CumQty is zero. |
| 198 | SecondaryOrderID | N | Present on a MTP triggered cancel/restatement, on a reserve reload restatement, and on a Cancel/Replace acknowledgment that increases the size of a reserve order. Cboe OrderId of contra side of prevented match (MTP), or Cboe PITCH OrderId for displayed portion of reserve order after reload, or Cboe PITCH OrderId for the displayed portion of a reserve order after a Cancel/Replace increased the size of the reserve order. Must request opt-in at firm or port level for "Report MTP Fields" or "Restate on Reload" to receive this field. |
| 9730 | TradeLiquidityIndicator | Y | Present for acknowledgments and fills (150=0, 150=1 or 150=2). Recommended mapping to FIX Tag 851 provided: 1 st Character `A` = Trade Added Liquidity (851=1) `C` = Auction/Uncrossing (851=4) `R` = Trade Removed Liquidity (851=2) `W` = Waiting for execution at pre-market time as defined by TimeInForce (59) value and 'Hold Early to 7am' port setting. Only applied on the initial order acknowledgment. `X` = Routed Trade (851=3) 2 nd Character `E` = Trade added RPI liquidity (BYX and EDGX Only) `H` = Hidden liquidity add trade `I` = Hidden liquidity add trade that was price improved `J` = Execution from order that joined the NBBO `P` = Periodic Auction (BYX Only) `S` = NBBO-Setter fee eligible `V` = Visible liquidity add trade that was price improved `m` = Trade added or removed liquidity against a Midpoint peg `s` = Order set the NBBO but is not fee eligible Must request opt-in at firm or port level to receive 2 nd characters in this field. To allow for future expansion of this field, please ignore values with an unknown character in the 2 nd position. MTP For members that opt-in to Report MTP Fields functionality (at firm or port level), the liquidity add and remove values may be presented on an MTP triggered cancel/restatement. State Change Tracking For members that opt-in to State Change Tracking at the port level, order acks (150=0), modify acks (150=5) and restatements (150=D with 378=4) will carry 9730 messages defined as follows: `A` = Zero or more immediate partial remove fills followed by posting. `R` = Zero or more immediate partial remove fills followed by a cancel (or full fill). `X` = Zero or more immediate partial remove fills followed by routing. |
| 9882 | FeeCode | N | Specific fee code associated with execution. See the Fee Schedule for the respective market for possible values. |
| 9621 | AccessFee | N | Transaction fee or rebate, inclusive of earned tiers, for the trade. Only present when ExecType (150) = 1 or ExecType (150) = 2. |
| 9690 | WorkingPrice | N | Must be enabled at the firm or port level. Only present on Accepted, Replaced, or Restated and only when order is fully or partially booked. If Price had to be adjusted to a less aggressive value to avoid crossing the NBBO, the adjusted price will be reported here, otherwise equals Price . |
| 9691 | InitialDisplayPrice | N | Must be enabled at the firm or port level. Only present on Accepted, Replaced, or Restated and only when order is fully or partially booked. If order had to be temporarily displayed at a less aggressive value to avoid locking the NBBO, the initial displayed price will be reported here, otherwise equals WorkingPrice . |
| 9617 | ModifySequence | N | FIX Drop only. Base 36 number of times order has been replaced. |
| 9688 | OrigCompID | N | FIX Drop only. TargetCompID of original FIX exec report. FIX Drop port must be configured to send this optional field. |
| 9689 | OrigSubID | N | FIX Drop only. TargetSubID of original FIX exec report. FIX Drop port must be configured to send this optional field. |
| 60 | TransactTime | Y | GMT date-time that transaction occurred. |
| 58 | Text | N | If present, indicates reason for reject or cancel. Format is one letter reason code followed by colon and space followed by free form text message. (e.g. ‘N: No Liquidity at price’). The specific text the system delivers may vary from the text listed below, to provide clarification of the reject reason. Reason codes are one of the following: `A` = Admin `C` = Capacity undefined `D` = Duplicate identifier (e.g., ClOrdID) `E` = Size reduction due to SWP restatement `F` = Failed to quote `H` = Halted `I` = Incorrect data center `J` = Too late to cancel `K` = Order rate threshold exceeded `L` = Order would lock or cross NBBO `M` = Order size exceeded `N` = Ran out of liquidity to execute against `O` = ClOrdID doesn’t match a known order `P` = Can’t modify an order that is pending fill `Q` = Waiting for first trade `R` = Routing Unavailable `S` = Short sale price violation `T` = Fill would trade through the NBBO `U` = User requested `V` = Would wash `W` = Add liquidity only order would remove `X` = Order expired `Y` = Symbol not supported `Z` = Unforeseen reason `f` = Risk management MPID or RiskGroupID level `m` = Market access risk limit exceeded `o` = Max open orders count exceeded `r` = Reserve reload `s` = Risk management symbol level `u` = Limit Up Limit Down (LULD) `w` = Would remove on unslide `x` = Crossed market `y` = Order received by Cboe during replay |
| 9355 | CrossTradeFlag(BYX Only) | N | Copied from order. |
| 5700 | LocateBroker | N | Used for short sale orders to identify the broker that the short seller has identified as the source from which they will borrow the securities they are selling short. |
| 25020 | CmcSessions | N | The CMC session range the order is eligible to participate in. |
| 25023 | CmcMatchQty | N | Reports the number of shares matched during a particular matching session for CMC restatements. |
| 25025 | `StepUpAmount`(BYX only) | N | `StepUpAmount` is implicitly added to bid prices and subtracted from offer prices for Enhanced RPI (Retail Price Improvement) orders. The `StepUpAmount` value is specified in 0.001 minimum increments. The minimum value is 0.000 (default). The maximum value is 99.999. |
|  | Standard Message Trailer | Y |  |

##### State Change Tracking

For members that wish to track the state of their routable orders, they may opt-in to the following functionality at the port level by contacting the Cboe Trade Desk.

Order acks (150=0), modify acks (150=5) and restatements (150=D with 378=4) will carry TradeLiquidityIndicator (9730) as follows:

- `A` = Zero or more immediate partial remove fills followed by posting.
- `R` = Zero or more immediate partial remove fills followed by a cancel (or full fill).
- `X` = Zero or more immediate partial remove fills followed by routing.

When an order returns from the router, a restatement will be generated with FIX Tags:

- `150` = D (Restated)
- `378` = 4 (State Change)
- `58` = A (Admin)
- `9730` = A, X or R (as defined in Execution Report Message Fields)
- Order details to match the order (OrdQty, Price, etc.)
- Cumulative execution details to match the current status (CumQty, LeavesQty, etc.)
- Current execution details zeroed (LastPx, LastShares, etc.)

#### Cancel Reject Message Fields

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.

**Table 1. Cancel Reject Message Fields**

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 35 | Standard Message Header | Y | MsgType=‘9’ |
| 11 | ClOrdID | Y | ClOrdID from the Cancel or Cancel/Replace request. |
| 41 | OrigClOrdID | Y | ClOrdID of the order that failed to be cancelled or replaced. |
| 37 | OrderId | Y | OrderId of order that failed to be cancelled or replaced. Represents the originating/initial order in an order chain. ‘NONE’ if CxlRejReason is Unknown (1). |
| 39 | OrdStatus | Y | Order Status of order that failed to be cancelled or replaced. |
| 1 | Account | N | Copied from Cancel or Cancel/Replace request. |
| 434 | CxlRejResponseTo | Y | This reject is in response to a: `1` = Cancel `2` = Cancel/Replace |
| 102 | CxlRejReason | N | `0` = Too late to cancel. `1` = Unknown order. `3` = Already pending cancel or pending replace. |
| 58 | Text | N | Free form text message. |
|  | Standard Message Trailer | Y |  |

#### Trade Cancel/Correct Message Fields

Sends a Trade Cancel/Correct message for a trade break. 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.

**Table 1. Trade Cancel/Correct Message Fields**

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 35 | Standard Message Header | Y | MsgType=‘UCC’ |
| 20 | ExecTransType | Y | `1` = Trade Cancel `2` = Trade Correct |
| 17 | ExecID | Y | Day-unique id of execution message. |
| 19 | ExecRefID | Y | Refers to the ExecID of the message being cancelled or corrected. |
| 37 | OrderId | Y | OrderId of the original trade being cancelled/corrected. |
| 11 | ClOrdID | Y | ClOrdID of the original trade being cancelled/corrected. |
| 55 | Symbol | Y | Copied from original trade being cancelled/corrected (Available in FIX Drop). |
| 65 | SymbolSfx | Y | Copied from original trade being cancelled/corrected (Available in FIX Drop). |
| 54 | Side | Y | Copied from original trade being cancelled/corrected. |
| 9730 | TradeLiquidityIndicator | Y | Copied from original trade being cancelled/corrected. |
| 9882 | FeeCode | N | Only for Trade Corrects. Corrected fee code. |
| 439 | ClearingFirm | N | Copied from original trade being cancelled/corrected (if present). |
| 440 | ClearingAccount | N | Copied from original trade being cancelled/corrected (if present). |
| 9620 | CorrectedPrice | N | Only for Trade Corrects. Corrected price. |
| 32 | LastShares | Y | Quantity of shares on the original trade being cancelled/corrected. |
| 31 | LastPx | Y | Price on the original trade being cancelled/corrected. |
| 42 | OrigTime | Y | GMT date-time of cancel/correct in nanoseconds. |
| 60 | TransactTime | Y | GMT date-time of cancel/correct. |
|  | Standard Msg Trailer | Y |  |

### Purge Port Protocol - Member to Cboe

A Purge Port may be created using either the FIX or BOE protocol. For BOE Purge Port messaging, see the Cboe Titanium U.S. Equities BOEv3 Specification.

#### Purge Request Message Fields

Request to cancel a group of orders across all of the firm’s sessions. A `Purge Request` is accepted only on dedicated FIX Purge Ports.

A firm may choose to implement one or more filters:

1. MPID Filter - optionally cancel based on MPID. This is required for any self-imposed lockouts or for service bureaus. Set using first character of MassCancelInst (7700) and sending OnBehalfOfCompId (115).
2. Symbol Filter - optionally cancel based on symbol. Set by sending a valid symbol in the Symbol (55) and SymbolSfx (65) fields. Cannot be combined with RiskGroupID filter.
3. RiskGroupID Filter - optionally cancel based on RiskGroupID (7699). A maximum of 10 RiskGroupIDs may be included on a single `Purge Request` message. Set by populating RiskGroupIDCnt (7698) to a non-zero value. Cannot be combined with Symbol filter.

A firm may use the second character of MassCancelInst (7700) to set the acknowledgment style. If a single `Purge Acknowledgment` is selected, then MassCancelID (7695) must be sent.

A firm may also impose a lockout using the third character of MassCancelInst (7700), which cancels any open orders and causes inbound orders received after the lockout to be rejected. A self-imposed lockout requires an MPID (115) to be sent. The firm may also choose to lockout by Symbol or RiskGroupID (7698) but not by both in the same message.

RiskGroupID (7699) or MPID (115) purges with no Symbol (55) may be directed to a specific matching unit using the MatchingUnit (25017) optional field. If MatchingUnit (25017) is zero or not specified, then these purge types will be sent to all matching units starting with unit 1. Note that this may result in self-imposed, risk lockouts occurring on select units while other units are still trading.

The system limits the rate at which identical `Purge Request` messages can be submitted to the system. Requests are restricted to twenty (20) messages per second per port.

An identical purge message is defined as a message having all of the same RiskGroupID (7699), Symbol (55), SymbolSfx (65), OnBehalfOfCompId (115), MatchingUnit (25017), and Lockout Instruction field values, as a previously received message.

**Table 1. Purge Request Message Fields**

| Tag | Field Name | Req’d | Description |  |
|---|---|---|---|---|
| 35 | Standard Message Header | Y | MsgType=‘F’ |  |
| 97 | PossResend | N | `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. |  |
| 60 | TransactTime | Y | Time cancel initiated/released. Required by FIX 4.2 but not used by Cboe. |  |
| 7700 | MassCancelInst | Y | At least one character must be provided (MPID Filter). Contiguous characters must be specified up to total length. Truncated (unspecified) characters will default to values indicated below. 1 st Character : MPID Filter `A` = No filtering by MPID is performed. `F` = All orders that were sent under the MPID specified in OnBehalfOfCompId (115 ) will be cancelled. 2 nd Character : Acknowledgment Style `M` = (Default) Individual Execution Reports are sent for each cancelled order. `S` = Single `Purge Acknowledgment` sent once all cancels have been processed. Single `Purge Acknowledgment` will contain MassCancelId (7695 ) and CancelledOrderCount (7696 ). MassCancelId (7695) must be specified or the `Purge Request` will be rejected. `B` = Both individual `Execution Reports` and single `Purge Acknowledgment` . Also requires MassCancelId (7695) to be specified or the `Purge Request` will be rejected. 3 rd Character : Lockout Instruction `N` = (Default) No lockout `L` = Lockout until corresponding Risk Reset received. Lockout can be used only with MPID Filter set to ‘F’, otherwise the `Purge Request` will be rejected. Lockout will apply to all new orders and cancel/replace orders for the MPID (and symbol or RiskGroupId (7699), if specified). A self-imposed lockout can be released using the RiskReset (7692) field of the `New Order Single` message. |  |
| 7695 | MassCancelID | N | Mass Cancel ID - This field will be echoed back in the resulting `Purge Acknowledgment` when second character of MassCancelInst (7700) is set to ‘S’ or ‘B’. Purge requests containing a MassCancelID that is currently outstanding will be rejected. |  |
| 55 | Symbol | N | Symbol (upper case). Limits cancellations to only orders with the specified symbol. |  |
| 65 | SymbolSfx | N | SymbolSfx: CQS or CMS suffix if used. Do not send SymbolSfx if using Cboe format or if symbol does not have a suffix. (Refer to Symbology link in the References chapter.) |  |
| 7698 Repeating Group | RiskGroupIDCnt | N | Number of repeating RiskGroupIDs (7699) included in this message. Integer 0-10 |  |
| ➔ | 7699 | RiskGroupID | N | RiskGroupID (7699) to cancel. Only present if RiskGroupIDCnt (7698) is non-zero. Number of repeating groups must match number specified in RiskGroupIDCnt (7698). |
| 25017 | MatchingUnit | N | Matching unit number the `Purge Request` will be sent toward. If blank or 0, the `Purge Request` will be sent to all units. Incompatible with symbol-level purges, specifying both symbol and MatchingUnit (25017) will cause the `Purge Request` to be rejected. If both MassCancelInst (7700) lockout instruction = `L` and MatchingUnit (25017) are specified, a lockout will occur and will impact only the specified matching unit. Subsequent risk resets will clear risk locks on all units. |  |
|  | Standard Message Trailer | Y |  |  |

### Purge Port Protocol - Cboe to Member

#### Purge Acknowledgment Message Fields

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 is `S` or `B`.

**Table 1. Purge Acknowledgment Message Fields**

| Tag | Field Name | Description |
|---|---|---|
| 35 | Standard Message Header | MsgType=‘8’ |
| 52 | SendingTime | GMT date-time that execution report was sent by Cboe. |
| 20 | ExecTransType | `3`=Status |
| 150 | ExecType | Reason for this execution report: `M` = Mass Cancel Complete |
| 7695 | MassCancelID | Copied from original `Purge Request`. |
| 7696 | CancelledOrderCount | Number of orders cancelled from a `Purge Request` with the specified MassCancelID. |

#### Purge Reject Message Fields

Rejects a `Purge Request`.

**Table 1. Purge Reject Message Fields**

| Tag | Field Name | Description |
|---|---|---|
| 35 | Standard Message Header | MsgType=‘9’ |
| 39 | OrdStatus | `8` = Rejected |
| 434 | CxlRejResponseTo | `1` = Cancel |
| 102 | CxlRejReason | `2` = Broker Option |
| 58 | Text | Free form text message with additional reject information. |
| 7695 | MassCancelID | MassCancelID from the `Purge Request` |
|  | Standard Message Trailer |  |

## Order Types and Features

The following provides clarifying information that will enable members to successfully enter orders on a Cboe US Equities Exchange.

This is not meant to be an exhaustive list of all FIX tags that accompany that order type, but an effort to identify the key tags and provide more information regarding certain order types and features. Please refer to New Order for field description details.

### Regular Order

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 54 | Side | Y | - |
| 38 | OrderQty | Y | - |
| 40 | OrdType | Y | - |
| 44 | Price | N | - |
| 59 | TimeInForce | N | - |
| 126 | ExpireTime | N | - |
| 9303 | RoutingInst | N | - |
| 9350 | RoutDeliveryMethod | N | - |
| 9400 | RoutStrategy | N | - |

### Reserve Order

Reserve orders are orders having both a displayed quantity and a non-visible, reserve quantity that is replenished when the displayed quantity falls below a round lot.

Members may specify the precise amount of the order to be replenished once the displayed size is fully executed.

#### Random Replenishment

Alternatively, members may elect a Random Replenishment option by supplying DisplayRange on the order. Random Replenishment establishes a range of possible values for the shares that are to be displayed. For example, if MaxFloor = 2000 and the DisplayRange = 200, the displayed quantity will be selected randomly from any of the following values: 1800, 1900, 2000, 2100 and 2200. Note the value specified must be less than the value specified for MaxFloor.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 54 | Side | Y | - |
| 38 | OrderQty | Y | - |
| 111 | MaxFloor | Y | - |
| 8020 | DisplayRange | N | Required for Random Reserve Orders. This is the Random Replenishment amount in shares. Must be specified in round lots. |
| 40 | OrdType | Y | `2`=Limit |
| 44 | Price | Y | - |
| 59 | TimeInForce | N | - |
| 126 | ExpireTime | N | - |
| 9303 | RoutingInst | N | - |
| 9350 | RoutDeliveryMethod | N | - |
| 9400 | RoutStrategy | N | - |

### Discretionary Order

Discretionary Orders are orders that have both a displayed or non-displayed ranked price and an additional non-displayed (discretionary) price. The discretionary order provides a range of prices at which the owner is willing to trade should an opportunity present itself. The display price determines the order’s ranking within the order book.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 54 | Side | Y | - |
| 38 | OrderQty | Y | - |
| 40 | OrdType | Y | `2`=Limit |
| 44 | Price | Y | - |
| 9622 | DiscretionAmount | Y | - |
| 59 | TimeInForce | N | - |
| 9479 | DisplayIndicator | N | A Hidden Discretionary order will be ranked and hidden at its limit price but can be executed within a specified discretionary price range if necessary. |
| 9303 | RoutingInst | N | - |
| 9350 | RoutDeliveryMethod | N | - |
| 9400 | RoutStrategy | N | - |

- A discretionary order always uses the minimum amount of discretion necessary to execute against an incoming order.
- An inbound Post Only order may execute against a discretionary order at its displayed and/or ranked price. In such instance, unless the Post Only order removes on entry pursuant to Exchange rules, the incoming Post Only order will be treated as the liquidity provider and the resting order will be treated as the liquidity remover. Any other incoming order that executes at the displayed and/or ranked price of a resting order will be treated as the liquidity remover and the resting order as the liquidity adder.
- An order with a time-in-force of IOC or FOK that executes against a discretionary order, either at the displayed and/or ranked price of the discretionary order or in the discretionary range of the discretionary order will be treated as the liquidity remover and the resting discretionary order as the liquidity adder.
- An order with a Time-In-Force other than IOC or FOK that executes against a discretionary order in the discretionary range of the discretionary order (but not at its displayed and/or ranked price) will be momentarily placed on the book and treated as the liquidity adder; the resting discretionary order will lift off the book to execute against such order and will be treated as the liquidity remover.
- Refer to target Exchange Fee Schedule for respective liquidity remover and adder fees and rebates.

### Peg Order

Cboe supports five types of Peg Orders: Primary Pegs, Market Pegs, Midpoint Pegs, Market Maker Pegs, and Supplemental Pegs. Peg Orders are not eligible for routing to other market center, except for Midpoint Pegs where RoutStrategy (9400) = RMPT or RMPL.

Hidden peg orders are prioritized behind non-pegged hidden orders at each price and display level with regular peg orders (ExecInst R and P) have a higher priority than Midpoint peg orders ranked at the same price.

When discretion is used on a pegged order, the DiscretionAmount always is applied to the current Pegged price.

A resting peg order may remove liquidity when re-priced by an NBBO movement.

Effective 12/07/26, Pegged orders entered without a Price (44) are only accepted during RTH.

#### Midpoint Peg Order

- A non-displayed order that is pegged to the midpoint of the NBBO.
- ExecInst = M, m, and L.
- Implicitly hidden, regardless of what is sent in DisplayIndicator.
- May execute at a half-penny price increment above $1.00.
- Will not execute during crossed NBBO.
- May not use PegDifference.

#### Primary Peg Order

- An order whose price tracks the same side of the NBBO (i.e. buy orders track the bid).
- ExecInst = R
- If not sent, DisplayIndicator = `I` will be implied.
- Can be sent as displayed by setting DisplayIndicator = `v`.
- Will be temporarily clipped to the less aggressive side of the NBBO during crossed NBBO.

#### Market Peg Order

- Pegged to the opposite side of the market of the NBBO (i.e. buy orders track the offer).
- ExecInst = P
- If not sent, DisplayIndicator = `I` will be implied.
- Will be rejected if DisplayIndicator = `v`.
- Will be temporarily clipped to the less aggressive side of the NBBO during crossed NBBO.

#### Market Maker Peg Order

- Will price the order at the Designated Percentage away from the same side of the market that is required for Market Makers to meet the minimum quoting obligations in the security. Refer to the Cboe Titanium U.S. Equities Market Maker Specification for complete details.
- When the normal repricing of a Market Maker peg order to the designated percentage would result in the order being priced in excess of the system limitation of $999,999.99, the system limitation will prevail and the order will be priced no greater than $999,999.99.
- ExecInst = Q, OrdType = P
- Must be Post Only, RoutingInst = P.
- Must be visible, DisplayIndicator = V.
- May not use PegDifference.
- If not sent, DisplayIndicator will use the default setting defined on the port; orders with DisplayIndicator = `I` will be rejected.
- Will only function with securities in which firm is a Registered Market Maker.

#### Supplemental Peg Order

- Pegged to the same side of the market of the NBBO (i.e. buy orders track the bid). Executable against routable orders that are equal to or less than the aggregate size of the Supplemental Peg Order interest available at that price.
- ExecInst = U, OrdType = P
- Must be Post Only, RoutingInst = P.
- Will be rejected if not sent with DisplayIndicator = `I`.
- Will be rejected if not sent with a valid Price . Tag Field Name Req’d Comments 18 ExecInst Y `U` = Supplemental Peg 54 Side Y - 38 OrderQty Y - 40 OrdType Y `P` = Peg 44 Price Y Cap Price 59 TimeInForce N - 211 PegDifference N - 9479 DisplayIndicator Y `I` = Invisible 9303 RoutingInst Y `P` = Post Only

### Pegged Discretionary Order

A Pegged Discretionary order is an order whose price is pegged to the NBBO price. It also has a discretionary price component.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 18 | ExecInst | Y | `R` = Primary Peg |
| 54 | Side | Y | - |
| 38 | OrderQty | Y | - |
| 40 | OrdType | Y | `P` = Peg |
| 44 | Price | N | Optional Cap Price |
| 9622 | DiscretionAmount | N | - |
| 59 | TimeInForce | N | - |
| 211 | PegDifference | N | - |
| 9479 | DisplayIndicator | N | `v` = Visible |
| 9303 | RoutingInst | N | `B` = Book Only |

### Midpoint Discretionary Order (EDGA and EDGX Only)

A Midpoint Discretionary Order is a visible or hidden peg order whose price is pegged to the NBB (NBO) for buys (sells) with discretion that automatically extends to the midpoint of the NBBO.

Cboe supports an offset that allows these orders to be ranked at less aggressive (displayed and hidden) or more aggressive (hidden only) prices than the same side NBBO with full discretion to the midpoint of the NBBO. MDOs will have full discretion from the offset ranked price to the less aggressive of their limit price or the midpoint of the NBBO. Both EDGA and EDGX accept odd lot MDOs.

Quote Depletion Protection (QDP) logic is also an optional feature for MDOs. QDP will be activated when the exchange’s own displayed quote is executed or canceled below one round lot and will shut off the discretionary range of MDOs for 2 milliseconds. MDOs with QDP will perform a "book re-check" when the QDP activation period expires. For such orders, when the QDP period ends and the discretionary range is reinstated, the system will attempt to trade MDOs with QDP against any resting liquidity within the discretionary range of the order.

For both EDGA and EDGX, MDOs with QDP, ExecInst (18) = e, are accepted with RoutingInst (9303) = B, Book Only. In addition, orders sent with ExecInst (18) = e without a value specified for RoutingInst (9303) will be defaulted to RoutingInst (9303) = B, Book Only. Standard MDOs, ExecInst (18) = d, will not support RoutingInst (9303) = B, and these orders will continue to default to RoutingInst (9303) = P, Post Only.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 18 | ExecInst | Y | `d` = Midpoint Discretionary Order `e` = Midpoint Discretionary Order with Quote Depletion Protection |
| 54 | Side | Y | - |
| 38 | OrderQty | Y | - |
| 40 | OrdType | Y | `P` = Peg |
| 44 | Price | N | Optional Cap Price |
| 59 | TimeInForce | N | - |
| 9479 | DisplayIndicator | Y | `v` = Visible `I` = Invisible |
| 9303 | RoutingInst | Y | `B` = Book Only `P` = Post Only |
| 211 | PegDifference | Y | Signed dollar value up to two (four) decimal places is added to result of peg calculation when the peg difference is at or above(below) $1.00.Default is zero for Midpoint Discretionary Orders with ExecInst (18) = `d` . Default is $0.01 (-$0.01) for sell (buy) Midpoint Discretionary Orders with ExecInst (18) = `e` . The offset will be in the less aggressive direction for the order. Displayed Primary Peg orders with non-aggressive offset must have TimeInForce (59) = R (Regular Hours Only) or 0 (Day). Day orders must be submitted after 9:30 a.m. ET. May be an aggressive offset for hidden Primary pegs. |

### Stop Order

All Stop orders at Cboe will be triggered off of the Last Sale price of the specified security.

Stop: A Stop order is an order that will be held away from the order book until its specified trigger price (stop price) is reached. Once the trigger price is reached during Regular Trading Hours, the order will be elected (activated). Election results in a Market order sent to the book.

Stop Limit: A Stop Limit order is an order with both a specified limit price and a trigger price. This order is also held outside of the order book until the stop price is reached. Once the trigger price is reached during Regular Trading Hours, it will be elected. The activated order is sent to the order book as a limit order at the specified limit price.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 54 | Side | Y | - |
| 38 | OrderQty | Y | - |
| 40 | OrdType | Y | `3` = Stop Market `4` = Stop Limit |
| 44 | Price | N | Must be present if `OrdType`=4. |
| 99 | StopPx | Y | Trigger Price |
| 59 | TimeInForce | Y | `R` = Regular Hours Only Other TimeInForce values may be accepted but Stop and Stop Limit orders may not be IOC and are only elected during Regular Trading Hours. |
| 9303 | RoutingInst | N | - |
| 9350 | RoutDeliveryMethod | N | - |
| 9400 | RoutStrategy | N | - |

### Intermarket Sweep Order (ISO)

An Intermarket Sweep Order is an order type introduced in conjunction with Regulation NMS. This order type allows the receiving exchange to immediately execute an order against any resting orders without checking other Market Centers for better prices. It conveys that the broker has taken responsibility for sending orders directly to Market Centers to access their better-priced, posted quotes.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 18 | ExecInst | Y | `f`=Intermarket Sweep Order (Directed or Cboe) |
| 54 | Side | Y | - |
| 38 | OrderQty | Y | - |
| 40 | OrdType | Y | `2`=Limit |
| 44 | Price | Y | - |
| 59 | TimeInForce | Y | `0` = DAY `1` = GTC `3` = IOC `4` = FOK `5` = GTX `6` = GTD `E` = PRE `R` = RHO `T` = PTD `X` = PTX |
| 9303 | RoutingInst | N | - |
| 9479 | DisplayIndicator | N | `V` = Default. As determined by port level setting (defaults to S) `I` = Invisible `r` = Hidden Cancel Back `h` = Hidden Multiple Price Slide (effective 09/04/26) |

### Re-Priced Orders

Under Regulation NMS, exchanges must avoid posting orders that intentionally lock or cross other protected market center quotes. To comply with this provision of the rule, Cboe offers five alternatives for non-routable orders:

- Price Adjust - If at the time of entry an order locks or crosses an away market quotation, the order will be displayed and ranked one penny away from the locking price. If market conditions allow the order to be displayed at the original locking price, it will be moved to that price.
- Multiple Price Adjust - If at the time of entry an order locks or crosses an away market quotation, the order will be displayed and ranked one penny away from the locking price. Allow for Multiple Price Adjust orders to continue to have their displayed and ranked price adjusted towards their original limit prices based on changes to the prevailing NBBO.
- Display Price Sliding - Permanently adjusts the booked price on entry to the strongest price that does not cross the NBBO. It will temporarily adjust the displayed price to the strongest price that does not lock the NBBO. When the NBBO widens, the display price will be readjusted to the booked price. The display price may be temporarily weaker than the booked price.
- Multiple Display Price Sliding - Does not permanently adjust the booked price on entry, but allows for Display-Price slid orders to continue to have their display and booked prices adjusted towards their original limit price based on changes to the prevailing NBBO.
- Hidden Multiple Price Slide - Does not permanently adjust the booked price on entry, but allows for Hidden orders to continue to have their booked prices adjusted toward their original limit price based on changes to the prevailing NBBO.
- Cancel Back - If at the time of entry an order locks or crosses an away market quotation, the order will be immediately canceled back to the member. Tag Field Name Comments 9479 DisplayIndicator Re-pricing Options: `V` = Default. As determined by port level setting (defaults to S) `P` = Price Adjust `m` = Multiple Price Adjust `R` = Cancel back the order if it cannot be booked and displayed without adjustment `r` = Hidden; cancel back the order if it cannot be booked without adjustment `S` = Display Price Sliding (this is to override an opt-out of Display Price Siding at the port level) `L` = Display Price Sliding, but reject if order crosses the NBBO on entry `M` = Multiple Display Price Sliding `h` = Hidden Multiple Price Slide (effective 09/04/26)

### Re-Route Orders

Re-route is designed to aggressively re-route and fill orders. Orders come off the Cboe order book and target a locking or crossing quote at another market center, matching or improving upon the limit price of the re-route eligible order. This behavior occurs anytime Cboe receives an updated quote from another market that locks OR crosses the order resting on the Cboe order book. Re-route is also implicated with certain orders received by the Exchange, as described below. Re-routing may continue until the order is completely filled.

Cboe allows for Re-Route on a cross only when RoutingInst (9303) = `X` (Aggressive mode). For Re-Route to function in the event of a locking OR crossing quotation, use RoutingInst (9303) = `S` (Super Aggressive mode). Cboe allows for odd lots to be treated as Super Aggressive when RoutingInst (FIX Tag 9303) = `K`. Any routable hidden order that is crossed by another market will be routed to such market.

Re-route behavior also occurs anytime Cboe receives an inbound, displayed Post Only order priced at the locking price of an eligible Super Aggressive order (provided such Super Aggressive order is resting at the top of the order queue at such price). In such instance, unless the `Post Only` order removes on entry pursuant to Exchange rules, the incoming Post Only order will be treated as the liquidity provider and the resting order will be treated as the liquidity remover. Refer to target for respective liquidity remover and adder fees and rebates.

### Auction Only Orders (BZX Only)

For more information on the following Auction Only Orders, see the Cboe Titanium U.S. Equities Auction Process Specification.

| Order Type | FIX |  |
|---|---|---|
| Market-On-Open (MOO) | OrdType (40) = 1 (Market) RoutingInst (9303) = B (Book Only) | TimeInForce (59) = 2 (At the open) |
| Market-On-Close (MOC) | TimeInForce (59) = 7 (At the close) |  |
| Limit-On-Open (LOO) | OrdType (40) = 2 (Limit) RoutingInst (9303) = B (Book Only) Price (44) = [price] | TimeInForce (59) = 2 (At the open) |
| Limit-On-Close (LOC) | TimeInForce (59) = 7 (At the close) |  |
| Late-Limit-On-Open (LLOO) | TimeInForce (59) = 2 (At the open) ExecInst (18) = r (Late) |  |
| Late-Limit-On-Close (LLOC) | TimeInForce (59) = 7 (At the close) ExecInst (18) = r (Late) |  |
| Regular-Hours-Only (RHO) | TimeInForce (59) = R (Regular Hours Only) |  |

### Retail Orders

BZX, BYX, and EDGX allow for certain qualifying orders to be designated as Retail Orders. Such orders may be subject to special pricing as defined in the respective Exchange Fee Schedule.

To designate an order as a Retail Order, set ExtendedExecInst (9416) = `R` (Retail Order).

### Retail Price Improvement Program (BYX and EDGX Only)

Through the Cboe Retail Price Improvement Program, any BYX and EDGX Exchange member may input Retail Price Improving (RPI) orders on the Exchange order books that will offer price improvement in $.001 increments to Retail Member Organizations (RMOs) that enter a Retail Order (RO).

BYX and EDGX Exchanges will disseminate a `Retail Price Improvement` message when the resting RPI order is priced better than the NBBO.

#### RPI Retail Remover Orders (RROs)

RROs will access price-improving liquidity in strict price/time priority as follows:

1. RROs may interact with both RPI orders as well as other price improving hidden liquidity (i.e. midpoint pegs). RROs may receive price improvement at multiple price levels.
2. RROs will then access displayed interest as well as hidden interest at the NBBO.
3. RROs may then route.

RROs may be entered by RMOs in 0.01 increments as follows:

- Retail Order - Type 1 - Price Improvement Only (Only access price improving orders.)
  - Must set ExtendedExecInst (9416) = `P` (Retail Order - Price Improvement only)
  - Must set TimeInForce (59) = `3` (IOC)
  - Must set RoutingInst (9303) = `B` (Book Only)
- Retail Order - Type 2 - Book Only (Access price improving orders up to the limit price and access any liquidity available on Cboe at the limit price.)
  - Must set RoutingInst (9303) = `B`
  - Must set ExtendedExecInst (9416) = `R` (Retail Order) (BYX Only)
  - Must set ExtendedExecInst (9416) = `R` (Retail Order) or X (Retail Priority Order) (EDGX Only)
  - Must set TimeInForce (59) = `3` (IOC) (BYX Only)
  - Must set TimeInForce (59) = `All` TIFS accepted (EDGX Only )
- Retail Order - Type 2 - Routable (Access price improving orders up to the limit price and access any liquidity available on Cboe at the limit price. Then route out at the limit price.)
  - Must set RoutingInst (9303) = `B`
  - Must set ExtendedExecInst (9416) = `R` (Retail Order) (BYX Only)
  - Must set ExtendedExecInst (9416) = `R` (Retail Order) or X (Retail Priority Order) (EDGX Only)
  - Must set TimeInForce (59) = `3` (IOC) (BYX Only)
  - Must set TimeInForce (59) = `All` TIFS accepted (EDGX Only )
  - RoutingInst (9303) and ExecInst (18) may be any combination of currently accepted values for routing purposes

#### Retail Price Improving (RPI) Orders

Any BYX or EDGX Exchange member may enter RPI orders in $.001 increments. RPIs are only accessible to ROs. No other order type will interact with an RPI order. For Enhanced RPI, a step-up amount may be included on any Retail Price Improving and Retail Price Improving Pegged order.

RPIs may be entered in $0.001 increments by any BYX Exchange member as follows:

- Retail Price Improving order:
  - Must set RoutingInst (9303) = `B` or `P`
  - Must set ExtendedExecInst (9416) = `T` (Retail Price Improving order)
  - DisplayIndicactor (9479) = `I` is implied but, like peg orders, not required; any other values for DisplayIndicator will be rejected.
  - May include StepUpAmount (25025) for Enhanced RPI in $0.001 increments.
- Retail Price Improving Peg order:
  - Must set RoutingInst (9303) = `B` or `P`
  - Must set ExtendedExecInst (9416) = `T` (Retail Price Improving order)
  - Must set ExecInst (18) = `R` (Primary Peg) (BYX Only)
  - Must set ExecInst (18) = `R`(Primary Peg), `M`(Midpoint Peg), or `m`(Midpoint Peg - No Trade in Locked Market) (EDGX Only)
  - Must set PegDifference (211) (Primary Peg). Price may be in 0.001 increments.
  - DisplayIndicactor (9479) = `I` is implied but, like peg orders, not required; any other values for DisplayIndicator will be rejected.
  - May include StepUpAmount (25025) for Enhanced RPI in $0.001 increments (BYX only) .

### DIRC to IEX-Midpoint (BYX Only)

BYX Exchange offers a directed route strategy to IEX-Midpoint. Order sent with the below instructions may remove liquidity from the local exchange then route as an IOC midpoint to IEX with any unfilled shares canceling back.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 59 | TimeInForce | Y | `3`=IOC |
| 18 | ExecInst | Y | M = Execute on Cboe and route to IEX when NBBO is locked - or - m = Do not execute on Cboe market and do not route to IEX when the NBBO is locked. |
| 40 | OrdType | Y | `P`=Pegged |
| 9400 | RoutStrategy | Y | DIRC |
| 100 | ExDestination | Y |  |

### Non-Displayed Swap (NDS)

An order with the NDS instruction is a hidden order that, once posted, may become a liquidity remover when a contra-side Post Only order enters the book at a price locking the resting NDS order.

In addition to standard Hidden Limit orders, the Non-Displayed Swap instruction may also be sent on Hidden Primary Pegs, Midpoint Pegs and Market Pegs.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 9303 | RoutingInst | Y | `N` = Non-Displayed Swap |
| 9479 | DisplayIndicator | Y | `I` = Hidden |
| 40 | OrdType | N | `2` = Limit, `P` = Pegged |

### Cboe Market Close (CMC) (BZX Only)

Cboe Market Close on the BZX Exchange allows for members to submit buy and sell Market-On-Close orders designated for participation in CMC in order to obtain the official closing price for any matched shares. Any remaining shares will be cancelled back to members.

At 2:30 a.m. ET, members may enter new orders to participate in CMC. Members will populate the following FIX Tags to send a CMC order.

| Tag | Field Name | Req’d | Comments |
|---|---|---|---|
| 40 | OrdType | Y | `1`=Market |
| 59 | TimeInForce | Y | `7`=At the Close |
| 9303 | RoutingInst | Y | `B`=Book Only |
| 25020 | CmcSessions | N | `A` = 3:15 p.m. `D` = 3:30 p.m. `L` = 3:49 p.m. `S` = 3:54 p.m. (Nasdaq-listed only) |

A FIX restatement will be sent for any fully or partially matched CMC order after the order executes in a CMC matching session. A standard cancel will be sent for any CMC order that does not have any matched quantity after the final CMC session when the eligible order has finished. The restatement will contain the following fields:

| Tag | Field Name | Description |
|---|---|---|
| 35 | MsgType | `8`=Execution Report |
| 20 | ExecTransType | `0`=New |
| 150 | ExecType | `D`=Restated |
| 378 | RestatementReason | `C`=CMC Restatement |
| 32 | LastShares | Number of Shares Cancelled (if any) |
| 151 | LeavesQty | Quantity of unexecuted shares. Will include shares already matched in a previous CMC session. |
| 25023 | CmcMatchQty | Matched size for CMC matching session. |

After the closing price is received one or more executions, totaling the sum of the matched size from each restatement, will be sent for each CMC order. The execution message will contain the following fields:

| Tag | Field Name | Description |
|---|---|---|
| 35 | MsgType | `8`=Execution Report |
| 20 | ExecTransType | `0`=New |
| 150 | ExecType | `1` = Partial Fill `2` = Full Fill |
| 32 | LastShares | Execution Size |
| 31 | LastPx | Execution Price (official close price) |

If a closing price is not received from the primary listing exchange by 8:00 p.m. ET, then all CMC matched shares will be cancelled. In the event that a closing price is updated by the primary listing exchange after its initial publication, then a `Trade Cancel/Correct` (FIX Tag 35=UCC) message will be sent to update the execution price for each CMC execution impacted by the changed closing price. As a result, all firms that wish to submit CMC orders must be certified for `Trade Cancel/Correct` messages on FIX before they will be allowed to submit CMC orders.

### Periodic Auctions (BYX Only)

The Periodic Auction process is a price forming auction that runs for a fixed time period of 100 milliseconds and is only available during the regular trading session. A Periodic Auction starts when two opposite side Periodic Auction orders of either type can match. Continuous book displayed and non-displayed orders are not eligible to initiate a Periodic Auction but may be swept into the auction at the end of the auction process. Members can populate the following instructions to send a Periodic Auction order.

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 9355 | CrossTradeFlag | Y | Can be entered on individual orders or as a port setting. `0` = None (to override port settings if necessary) `1` = Periodic Auction Only `2` = Periodic Auction Eligible |
| 59 | TimeInForce | Y | `R` = Regular Hours only (Required for Periodic Auction Only orders) All TIFs except FOK and IOC supported for Periodic Auction Eligible orders. |
| 9479 | DisplayIndicator | Y | `I` = Invisible |
| 110 | MinQty | N | Minimum total fill quantity, which may be made up of several consecutive smaller fills. If ‘Enable True MinQty’ port attribute is set to ‘Yes’, orders will be converted into standard MinQty during a Periodic Auction. Periodic Auction Eligible orders will remain as True MinQty in the continuous book. |
| 18 | ExecInst | N | If OrdType (40) = `P` , only the following are accepted for Periodic Auction Only orders: `R` = Primary Peg `M` = Midpoint Peg If OrdType (40) = `P` , all instructions allowed for Periodic Auction Eligible orders. If ExecInst = `m` , the "No Trade in a Locked Market" instruction will only be applied when the PAE order is live in continuous book trading and will not apply to either initiating a Periodic Auction or to executing at the conclusion of the Periodic Auction. |
| 211 | PegDifference | N | For Periodic Auction Only Orders, aggressive offsets only for primary peg orders. Orders with passive offsets will be rejected. No restrictions for Periodic Auction Eligible Orders. |

The Execution Report will contain a new value for Periodic Auction orders as the second character of TradeLiquidityIndicator (FIX Tag 9730). Firms can opt-in to receive the second character of this field at the firm or port level by contacting the Trade Desk.

| Tag | Field Name | Req’d | Description |
|---|---|---|---|
| 9730 | TradeLiquidityIndicator | Y | 1 st Character `C` = Auction/Uncrossing 2 nd Character `P` = Periodic Auction |

## Implementation Notes

### Automatic Cancel on Disconnect or Malfunction

All open orders for a member will be cancelled automatically if no messages have been received from the member for two heartbeat intervals. This is done to prevent orders from being stuck in an unknown state in the event of telecommunications failure. Members 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. Members 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.

### Service Bureau Configuration

Service Bureaus require special configuration. OnBehalfOfCompId should be set for New Order, Cancel and Cancel/Replace messages sent to Cboe. 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 Cboe 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

Cboe 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 ([Cboe: 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 the earlier section, 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 SeqReset-GapFill 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 Type | Action to Be Taken on Sequence # Mismatch |
|---|---|
| Logon | Must 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 the GapFillFlag field 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.

### OATS Connection ID

The OATS technical specification allows for an optional connectionId field to be included in your OATS feeds for the purposes of improving your order ID uniqueness. When creating OATS rows related to your FIX transmissions to Cboe, Cboe recommends populating the OATS connectionId field with the senderSubId (FIX Tag 50). Please note that this field is optional on your OATS rows, and Cboe is not recommending a perspective that you do or do not populate the field. Also note that while not enforced internally, the Cboe spec does require that your client order ID be day-unique; Cboe continues to recommend this as the best way to meet OATS’ day-unique order ID requirements.

### OATS Exchange Participant ID (EPID)

While most members should use ClearingFirm (439) for their OATS EPID, Service Bureaus should use OnBehalfOfCompId (115).

## FIX Drop

Cboe 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 member firms, clearing MPIDS and/or sessions. With proper authorization (e.g. clearing or sponsored relationships), a single FIX Drop session can be used to obtain information about multiple members.

### Standard FIX Drop

Standard FIX Drop ports only send execution information (i.e., Execution Reports where ExecType (150) is Partially Filled (1) or Filled (2)) or Risk Theshold information (i.e. Execution Reports where ExecType (150) is Risk Threshold Warning (RT)). Refer to the Execution Report section for details on standard execution reports.

#### Risk Theshold Warnings Message Fields

Risk Threshold Warning messages may optionally be sent to notify the FIX Drop user when an MPID with MPID-level risk controls reaches 50%, 70%, 90%, or 100% of the defined limit. These messages will only be sent when the `Send Risk Threshold Warnings` port attribute is enabled. A FIX Drop port must be configured with a MPID or MPID owner profile in order to receive these messages. Contact the Cboe Trade Desk to ensure your FIX Drop is appropriately configured to receive Risk Threshold Warnings.

**Table 1. Risk Theshold Warnings Message Fields**

| Tag | Field Name | Description |
|---|---|---|
| 35 | MsgType | `RT`=Risk Threshold Warning |
| 115 | OnBehalfofCompID | Internal Cboe Firm ID of the MPID owner. |
| 439 | ClearingFirm | MPID |
| 7699 | RiskGroupID | RiskGroupID, zero if not present |
| 25013 | RiskRuleType | Type of Risk Rule reached (AbsoluteNetNotional or AbsoluteGrossNotional) |
| 25014 | RiskWarnPct | The percentage level of the risk rule that has been reached. |
| 25015 | RiskCurrentValue | Current notional value for the risk rule. |
| 25016 | RiskMaxValue | Configured max value for the risk rule. |

### 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), 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 or BOEv3 order entry session. However, rejects originating from a BOEv2 order entry session will be suppressed.

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. Cboe reserves the right to add new FIX tags and to update values distributed on Order by Order FIX Drop with no notice.

### FIX Drop Port Attributes

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

| Attribute | Default | Description |
|---|---|---|
| Symbology | Cboe | Support for Cboe, CMS or CQS. |
| Send Trade Breaks | No | Enables `Trade Cancel/Correct` messages (35=UCC). Please note that enabling these messages on Order by Order FIX Drop port will be dependent on enabling `Trade Cancel/Correct` messages on corresponding BOE and/or FIX order entry ports. |
| Unique Wash Execution Ids | No | Appends a ‘.B’ or ‘.S’ to ExecID (17) on all trades. |
| Concatenate CompId and SubId | No | Requires all FIX traffic to contain concatenated (combined) CompId and SubIds. |
| Send OrigCompID/OrigSubID | No | Send OrigCompID (9688) and OrigSubID (9689). |
| Send Account | No | Send Account (1). |
| Copy ClearingFirm to Account | No | Set Account (1) equal to ClearingFirm (439). |
| Send OrdType | No | Send OrdType (40). Standard FIX Drop only. Order by Order FIX Drop will receive FIX Tag 40 based on FIX order entry port attribute "Echo Tag 40 on Ack". |
| Send Capacity | No | Send OrderCapacity (47). Standard FIX Drop only. Order by Order FIX Drop receives this field by default. |
| Send Routing Instructions | No | Order by Order FIX Drop only. Send RoutingInst (9303), RoutDeliverMethod (9350) and RoutStrategy (9400). |
| Send Risk Threshold Breach Notifications | No | Standard FIX Drop Only. Send Risk Warning Threshold (35=RT) messages. |
| Microsecond Timestamp Granularity | No | Display microsecond level timestamp granularity for TransactTime (60), OrigTime (42) and SendingTime (52). These tags default to millisecond or second granularity. |
| Send Nanoseconds | No | Display nanosecond level timestamp granularity for TransactTime (60), and OrigTime (42), and SendingTime (52). If send nanoseconds and microseconds are both selected, nanoseconds will override. |

## US Equities FIX Port Attributes

The table below lists FIX port attributes that are configurable on the port or firm level. Changes to these attributes can be made by sending a written request to tradedesk@cboe.com.

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.

**Table 1. US Equities FIX Port Attributes**

| Attribute | Default | Description |
|---|---|---|
| All Routable To Halt Auction (BZX and EDGX Only) | No | Send all routable orders to the halt auction on the primary listing exchange. This applies to all routing strategies. |
| Allow Directed ISO* | Yes | Allows or disallows ISO orders directed to other market centers. |
| Allow ISO* | Yes | Allows or disallows ISO orders. |
| Allow MTP Decrement Override* | No | Overrides the exception that requires both the resting and inbound order to be marked as "Decrement". |
| Allow Post-market* | Yes | Allows for orders to be entered after the Regular Session close. |
| Allow Pre-market* | Yes | Allows for orders to be entered prior to Regular Session open. |
| Allow Short Sales* | Yes | Allows or disallows short sales. |
| Allow Sponsored Participant MTP Control* | No | Allows Sponsored Participant to override port default for MTP by using PreventMemberMatch (7928) on order-level. |
| Allow Test Symbols Only | No | Allow or disallow orders in non-test symbols. |
| Allowed Clearing MPID(s)* | All MPIDs | Clearing MPID(s) allowed for trading on port.If "Sponsored Port" attribute is enabled, only one Clearing MPID is allowed for trading on that port. |
| Cancel on Disconnect | Option #1 | Cboe will offer members 3 options for cancelling orders as a result of a session disconnect: Cancel Continuous Book Orders Only (default) Cancel All Open Orders (continuous books and On-Open, On-Close and Late orders)* Do Not Cancel Any Open Orders *If disconnect occurs during the cut-off period for an auction, On-Open, On-Close and Late orders that are to participate in the auction will not be cancelled. |
| Cancel on Halt | No | Cancel open orders for a symbol upon a halt. |
| Cancel on ME Disconnect | Yes | When set to "No", this setting allows orders to remain open on a Matching Unit failover. When set to "Yes", all open orders associated with a session are immediately cancelled in the event of loss of connectivity to a Matching Unit. In any event, if a failover takes longer than five minutes, all orders are cancelled unconditionally. |
| Cancel on Reject† | No | Cancels an order upon a modify reject. |
| Cancel Open Orders on DROP Port Disconnect* | No | Only applicable for sessions where "Reject Orders on DROP Port Disconnect" has been enabled. If all DROP ports associated with an order entry port become disconnected, cancel all open orders on the order entry port. |
| Capacity Override | None | When set, the capacity of individual orders received on the port will default to the member-specified order capacity. None = No override (Default) `A` = Agency `P` = Principal `R` = Riskless Principal |
| Concatenate CompId and SubId | No | Requires all FIX traffic to contain concatenated (combined) Comp and SubIds. |
| Crossed Market Reject/Cancel | No | Reject new orders upon receipt when the NBBO in the subject security is crossed. Routable orders will have any remaining quantity cancelled back if the NBBO is crossed when the order returns to the Cboe Book. Order modifications which cause a loss of priority (e.g. due to a price change or increase in size) will result in a cancel of the original order if the NBBO is crossed upon receipt of the modify instruction. |
| Decrement Remainder Only | No | Enables "d" option for MTP. See PreventMemberMatch (7928) for details. |
| Default Attributed Quote*†% | Never | Specifies a default value for AttributedQuote (9732). May only override at order to level after executing Attribution Addendum to Exchange User Agreement. Once Addendum has been executed, may default to Yes, No, or RTAL through Cboe Trade Desk. |
| Default Clearing MPID | None | Default MPID to use if none is sent on New Order. |
| Default CrossTradeFlag (BYX Only) | 0 | Sets default CrossTradeFlag (9355) for inbound orders to designate Periodic Auction eligibility. `0` = None (Default) `1` = Periodic Auction Only `2` = Periodic Auction Eligible `3` = Midpoint Peg - Periodic Auction Only When set to ‘2’, IOC, FOK, and displayed orders are not converted to a Periodic Auction Eligible order and are sent to the book as-is. When set to '2', DisplayIndicator (9479) will be ignored if ExecInst (18) = `m` or `M` . When set to ‘3’, IOC, FOK, IOC/FOK orders with ExecInst (18) = `M` , and all other orders where ExecInst (18) does not = `m` will not be converted and will be sent to the book as-is. When set to ‘3’, all non-IOC/FOK orders with ExecInst (18) = `M` will be converted to RHO Midpoint Peg - Periodic Auction Only order. Orders with the following RPI instructions will set this port attribute to '0': ExtendedExecInst (9416) = `R` or `P` , plus is an IOC, or ExtendedExecInst = `T` . |
| Default Exec. Instruction† | None | Specifies a default value for ExecInst (18). |
| Default MTP Value*† | None | Specifies Default value for PreventMemberMatch (7928). When set to ‘X’, Affiliate Firm’s or Sponsored Particpant’s match trade prevention will be used by default. |
| Default Price Sliding† | "S" | Default price sliding behavior. See DisplayIndicator (9479). |
| Default Pricing Sliding (Hidden Order Override)† | "S" | When a different default price sliding behavior is desired for hidden orders, this port attribute may be used. See DisplayIndicator (9479). |
| Default Routing Instruction (Hidden Order Override)† | Use Default Routing Instruction | Specifies a default value for Tag 9303 (RoutingInst) that is applied to hidden orders only. |
| Default Routing Instruction† | 9303=RD 9350=RTI 9400=ROUT | Specifies a default value for Tags 9303 (RoutingInst), 9350 (RoutDeliveryMethod), and 9400 (RoutStrategy) when 9303 = `R`. Fields can be overridden at the order level. |
| Default to Retail Order†%^ | None | Default ExtendedExecInst (9416) = `R`, ‘P’, or ‘X’. |
| Disallow Market Orders | Option #1 | Controls the acceptance or rejection of inbound Market orders during continuous trading. Do not restrict Market orders. Reject Market orders during continuous trading, but allow Market orders during openings, re-openings, auctions, and auction routing (e.g. ROOC). Reject all Market orders except MOO and MOC orders (including CMC orders). |
| Duplicative Order Protection Action | Option #1 | Action taken when Duplicative Order Protection criteria is met. Not enabled Reject new offending orders Disable port for ClearingFirm . Must call Cboe Trade Desk to re-enable. |
| Duplicative Order Protection Order Count Threshold | None | Number of consecutive orders with the same ClearingFirm, Price, OrdQty, and Symbol that must be seen to initiate Duplicative Order Protection Action. |
| Early Trading Session Opt-Out (Sunset Effective 12/07/26) | No | Allows orders to be executable during the Early Trading Session . If set to Yes, the following TimeInForce values will be translated: 0 (DAY) → E (PRE) 5 (GTX) → X (PTX) 6 (GTD) → T (PTD) |
| Echo Tag 40 on Ack | No | Return OrdType (40) value on FIX Ack. Note that this value will also be returned on Order by Order FIX DROP. |
| Echo Tag 47 on Ack | No | Return OrderCapacity (47) value on FIX Ack. Note that this value will also be returned on Order by Order FIX DROP. |
| Enable State Change Tracking^ | No | Allows for tracking of the state of routable orders. See State Change Tracking for more information. |
| Enable True MinQty | No | Do not aggregate multiple contra orders to meet the MinQty specified on an order. If set to ‘Yes’, orders will be converted into standard MinQty during a Periodic Auction. Periodic Auction Eligible orders will remain as True MinQty in the continuous book (BYX Only) . |
| Enforce Rate Limit via Pause | False | When set to False, the existing Port Order Rate Threshold, Sustained Port Order Rate Threshold, Symbol Order Rate Threshold, and Sustained Symbol Order Rate Threshold port attributes will be enforced by rejects (as described). When set to True, Port Order Rate Threshold, Sustained Port Order Rate Threshold, Symbol Order Rate Threshold, and Sustained Symbol Order Rate Threshold port attributes will be enforced by read pause instead of by rejects. |
| Fat Finger Protection* | None | Specifies a percentage or dollar based limit price tolerance where any orders entered with a limit price that is through the NBBO by an amount greater than or equal to the defined percentage or dollar amount will be rejected. Limits may be different for different price ranges. Does not apply to RHO orders entered prior to the open until they move to continuous trading. See the Cboe Titanium U.S. Equities/Options Web Portal Port Controls Specification for more details. |
| Force MDO with QDP (EDGA and EDGX Only) | n | When set, midpoint and standard MDO order types will default to MDO with QDP orders. n = Do nothing (default) b = Book only MDO with QDP p = Post only MDO with QDP |
| Gross Daily Risk Limit Order Notional Cutoff* | None | Optional parameter that if specified will result in rejects for limit orders when gross exposure of limit orders exceeds this value. Whole dollar value not to exceed $1B/port. |
| Gross Daily Risk Limit Order Notional Warn % | None | Optional parameter that will generate an email notification when the corresponding Cutoff risk limit exceeds a user defined percentage. |
| Gross Daily Risk Market Order Notional Cutoff* | None | Optional parameter that if specified will result in rejects for market orders when gross exposure of limit orders exceeds this value. Whole dollar value not to exceed $1B/port. |
| Gross Daily Risk Market Order Notional Warn % | None | Optional parameter that will generate an email notification when the corresponding Cutoff risk limit exceeds a user defined percentage. |
| Hold Early Orders Until (BZX and EDGX Only) (Effective 12/07/26) | False | If configured, the system will use the later of the start time specified here or the start time of the TimeInForce value specified on the order. Start times may be set in 1/2 hour increments up to 9:00 a.m. ET. |
| Hold Early to 7am (BZX and EDGX Only) (Sunset Effective 12/07/26) | False | Controls the executable time of orders submitted prior to 7:00 a.m. ET with a TimeInForce (59) that allows trading in the Early Trading Session. `False` = Orders may enter the book and trade as early as 4:00 a.m. ET. `True` = Orders will be queued until 7:00 a.m. ET. |
| Lock Auction Orders (BYX Only) | False | Disallow order cancellation during periodic auction. `False` = Allow cancellations `True` = Do not allow cancellations |
| Maximum Order Dollar Value* | Unlimited | Maximum order dollar value per order. |
| Maximum Order Size* | 25,000 | Maximum number of shares allowed per order. |
| Microsecond Timestamp Granularity | No | Display microsecond level timestamp granularity for TransactTime (60), OrigTime (42) and SendingTime (52). These tags default to millisecond or second granularity. |
| MPID Filter for Purge Ports | None | Specify up to ten MPIDs per purge port for which purges will be permitted. If a purge request specifies an MPID not included in the list of configured MPIDs, the purge request will be rejected. If a purge port is configured with multiple MPIDs and a purge request is sent without any MPIDs specified, the purge will be applied only to the list of configured MPIDs. |
| Net Daily Risk Limit Order Notional Cutoff* | None | Optional parameter that if specified will result in rejects for limit orders when net exposure of limit orders exceeds this value. Whole dollar value not to exceed $1B/port. |
| Net Daily Risk Limit Order Notional Warn % | None | Optional parameter that will generate an email notification when the corresponding Cutoff risk limit exceeds a user defined percentage. |
| Net Daily Risk Market Order Notional Cutoff* | None | Optional parameter that if specified will result in rejects for market orders when net exposure of limit orders exceeds this value. Whole dollar value not to exceed $1B/port. |
| Net Daily Risk Market Order Notional Warn % | None | Optional parameter that will generate an email notification when the corresponding Cutoff risk limit exceeds a user defined percentage. |
| Notional Cutoff Aggregation Methods* |  | `Gross exposure` = CBB + CBO + CEB + CEO. `Net exposure` = ABSOLUTE VALUE of [(CEO + CBO) - (CEB+CBB)] On a given port Cboe will calculate and track four values as follows: Cumulative Notional Booked Bid Value (CBB) - The sum of limit price * size for all buy limit orders on the book. Cumulative Notional Booked Offer Value (CBO) - The sum of limit price * size for all sell limit orders on the book. Cumulative Notional Executed Bid Value (CEB) - The sum of size * trade price on all executed buy orders. Cumulative Notional Executed Offer Value (CEO) - The sum of size * trade price on all executed sell orders. |
| Opt-out of PITCH Obfuscation | No | Opt-out all orders from PITCH Order Id obfuscation for hidden and reserve orders. |
| Port Order Rate Threshold | `Default` = 5000 msgs/sec `Max allowed` = 5000 msgs/sec `Max allowed` = 10,000 msgs/sec (EDGX Only) | 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 4,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. If maximum rate limit of 10,000 is requested, no more than 9,999 additional non-administrative messages will be allowed within that one second window. (EDGX Only) Note: Order handler burst rates towards each matching unit may be limited as described in Architecture and Message in Flight Settings . |
| Reject Market Orders Without NBBO | No | Reject Market Orders (including unpriced Peg Orders and Stop Orders) when there is no NBBO on the opposite side. |
| Reject Orders on DROP Port Disconnect* | No | Allows Member/Sponsoring Firms to associate a DROP port(s) to an order entry port(s). Once the association has been established, if no DROP ports associated with an order entry port are connected, reject orders on the order entry port until at least one of the DROP port session connections have been established. |
| 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 DROP port for the order entry session has disconnected, the reject/cancel actions will be taken on the order entry session if an associated DROP port has not reestablished its connection in the defined time. Minimum value allowed is 20. |
| Report MTP Fields*^ | No | Enables LastPx (31), LeavesQty (32) and SecondaryOrderId (198) on Execution Reports caused by MTP. |
| Report Working Price | No | Reports WorkingPrice (9690) and InitialDisplayPrice (9691). |
| Require RiskGroupIDs | No | Require that every order submitted on the port include one of the allowed RiskGroupID (7699) values that is configured on the port. If configured this will cause orders without one of the listed RiskGroupIDs to be rejected. |
| Restate on Reload^ | No | Generates FIX Restatement on reserve order reload with new PITCH Order Id in Tag 198, and populates the new PITCH Order ID in Tag 198 of a Cancel/Replace acknowledgment that increases the size of a reserve order. |
| Routing Retail Indicator (EDGX Only) | No | Mark orders as retail when routing to dark liquidity pools. |
| Send Nanoseconds | No | Display nanosecond level timestamp granularity for TransactTime (60), and OrigTime (42), and SendingTime (52). If send nanoseconds and microseconds are both selected, nanoseconds will override. |
| Send Peg Restatements^ | Option #1 | Send order restatements for Peg order moves. No Peg restatements (default) Market Maker Peg orders only All Peg orders except Market Maker Peg orders All Peg orders |
| Send Trade Breaks^ | No | Enables Trade Break Messages (35=UCC). |
| Session Close Handling | Option #1 | Customize message that would normally be sent at the regular market (4PM) and session close (8PM). Also functional during early close situations. Times in ET. Options supported are as follows: Send Cancels (Default) - A Cancel message will be sent for all expired orders. Suppress Cancels - No message will be sent and it is the member’s responsibility to close all expired orders in their system. Send DoneForDay - A DoneForDay message will be sent in place of the Cancel message for each order that has expired and is no longer eligible for execution. DoneForDay messages are sent via OrdStatus (39) = `3` and ExecType (150) = `3` . |
| Single Order ADV Check* | None | Reject orders when order size exceeds a specified percentage of the 20-day ADV. Members may also specify a 20-day ADV amount below which the check will not be applied. |
| Sponsored Port | No | Designates that the session will carry Sponsored flow. |
| Sponsoree Firm ID | None | Only available when Sponsored Port is set to 'Yes'. Will be populated with the Sponsored Firm's Firm ID. |
| Sustained Port Order Rate Threshold (EDGX Only) | `Default` = 25000 msgs/5 sec `Max allowed` = 25000 msgs/sec | The maximum allowed message rate on the session. When the first non-administrative message is received, a five second window begins. During the five seconds no more than 24,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 . |
| Sustained Symbol Order Rate Threshold (EDGX Only) | 25000 msgs/5 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 . |
| Symbol Order Rate Threshold | 5000 msgs/sec `Max allowed` = 10000 msgs/sec (EDGX Only) | 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 . |
| Unique Wash Execution Ids | No | Appends a ‘.B’ or ‘.S’ to ExecID (17) on all trades. |

* Sponsored Participants require written approval from Sponsors to update these settings on ports associated to a Sponsor’s MPID.

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

% Requires agreement for use of feature.

^ Requires certification.

## References

For more information on Cboe Symbology, please see the Cboe Titanium U.S. Symbology Reference.

## Contact Information

Please direct questions or comments regarding this specification to tradedesk@cboe.com.

## Revision History

| Document Version | Date | Description |
|---|---|---|
| 2.0.0 | 04/04/14 | Merged Bats BYX, BZX, EDGA and EDGX FIX specifications in preparation for the Bats/Direct Edge integration. |
| 2.0.1 | 04/30/14 | Minor updates to certification requirement in FIX Port Attributes section. Changed AttributedQuote (Tag 9732) ID for retail from "RTL" to "RTAL". |
| 2.0.2 | 06/05/14 | Removed references to NSX. Added OATS EPID section. Changed AttributedQuote (Tag 9732) ID for retail from "RETL" to "RTAL". Removed highlighting for features where a release date has been announced for BYX Exchange, BZX Exchange and/or Cboe Options. |
| 2.0.3 | 07/01/14 | Midpoint Discretionary Order no longer planned to be offered on BYX Exchange and EDGX Exchange. |
| 2.0.4 | 07/09/14 | Removed highlighting for features where a release date has been announced for BYX Exchange and BZX Exchange. Corrected default Price Sliding port attribute setting for EDGX. |
| 2.0.5 | 07/31/14 | Renamed "Suppress Cancels on Session Close" Port Attribute to "Session Close Handling" and updated options. Added support for DoneForDay messages (refer to "Session Close Handling" Port Attribute). Removed highlighting for features where a release date has been announced for BYX Exchange, BZX Exchange and/or Cboe Options. Added reject code Text (Tag 58) = `M: Liquidity Available Exceeds Order Size` in support of SWPB. |
| 2.0.6 | 08/06/14 | Added Text (Tag 58) = `E` to indicate a reduction in OrdQty due to SWP restatement as a result of an IOC SWP order having size greater than the displayed quantity of all protected market centers. Used in conjunction with ExecRestatementReason (Tag 378) = "5" and ExecType (Tag 150) = "D". |
| 2.0.7 | 08/29/14 | Defined "w" cancel reason in Text (FIX Tag 58) field. Updated Peg order details to allow for use of displayed Primary pegs. Added RoutingInst (Tag 9303) = K. |
| 2.0.8 | 9/23/14 | ROUC is no longer planned for release on BYX Exchange or BZX Exchange. It will continue to be supported on EDGA Exchange and EDGX Exchange. Removed highlighting for features where a release date has been announced for BYX Exchange, BZX Exchange and/or Cboe Options. |
| 2.0.9 | 9/29/14 | Removed highlighting for features where a release date has been announced for BYX Exchange, BZX Exchange and/or Cboe Options. Updated Hours of Operation section to account for new Opening Process on BYX Exchange and BZX Exchange. Effective 12/01/14. |
| 2.0.10 | 10/01/14 | Correction to Midpoint Match order definition in section 5.10. OrdType (Tag 40) must equal "P". |
| 2.0.11 | 10/08/14 | Removed highlighting for features where a release date has been announced for BYX Exchange, BZX Exchange and/or Cboe Options. |
| 2.1.0 | 10/23/14 | Deprecated FIX v1 specifications. Added v1 messages that continue to be supported (i.e. ExchangeFeeCode tag 9621 and Routing V1 tags). TimeInForce (Tag 59) = `R` HO supported for all symbols on BYX Exchange and BZX Exchange. Effective 12/01/14. OrdType (Tag 40) Market implies TimeInForce (Tag 59) of DAY on BYX Exchange and BZX Exchange. Effective 11/14/14. Added support for ExecInst (Tag 18) `of o` = Listing Market Opening on BYX Exchange and BZX Exchange. Available effective 12/03/14. Added support for ExecInst (Tag 18) `of c` = Listing Market Close on BYX Exchange and BZX Exchange. Available effective 12/03/14. Added support for ExecInst (Tag 18) `of a` = Both Listing Market Open and Close on BYX Exchange and BZX Exchange. Available effective 12/03/14. Added support for RoutStrategy (v2 Tag 9400) = ROOC on BYX Exchange and BZX Exchange. Available effective 12/03/14. |
| 2.1.1 | 10/27/14 | Updated table in section 5.4.4 to indicate that Market Maker Pegs must be Post Only. |
| 2.1.2 | 11/7/14 | Removed restriction that MPM orders must have been sized greater than or equal to an odd lot. Added recommended mapping to FIX Tag 851 in TradeLiquidityIndicator (FIX Tag 9730) Added "w" and "v" values back to ExecInst (FIX Tag 18) for v1 Routing. Updated RoutingInst v2 (FIX Tag 9303) to indicate that Post Only at Limit is supported on BZX and BYX only. |
| 2.1.3 | 12/2/14 | Added Use Compliance ID to list of FIX Port Attributes. Allow for MaxRemovePct (Tag 9618) to be sent with zero value to EDGA and EDGX. |
| 2.1.4 | 12/17/14 | Removed effective date references where date has passed. |
| 2.1.5 | 1/15/15 | Added Midpoint Discretionary Order to Order Types and Features section. Corrected default sliding values in Re-Priced Orders section. Added "CLC" value to ContraBroker (FIX Tag 375). Removed reference to legacy Direct Edge FIX Specification. |
| 2.1.6 | 1/29/15 | Removed all references to Lava FLOW and ROLF strategy. Last supported trading day for Lava FLOW is 1/30/15. |
| 2.1.7 | 2/25/15 | Updated description of Unique Wash Execution Ids port attribute. Added language to Logon message clarifying behavior around one second wait period after Logon is received. Updated RoutingInst v1 (FIX Tag 9303) to add "Z" value back for v1 Routing. |
| 2.1.8 | 3/24/15 | Added value of "s" to Text (FIX Tag 58) field for duplicative order rejects. |
| 2.1.9 | 5/19/15 | Clarifications made Discretionary Order and Re-Route Orders in the Order Types and Features section. Functionality modifications to EDGX to align with the other Cboe equity exchanges (effective 7/6/15). EDGX Midpoint Match translated as Midpoint Peg No Lock (effective 7/6/15). EDGX price sliding default changed to Display Price Sliding (effective 7/6/15). EDGX and EDGX discretionary order behavior changed to match BZX and BYX (effective 7/6/15) |
| 2.1.10 | 6/9/15 | ROOC orders with an ExecInst (FIX Tag 18) = `c` can route to halt auctions (effective 6/12/15). |
| 2.2.0 | 7/6/15 | Removed all references to Midpoint Match and Hide Not Slide. |
| 2.2.1 | 7/16/15 | Updated TradeLiquidityIndicator (FIX Tag 9730) to not restrict a 2nd Character of ‘m’ to the BYX Exchange |
| 2.2.2 | 7/27/15 | RoutStrategy (FIX Tag 9400) value of "ROOC" available on BZX and EDGX exchanges only. Effective 08/10/15 |
| 2.2.3 | 8/5/15 | Added values to RoutingInst (v1) (FIX Tag 9303), ExDestination (FIX Tag 100), and ContraBroker (FIX Tag 375) in anticipation of NSX reactivation on 8/31/15. Added Routing Retail Indicator port attribute (EDGX only). Effective 9/10/15 Added Single Order ADV Check port attribute. Effective 8/14/15 Updated description of Fat Finger Protection port attribute. |
| 2.3.0 | 8/21/15 | Added EffectiveTime (FIX Tag 168). Added Duplicative Order Protection port attributes. |
| 2.3.1 | 9/3/15 | Changed effective date for EffectiveTime (FIX Tag 168). |
| 2.3.2 | 11/23/15 | Updated description of ROBB and ROCO RoutStrategy (FIX Tag 9400) values. Added Port Attribute "All Routable To Halt Auction". Effective 12/4/15 Added support for ALL Cboe routing strategy, RoutStrategy (FIX Tag 9400) = `ALLB` . |
| 2.4.0 | 2/19/16 | Added Supplemental Peg Order to Order Types and Features section. Removed EffectiveTime (FIX Tag 168). Updated Stop Order in Order Types and Features to indicate that TimeInForce (FIX Tag 59) is required. Cboe branding/logo changes. |
| 2.4.1 | 2/24/16 | Updated reason code for restatement messages ExecRestatementReason (FIX Tag 378) Effective 3/10/16 |
| 2.4.2 | 3/24/16 | Updated description of Aggressive and Super Aggressive RoutingInst (FIX Tag 9303) values. Updated description of Text (FIX Tag 58) Update description of RoutStrategy (v2) (FIX Tag 9400) to state routeable ISOs must be sent with "DIRC". Effective 4/25/16 |
| 2.5.0 | 4/12/16 | Additional Cboe branding changes. Added three new TimeInForce (FIX Tag 59) values to support addition of Early Trading Session. Effective as early as 5/23/16 Added Early Trading Session Opt-Out port attribute. Effective as early as 5/23/16 Updated Hours of Operation. Effective as early as 5/23/16 Effective Dates by Exchange: BYX - 5/23/16 EDGA - 5/24/16 BZX - 5/25/16 EDGX - 5/26/16 |
| 2.5.1 | 4/18/16 | Removed some route strategies. Removal of IOCM and ICMT effective May 5, 2016 on BYX Exchange and May 6, 2016 on EDGA Exchange. Removal of TRIM3 and TRIM3- effective May 6, 2016 on BZX Exchange. |
| 2.5.2 | 4/25/16 | Clarified when "Fat Finger Protection" is applied. |
| 2.5.3 | 5/6/16 | Added 4 "Warn %" Port Attributes which are associated with the "Daily Notional Cutoff" Port Attributes. Corrected the number of available peg order types. |
| 2.5.4 | 7/13/16 | Updated Prices section for securities in one of the Tick Size Pilot Program Test Groups. Effective 10/3/16. Added Trade At ISO value to ExecInst (FIX Tag 18). Effective 10/3/16. Added ExDestination (FIX Tag 100) value for IEX. Effective 8/19/16. Added ContraBroker (FIX Tag 375) value for IEX. Effective 8/1/16. |
| 2.5.5 | 8/12/16 | Updated Effective Date for supporting ExDestination (FIX Tag 100) value for IEX to 8/19/16 |
| 2.5.6 | 9/13/16 | Updated language for ExDestination (FIX Tag 100) related to Post-to-Away routing. |
| 2.5.7 | 9/15/16 | Removed DE Compatibility Mode References Cboe Legacy Routing Mode ( RoutingInst v1 ) to be discontinued effective 9/30/16. |
| 2.6.0 | 10/5/16 | Removed references to Cboe Legacy Routing Mode (RoutingInst v1). |
| 2.6.1 | 1/25/17 | Corrected typo in `Logout` message. Updated DiscretionAmount (FIX Tag 9622) to clarify it is not compatible with Post Only routing instructions. Added section 5.14 to describe DIRC to IEX-Midpoint routing Added DIRC to IEX-Midpoint value to RoutStrategy (FIX Tag 9400). |
| 2.6.2 | 3/14/17 | Removed references to legacy DROP protocol. Added "Port Order Rate Threshold", "Symbol Order Rate Threshold", "Allow Test Symbols Only" and "Allow Directed ISO" Port Attributes. |
| 2.6.3 | 3/29/17 | Added RMPL RouteStrategy (FIX Tag 9400). |
| 2.6.4 | 5/17/17 | Added Cancel on ME Disconnect port attribute. |
| 2.6.5 | 6/9/17 | Added IEX to the TRIM, TRIM-, TRIM2, and TRIM2- RoutStrategy (FIX Tag 9400). Added Non-Displayed Swap (NDS) order. Effective 7/21/17 . |
| 2.6.6 | 8/10/17 | Added Default Routing Instruction (Hidden Order Override) port attribute. |
| 2.6.7 | 8/17/17 | Added Hidden MDO functionality to EDGA. |
| 2.6.8 | 9/19/17 | Updated effective date for EDGA Hidden MDO to 9/15/17. |
| 2.6.9 | 10/17/17 | Cboe branding/logo changes. |
| 2.6.10 | 12/04/17 | Updated TimeInForce (59) requirements for Displayed Primary Peg with non-aggressive PegDifference (211). Effective 12/15/17. |
| 2.6.11 | 1/24/18 | Updated DisplayIndicator (9479) to refer to section 5.4 Peg Orders for applicability of the invisible ‘I’ instruction. Updated section 5.4.5 Supplemental Peg Order to eliminate incorrect values. Reworked the `Order Cancel/Replace Request` message to clarify when an order loses time priority and to harmonize with BOE. Post to Away orders must be limit orders. |
| 2.6.12 | 2/2/18 | Added Port Attribute "Reject Market Orders Without NBBO". (Effective 2/16/18) |
| 2.6.13 | 3/20/18 | Updated the market centers that support Post to Away in ExDestination (100) . Added port attribute "Default True MinQty" (effective 4/18/18). |
| 2.7.0 | 3/27/18 | Added Cboe Market Close (CMC) functionality (effective TBD). Clarified that a zero MaxFloor (111) on an `Order Cancel/Replace Request` will be ignored. |
| 2.7.1 | 5/8/18 | LastShares (32) will be used to report the number of shares cancelled on Cboe Market Close restatements. CumQty (14) will not report matched shares on CMC restatements and will instead be zero. LeavesQty (151) will be used for matched shares on CMC restatements. Updated description of Aggressive and Super Aggressive RoutingInst (9303) values. |
| 2.7.2 | 5/11/18 | Updated description on MinQty (110) behavior and changes related to the release of Enable True MinQty port attribute. |
| 2.7.3 | 6/8/18 | Added support for RoutingInst (9303) = N (NDS) on BYX, BZX, and EDGA (effective 6/14/18). |
| 2.7.4 | 6/13/18 | Updated description for Re-Route behavior as it relates to Super Aggressive routing instructions. Effective 07/10/2018 for EDGA, 07/12/2018 for BXZ, BYX, and EDGX. |
| 2.8.0 | 8/23/18 | Added support for Equities Purge Ports (effective 10/1/18). Added Purge Request, Purge Acknowledgment, and Purge Rejected message types. Added definitions for MassCancelID (7695), MassCancelInst (7700), RiskGroupID (7699), RiskGroupIDCnt (7698), and RiskReset (7692) fields. Updated Trading Sessions to reflect that BZX is open until 8:00 p.m. ET. MDO ExecInst (18) added to EDGX effective 10/3/18. |
| 2.8.1 | 9/13/18 | Added CLNK as new value for RoutStrategy (9400) and h=HRT Execution Services LLC as new value for ExDestination (100). Effective 9/24/18 for EDGA only. |
| 2.8.2 | 10/2/18 | Updated trading session information to reflect extension of BYX Post-Market Session hours to 8:00 p.m. ET. |
| 2.8.3 | 12/7/18 | Updated Discretionary Order behavior, indicating liquidity swap no longer applies to EDGA. |
| 2.8.4 | 3/4/19 | Added l=Virtu VEQ Link and v=Virtu VEQ as new values for ExDestination. Effective 3/8/19 for EDGA only. |
| 2.8.5 | 3/22/19 | Updated ROBB and ROCO routing strategies on EDGA. Updated TRIM and TRIM- on BYX and BZX. Deprecated TRIM2 and TRIM2- on BYX and BZX. Deprecated SWPB routing strategy for all exchanges (effective 05/01/19). |
| 2.8.6 | 6/25/19 | Added X value to ExtendedExecInst (9416) and Default to Retail Order port attribute to support Retail Priority on EDGX (effective TBD). |
| 2.8.7 | 9/6/19 | Added note indicating MinQty (110) is not compatible with Retail Price Improving (RPI) orders ( BYX Only ). Sorted table 4.3 numerically by FIX tag. |
| 2.8.8 | 10/11/19 | Updated effective date for ExtendedExecInst value `X`=Retail Priority Order. Effective on EDGX only, 11/1/19. |
| 2.8.9 | 11/07/19 | Added notes indicating that ‘at’ symbol, pipe, and double quote characters are not permitted in the ClOrdID and ComplianceID fields (effective 01/13/20). |
| 2.8.10 | 01/14/20 | `Added reason code F` = Failed to quote. Updated accepted TimeInForce values for Intermarket Sweep Orders to include 1, 4, 5, 6, E, R, T, X. Added note to FIX Tag 58 (Text) indicating that the specific text the system delivers may vary from the text listed, to provide clarification of the reject reason. |
| 2.8.11 | 01/17/20 | Updated routing strategies to replace CLC with DRT. The system will convert any instances of ROUD or ROUQ values in the RoutStrategy (FIX Tag 9400) instruction to the ROUZ value and convert any instance of ROUE values to the ROUT value. Effective on EDGX 2/3/20. |
| 2.8.12 | 01/30/20 | Added Cboe Market Close (CMC) functionality effective date - 3/6/20. Added ExDestination (100) value of "L" and ContraBroker (375) value of "LTSE" for Long Term Stock Exchange. |
| 2.8.13 | 02/6/20 | Removed RoutingInst (9303) = Q, post only at limit. Removed MaxRemovePct (9618). Partial post only orders are no longer supported on BYX and BZX. |
| 2.8.14 | 02/14/20 | Added note indicating the CLC routing strategy will be deprecated and replaced with DRT. The system will convert any instances of ROUD or ROUQ values in the RoutStrategy (FIX Tag 9400) instruction to the ROUZ value and convert any instance of ROUE values to the ROUT value. Effective on EDGA 3/2/20. |
| 2.8.15 | 03/11/20 | Added ExDestination (100) and ContraBroker (375) values for MEMX and MIAX Pearl Exchanges. |
| 2.8.16 | 04/29/20 | Updated formatting of exchange hours. Renamed CustomGroupID field to RiskGroupID . Defined new Risk Threshold Warning message that will be added to FIX Drop effective 5/15/20 for EDGA and 5/22/20 for BZX/BYX/EDGX. Added Drop Port Attribute "Send Risk Threshold Warnings FIX". (effective May 15) Added Port Attribute "Risk Group Id(s)". (effective May 15 ) |
| 2.8.17 | 05/15/20 | Added Maximum Open Order Limits section. Updated ExecInst (18) with 'e' value to support MDO with QDP and PegDifference (211) to be accepted for MDOs (effective 6/10/20 for EDGA and EDGX Only ). |
| 2.8.18 | 06/11/20 | Updated DisplayIndicator (9479) description. Corrected value for 'Intermarket Sweep (Directed or Cboe)' in ExecInst field (18) to lowercase 'f'. |
| 2.8.19 | 11/05/20 | Updated ROBB and ROCO RoutStrategy (9400) values for EDGA. Removed footnote indicating the ExDestination (100) value 'I=Investors Exchange' has the Post to Away option available for ROUT and ROUX. Updated Maximum Open Orders Limits to 300,000 for EDGX and BZX. Clarifications to usage of PegDifference (211) when using Midpoint Discretionary Orders. |
| 2.8.20 | 11/10/20 | Added note indicating EDGX Early Trading Session starting time will change from 7:00 a.m. to 4:00 a.m. , Order Acceptance starting time will change from 6:00 a.m. to 3:30 a.m., Order Acceptance end time will change from 7:00 a.m. to 4:00 a.m. (EDGX Only) (effective 12/07/20). |
| 2.8.21 | 12/04/20 | Updated effective date to TBD for changes to EDGX Early Trading Session to 4:00 a.m. and Order Acceptance starting time to 3:30 a.m. . |
| 2.8.22 | 12/16/20 | Updated MDO with QDP description, indicating EDGX will support Book only routing (Effective for EDGX 01/20/21). Added description of new "book re-check" functionality to MDO section (Effective for EDGA and EDGX 01/20/21). |
| 2.8.23 | 02/08/21 | Added new port attribute 'Hold Early to 7am' ( EDGX Only ) (effective 03/08/21). Updated effective date for changes to EDGX Early Trading Session to 4:00 a.m. and Order Acceptance starting time to 3:30 a.m. (effective 03/08/21). Corrected description of TradeLiquidityIndicator (9730) field to include `W` = Waiting value, as this value is already in use. Added ‘Section 1.5.1 - Architecture’ to provide high level overview of protocol architecture and source IP blocking feature. Added new ‘Section 1.5.3 - Stale NBBO’ to describe system behavior when SIP NBBO is unavailable. |
| 2.8.24 | 04/07/21 | Removal of CLNK, INET, RDOX, AND TRIM- routing strategies (effective 04/21/21). |
| 2.9.0 | 04/27/21 | Added TradeLiquidityIndicator (9730) value for Periodic Auctions, added new FIX tag CrossTradeFlag (9355) to New Order Single and Execution Report, added new section 5.17 for Periodic Auctions, added new port attributes for Periodic Auctions (BYX Only) (Effective 04/14/22 Effective Q3 2021 TBD). |
| 2.9.1 | 07/06/21 | Added notes indicating ComplianceID (376) and the "Use Compliance ID" port attribute will be deprecated (effective 07/23/21). |
| 2.9.2 | 07/19/21 | Updated Periodic Auctions effective date to (04/14/22 TBD). |
| 2.9.3 | 08/26/21 | Updated EDGX Order Acceptance starting time to 2:30 a.m. (effective 09/07/21). |
| 2.9.4 | 09/27/21 | Updated the Cboe Holiday Schedule, Exchange Fee Schedule, and Web Portal Port Controls Specification links. Added a new Port Attribute "Capacity Override" (effective 10/12/21). |
| 2.9.5 | 10/06/21 | Added a new Port Attribute "Force MDO with QDP" (EDGA and EDGX Only) (effective 10/28/21). |
| 2.9.6 | 11/04/21 | Corrected description of maximum open order limits to identify that the maximum limit is applicable on FIX ports. Duplicative Order Protection Time Threshold to be sunset (effective 12/07/21). Duplicative Order Protection Order Count will look at consecutive orders (effective 12/07/21). |
| 2.9.7 | 12/02/21 | Updated "Port Order Rate Threshold" and "Symbol Order Rate Threshold" Port Attributes to allow a maximum of 10000 msgs/sec (EDGX Only) (effective 12/14/21). Added new Port Attributes "Sustained Port Order Rate Threshold" and "Sustained Symbol Order Rate Threshold" (EDGX Only) (effective 12/14/21). |
| 2.9.8 | 12/17/21 | Updated Duplicative Order Protection Action description. Noted IOC Periodic Auction orders will not be accepted (BYX Only) (Effective 04/14/22 TBD ). |
| 2.9.9 | 01/13/22 | Added a new MatchingUnit field to Purge Request messages (Effective 02/11/22 for EDGA and 02/14/22 for BYX, BZX, and EDGX). Updated Purge Request section indicating that RiskGroupID (7699) or MPID (115) purges with no Symbol (55) may be directed to a specific matching unit using the MatchingUnit (25017) optional field (Effective 02/11/22 for EDGA and 02/14/22 for BYX, BZX, and EDGX). |
| 2.9.10 | 03/25/22 | Updated Periodic Auctions effective date to 04/14/22 (BYX Only). |
| 2.9.11 | 04/08/22 | Updated Execution Report with correct TradeLiquidityIndicator value for Periodic Auctions (Effective 04/14/22) (BYX Only). |
| 2.9.12 | 05/09/22 | Added TradeLiquidityIndicator (9730) value ‘s’ (effective 06/01/22). |
| 2.9.13 | 07/15/22 | When Default CrossTradeFlag = `2`, IOC, FOK, and displayed orders will not be converted to a Periodic Auction Eligible order and will be sent to the book as-is (BYX Only) (effective 07/29/22). |
| 2.9.14 | 08/19/22 | Added PossDupFlag (43) = `Y` , indicating a message resend and should be used during FIX Replay. 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. Added LocateBroker (5700) to Optional Fields and Execution Report (effective 10/14/22). |
| 2.9.15 | 11/21/22 | Added PreventMemberMatch (7928) = `X` indicating prevent match at the affiliate (Exchange Member) level (effective 12/15/22). When Default MTP Value port attribute is set to ‘X’, affiliate match trade prevention will be used by default (effective 12/15/22). |
| 2.9.16 | 12/06/22 | Updated ExecRestatementReason (378) = `5` to indicate reduction of OrdQty due to SWP or MTP Decrement. |
| 2.9.17 | 02/16/23 | The CMC FIX restatement will be sent at approximately 3:49 p.m. ET (effective 03/10/23). |
| 2.9.18 | 03/10/23 | ExecInst = `m` (Midpoint Peg- No Trade in a Locked Market) will be allowed for PAE orders ( CrossTradeFlag = `2` ) (BYX Only) (effective 03/29/23). Added ExDestination (100) = `T` (pending approval) . |
| 2.9.19 | 03/13/23 | Added new "Sponsored Port" and "Sponsoree Firm ID" Port Attributes. |
| 2.9.20 | 05/24/23 | BYX will disseminate a `Retail Price Improvement` message when the resting RPI order is priced better than the NBBO (BYX Only) (effective 06/14/23). |
| 2.9.21 | 06/22/23 | Added `ContraBroker`= ‘ICRS’ indicating routed to intelligent cross (pending approval). |
| 2.9.22 | 07/14/23 | Updated "Allowed Clearing MPID(s)" Port Attribute to indicate only one Clearing MPID will be allowed for trading on a port when "Sponsored Port" attribute is enabled. |
| 2.9.23 | 09/13/23 | Added new Disallow Market Orders port attribute (effective 10/13/23). |
| 2.9.24 | 09/15/23 | Updated PreventMemberMatch (7928) = `X` indicating prevent match at the affiliate (Exchange Member) or Sponsored Participant level. When "Default MTP Value" port attribute is set to ‘X’, Affiliate Firm’s or Sponsored Participant’s match trade prevention will be used by default. |
| 2.9.25 | 09/22/23 | Added new "MPID Filter for Purge Ports" Port Attribute (effective 10/06/23). |
| 2.9.26 | 10/30/23 | Updated the identical Purge message definition to include MatchingUnit (25017) (effective 11/10/23). |
| 2.9.27 | 11/17/23 | Added new value of ‘3=Midpoint Peg - Periodic Auction Only’ to Default CrossTradeFlag port attribute (effective 12/15/23). |
| 2.9.28 | 12/01/23 | Added new Architecture and Message in Flight section (effective 01/19/24 on EDGA, and 02/09/24 on BYX, BZX, and EDGX). |
| 2.9.29 | 02/02/24 | Updated Protocol Features to include latency expectations as well as Members/TPH's responsibility to monitor the status of the messages they send to the exchange. |
| 2.9.30 | 04/22/24 | Clarified that reserve quantity is replenished when the displayed quantity falls below a round lot. Noted a maximum of 1,295 `Cancel/Replace` requests may be made to a single order each trading day. |
| 2.9.31 | 07/31/24 | Added new Section 1.2 - Certification Requirement. |
| 2.9.32 | 10/01/24 | Effective 11/01/24, RoutStrategy = ROUC, DIRC, RMPT, RMPL, ROBB, ROCO, and TRIM will be removed or updated for EDGA, RoutingInst = P will be supported for all applicable order types, and non-displayed swap orders and orders with a discretionary instruction (excluding MDOs) will perform a liquidity swap in certain situations (EDGA Only). |
| 2.9.33 | 11/13/24 | When Default CrossTradeFlag = '2' IOC, FOK, and displayed orders are not converted to a Periodic Auction Eligible order and are sent to the book as-is. Added a new CmcSessions (25020) to Cboe Market Close, Cboe Specific Message Fields, `New Order Single` messages, and `Execution Report` messages (effective 01/31/25). Updated LeavesQty in `Execution Report` messages to indicate LeavesQty may include shares already matched in an earlier session for CMC restatments. Updated LeavesQty in CMC section to indicate that LeavesQty is the quantity of unexecuted shares. Added a new CmcMatchQty (25023) to Cboe Market Close, Cboe Specific Message Fields, and to `Execution Report` messages (effective 01/31/25). |
| 2.9.34 | 11/22/24 | Formatting update. |
| 2.9.35 | 11/27/24 | Effective 12/13/24, when the Default CrossTradeFlag port attribute set to `2`, DisplayIndicator (9479) will be ignored if ExecInst (18) = `m` or `M`. Additionally, orders with RPI instructions will set this port attribute to `0` (BYX only). |
| 2.9.36 | 12/05/24 | Updated LastShares (32) in `Execution Report` messages to indicate that CMC Restatements will be sent after each matching session cut-off time. |
| 2.9.37 | 01/15/25 | Updated with Cboe Titanium branding. |
| 2.9.38 | 01/27/25 | Updated CmcSessions (25020) to clarify that `S` = 3:54 p.m. (NASDAQ-listed only) in `New Order Single` messages (effective 01/31/25). Updated CmcSessions description in the Cboe Market Close section (effective 01/31/25). |
| 2.9.39 | 03/31/25 | Added updated BZX times in trading session and added BZX to Hold Early to 7am Port Attribute (effective 05/01/25). Noted when the normal repricing of a Market Maker peg order to the designated percentage would result in the order being priced in excess of the system limitation of $999,999.99, the system limitation will prevail. |
| 2.9.40 | 04/23/25 | Added Microsecond Timestamp Granularity to FIX Drop Port Attributes . |
| 2.9.41 | 05/30/25 | Added LocateBroker (FIX Tag 5700) to the `Order Cancel/Replace` message. Added new "Enforce Rate Limit via Pause" Port Attribute (effective 06/27/25). |
| 2.9.42 | 06/13/25 | Updated ContraBroker to indicate that `CHX` = Routed to NYSE Texas Updated ExDestination to indicate that `M` = NYSE Texas . |
| 2.9.43 | 07/15/25 | Effective 08/15/25, Match Trade Prevention will be supported for Periodic Auctions (BYX only) |
| 2.9.44 | 07/22/25 | Added `G` = 24X to ExDestination (100) in New Order Single Message Fields . Added `TFXE` = Routed to 24X to ContraBroker (375) in Execution Report Messages Fields . |
| 2.9.45 | 08/19/25 | Updated ExDestination (100) in New Order Single Message Fields to indicate that `G` = 24X National Exchange Updated ContraBroker (375) in Execution Report Messages Fields to indicate that `TFXE` = Routed to 24X National Exchange |
| 2.9.46 | 09/02/25 | Added AccessFee (FIX Tag 9621) to Execution Report Message Fields and Cboe Specific Message Fields (effective 02/02/2611/03/25). |
| 2.9.47 | 10/31/25 | Updated AccessFee effective date to 02/02/26. |
| 2.9.48 | 11/18/25 | Updated BeginSeqNo description from "auto-generated request ID" to "Sequence number of first message in range to be resent" in Resend Request messages. |
| 2.9.49 | 12/09/25 | Updated Order by Order FIX Drop to clarify that reject messages will be sent which originate from a FIX or BOEv3 order entry session. Rejects originating from a BOEv2 order entry session will be suppressed. |
| 2.9.50 | 12/30/25 | Added the StepUpAmount field to Cboe Specific Message Fields , New Order Single Message Fields , and Execution Report Message Fields (effective 01/30/26). Updated Retail Price Improving (RPI) Orders to include Enhanced RPI orders. |
| 2.9.51 | 01/26/26 | Added "Send Nanoseconds" port attribute to FIX Port Attributes and FIX Drop Port Attributes (effective 03/27/26). Updated OrigTime and TransactTime fields to indicate that GMT date-time of the original trade will be available in nanoseconds (effective 03/27/26). |
| 2.9.52 | 01/30/26 | Updated Nasdaq BX to Nasdaq Texas. |
| 2.9.53 | 03/23/26 | Updated PegDifference (211) and ExtendedExecInst (9416) in New Order Single Message Fields to indicate RPI will apply to both BYX and EDGX (effective 04/10/26). Updated MinQty (11) in New Order Single Message Fields to indicate it is not compatible with Retail Price Improving (RPI) orders (BYX and effective 04/10/26 EDGX Only). Updated TradeLiquidityIndicator (9730) in Execution Report Message Fields to indicate 2nd character value `E` will apply to both BYX and effective 04/10/26 EDGX. Updated Retail Price Improvement Program to indicate RPI will apply to BYX and effective 04/10/26 EDGX. Updated "Retail Order - Type 2 - Book Only" and "Retail Order - Type 2 - Routable" details in Retail Orders (ROs) (effective 04/10/26). Updated Retail Price Improving (RPI) Orders to indicate RPI will apply to both BYX and EDGX and updated "Retail Price Improving Peg order" details (effective 04/10/26). Removed Trading Sessions table from Hours of Operations and added a link to the trading hours on the Cboe website . Added ResetSeqNumFlag (FIX Tag 141) to Logon Message Fields and clarified its use during Logon for emergency sequence number re-initialization. |
| 2.9.54 | 04/10/26 | Updated Retail Price Improving (RPI) Orders to clarify that only RPI primary pegs on EDGX require an offset. |
| 2.9.55 | 4/17/26 | Updated the product and session trading hours link in Hours of Operation . Added ContraBroker and ExDestination values for Texas Stock Exchange. |
| 2.9.56 | 06/30/26 | Pegged orders entered without a Price (44) are only accepted during RTH (effective 12/07/26). Updated TimeInForce language for EDGX 23x5 trading (effective 12/07/26). "Early Trading Session Opt-out" and "Hold Early to 7am" port attributes will be sunset 12/07/26. Added new "Hold Early Orders Until" port attribute (effective 12/07/26). |
| 2.9.57 | 08/04/26 | Added DisplayIndicator (FIX Tag 9479) value of h = Hidden Multiple Price Slide (effective 09/04/26). Added DisplayIndicator to Intermarket Sweep Order (ISO) . Added Hidden Multiple Price Slide to Re-Priced Orders (effective 09/04/26). |
