Deviations from Standard FIX

OpenYield uses FIX 4.4. This page lists:

  • A. where OpenYield's use of a field or message differs from FIX 4.4;
  • B. values OpenYield sends that QuickFIX's stock FIX44.xml data dictionary rejects;
  • C. venue behaviour your integration must handle.

FIX 4.4 names below are as they appear in QuickFIX's stock FIX44.xml. This page describes the defaults. Some connections are set up differently; your OpenYield contact will tell you if yours is.

A. Differs from FIX 4.4

Field or message FIX 4.4 OpenYield
ExecInst (18) Multiple values, space-separated; Z = CANCEL_IF_NOT_BEST, G = ALL_OR_NONE Exactly Z = Single Fill or Cancel; exactly G = All or None. Any other value, including G Z, is ignored and TimeInForce (59) is used. On outbound execution reports, TimeInForce is 1 with 18=G or 18=Z. On Quotes, All or None comes from QuoteQualifier (695) A, not 18. See Time in Force.
StipulationType (233) MINDNOM MINIMUM_DENOMINATION The minimum balance left after a partial fill. Defaults: MININCR is 1 bond, and MINDNOM equals MINQTY. Minima are read on NewOrderSingle (35=D) and Quote (35=S), not on OrderCancelReplaceRequest (35=G). They are echoed on 35=8, 35=AI and 35=6, and left out when all are 1 in your quantity unit, so they are always sent on Notional connections. See Minima.
Price2 (640) on 35=D and 35=G; MktBidPx (645) and MktOfferPx (646) on 35=S and 35=AJ Price2, MktBidPx, MktOfferPx The tiered (Professional) price, used for counterparties on the tiered price tier. OpenYield never sends these fields. See Pricing Tiers.
OrdStatus (39) 5 Not a FIX 4.4 OrdStatus value in QuickFIX's dictionary Sent with ExecType 150=5 when an order is replaced. Quote replaces are acknowledged with a QuoteStatusReport (35=AI) instead.
OrdRejReason (103) 5 UNKNOWN_ORDER, 8 STALE_ORDER, 9 TRADE_ALONG_REQUIRED, 10 INVALID_INVESTOR_ID, 11 UNSUPPORTED_ORDER_CHARACTERISTIC 5 unknown order, or an update that changes more than quantity and price; 8 price check failed; 9 party inactive; 10 counterparty or contract not set up; 11 order not supported. The other values sent are 1, 2, 3, 6, 13 and 99, with their FIX meanings.
OrdType (40) on QuoteStatusReport (35=AI) 2 LIMIT, 3 STOP, D PREVIOUSLY_QUOTED 2 = new quote, D = quote update, 3 = quote cancel
OrderCancelReplaceRequest (35=G) OrderQty is the new order quantity OrderQty 0 cancels the order. A replace keeps the original order's OrdType (40) and TimeInForce (59); if OpenYield has restarted since the order was placed, the replace's own values are used.
IOIQltyInd (25) L LOW, M MEDIUM, H HIGH Whether the order comes from your connection: L your own order (dealer connections); M an order from a counterparty on your connection, which may be your own (customer connections); H not from your connection
IOIQualifier (104) V VERSUS, A ALL_OR_NONE V = will be intermediated by OpenYield; A = All or None
IOIQty (27) S SMALL, M MEDIUM, L LARGE in QuickFIX's dictionary The actual quantity, in your quantity unit, sent as text such as 250.000000

B. Values QuickFIX's Stock Dictionary Rejects

Field What OpenYield sends What the stock FIX44.xml accepts
IOIQty (27) A number, such as 250.000000 Only S, M and L
OrdStatus (39) 5 (Replaced) No 5
MiscFeeType (139) 12 (Agent), on fills QuickFIX releases before 1.16.0 define 139 as a single character, so 12 is rejected. 1.16.0 accepts it.

QuickFIX answers a message with one of these values with a session Reject (35=3) and does not pass it to your application. Download OpenYield's patched dictionary from FIX Connection Information.

C. Venue Behaviour

  • Sequence numbers. Market Data (MD) and Order Book (OB) reset sequence numbers on logon, logout and disconnect, and nothing is resent. Trading (TR), Drop Copy (DC) and Summon (RQ) reset daily; missed messages are resent the same day. See Initiation.
  • Snapshots. MD sends a full snapshot (35=W) when you log on. OB sends no snapshot: orders already resting when you log on are not sent until they change, so reset your cached book when you reconnect. A MarketDataRequest (35=V) gets a BusinessMessageReject (35=j).
  • Disconnects. When the last TR session of a connection logs out, OpenYield cancels that connection's orders. A party's orders on other connections are cancelled only if that party has no connection left logged on. Some connections are set up to keep their orders.
  • Cancel All (35=Z). With no Parties, it cancels the orders and quotes of every party on this connection. With PartyRole 3, it cancels that counterparty's resting orders and quotes on every connection. PartyRole 5 is not supported, and QuoteCancelType, QuoteID and Symbol do not narrow the scope. See Cancel All.
  • Halts. When the market is halted, TR sessions receive a QuoteCancel (35=Z, 117=All, 298=4), then a TradingSessionStatus (35=h). Some connections are set up to be disconnected instead. See Marketplace State.
  • Certification. In production, application messages from a connection that is not yet certified are dropped with no reply. Unsupported message types still get a BusinessMessageReject (35=j).
  • Replace quantity. OrderQty on a replace is the total quantity to fill over the life of the order (the modern model), unless your connection is set up otherwise. Cancel-on-fill is set per counterparty. See Order Quantity Models.
  • Parties. On inbound messages, PartyRoles 3, 4, 5, 11 and 24 are read; PartyRole 1 is ignored. If PartyRole 3 is missing, your connection's code is used. See Party Blocks.
  • Quantity unit. Quantities are in bonds by default (1 bond = 1,000 face); Notional is set per connection. Physical bonds trade in whole bonds, digital bonds in steps of 0.01.