====== Prediction Markets ======
Prediction markets on the T4 platform are binary-outcome instruments that settle at either **0** or **1** (expressed as a price). This page explains how to interpret settlement messages so your application can correctly determine the outcome of a prediction market trade.
===== Overview =====
Unlike traditional futures contracts, prediction market instruments resolve to one of two discrete values at expiration:
* **1** -- The event occurred; the "Yes" side wins.
* **0** -- The event did not occur; the "No" side wins.
When a prediction market settles, the T4 platform generates a synthetic order update on the **opposite side** of your position at the settlement price. Your application should watch for this message to determine whether a held position resolved in or out of the money.
===== Settlement Mechanics =====
==== How Settlement Works ====
At market expiration, T4 will evaluate the outcome and issue a closing order update for each open position. The message will always be:
* **Side** -- Opposite of your open position (long positions receive a sell; short positions receive a buy).
* **Price** -- Either **0** (lost) or **1** (won), expressed in the instrument's native price format. See [[developers:systempricing|System Price Format]].
* **Order Type** -- ''[TBD -- settlement order type tag/value]''
* **Quantity** -- Equal to your open position size.
==== Outcome Matrix ====
^ Your Position ^ Settlement Price ^ Outcome ^
| Long | 1 | Won -- event occurred |
| Long | 0 | Lost -- event did not occur |
| Short | 1 | Lost -- event occurred |
| Short | 0 | Won -- event did not occur |
===== Identifying a Settlement Message =====
Your application should identify a settlement message by checking for the following combination of fields in an order update:
- The instrument is a prediction market type. See [[developers:websocket:markets|Market Data & Definitions]] for how to identify prediction market instruments.
- The order update represents a closing fill (opposite side of the open position).
- Price is exactly **0** or **1**.
- Order type is ''[TBD]''.
**Note:** Settlement messages are generated by the platform and do not represent a resting order in the book. They will not appear in the order book feed and should be treated as system-generated close events.
===== FIX API =====
Settlement is communicated via an **Execution Report (tag 35=8)** on the FIX session. The report will reflect the closing fill at the settlement price.
For full FIX tag definitions see [[developers:fixapi:start|FIX API]].
==== Key FIX Tags ====
^ Tag ^ Field Name ^ Settlement Value ^
| 1 | Account | Account holding the position being settled |
| 8 | BeginString | FIX protocol version in use |
| 9 | BodyLength | Number of bytes in message body |
| 10 | CheckSum | Three-digit checksum for message validation |
| 11 | ClOrdID | Client-assigned order identifier for the settlement order |
| 14 | CumQty | Cumulative quantity filled so far |
| 17 | ExecID | Unique identifier for this execution |
| 21 | HandlInst | Order handling instruction (automated, no intervention) |
| 31 | LastPx | Price of the last fill; 0 or 1 for settlement |
| 32 | LastQty | Position size being closed |
| 34 | MsgSeqNum | Sequence number of this message in the session |
| 35 | MsgType | 8 (Execution Report) |
| 37 | OrderID | Identifier assigned by broker/exchange for the settlement order |
| 38 | OrderQty | Total quantity of the settlement order |
| 39 | OrdStatus | Order Status |
| 40 | OrdType | Order Type |
| 44 | Price | 0 or 1 |
| 48 | SecurityID | Identifier for the underlying contract/instrument |
| 49 | SenderCompID | Identifier of the sending firm/system |
| 50 | SenderSubID | Sub-identifier of the sending system |
| 52 | SendingTime | Timestamp the message was sent |
| 54 | Side | Opposite of open position (1=Buy, 2=Sell) |
| 55 | Symbol | Prediction market instrument identifier |
| 56 | TargetCompID | Identifier of the receiving firm/system |
| 59 | TimeInForce | Duration the settlement order remains valid |
| 60 | TransactTime | Timestamp of the actual transaction/execution |
| 97 | LocateReqd | Whether a locate was required (relevant for short positions) |
| 107 | SecurityDesc | Name of the contract |
| 151 | LeavesQty | Remaining quantity left to be filled (0 once fully settled) |
| 167 | SecurityType | Type of instrument (e.g., option) being settled |
| 200 | MaturityMonthYear | Contract expiration month/year |
| 201 | PutOrCall | Indicates whether contract is a put or call |
| 204 | CustOrderCapacity | Capacity in which the order was entered (customer/firm) |
| 207 | SecurityExchange | Exchange where the contract is listed/settled |
| 447 | PartyIDSource | Source/type of identifier used for the party |
| 448 | PartyID | Identifier of the party involved in settlement (e.g., administrator) |
| 452 | PartyRole | Role of the identified party in the settlement process |
| 453 | NoPartyIDs | Number of party ID entries included in the message |
==== Example: Won (Long Position, Settles at 1) ====
<< 8 : 1=ExampleAccount| 8=FIX.4.2 | 9=451 | 10=180 | 11=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | 14=1 | 17=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854_0_T | 21=1 | 31=0 | 32=1 | 34=70 | 35=8 | 37=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | 38=1 | 39=2 | 48=Contract Ticker | 49=test | 50=T4FIX | 52=20260827-15:15:45.148 | 54=2 | 55=Market | 56=TradeBook | 59=0 | 60=20260827-15:15:45.147 | 97=Y | 107=Example Contract Name | 150=F | 151=0 | 167=OPT | 200=202608 | 201=1 | 204=0 | 207=Exchange Name | 447=D | 448=Administrator | 452=44 | 453=1 |
[9=451|35=8] EXECUTION: Market **SELL 1@1** | Order=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | Filled=1/1@0 | Remaining=0 | Status=Filled
==== Example: Lost (Long Position, Settles at 0) ====
<< 8 : 1=ExampleAccount| 8=FIX.4.2 | 9=451 | 10=180 | 11=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | 14=1 | 17=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854_0_T | 21=1 | 31=0 | 32=1 | 34=70 | 35=8 | 37=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | 38=1 | 39=2 | 48=Contract Ticker | 49=test | 50=T4FIX | 52=20260827-15:15:45.148 | 54=2 | 55=Market | 56=TradeBook | 59=0 | 60=20260827-15:15:45.147 | 97=Y | 107=Example Contract Name | 150=F | 151=0 | 167=OPT | 200=202608 | 201=1 | 204=0 | 207=Exchange Name | 447=D | 448=Administrator | 452=44 | 453=1 |
[9=451|35=8] EXECUTION: Market **SELL 1@0** | Order=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | Filled=1/1@0 | Remaining=0 | Status=Filled
==== Example: Won (Short Position, Settles at 0) ====
<< 8 : 1=ExampleAccount| 8=FIX.4.2 | 9=451 | 10=180 | 11=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | 14=1 | 17=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854_0_T | 21=1 | 31=0 | 32=1 | 34=70 | 35=8 | 37=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | 38=1 | 39=2 | 48=Contract Ticker | 49=test | 50=T4FIX | 52=20260827-15:15:45.148 | 54=2 | 55=Market | 56=TradeBook | 59=0 | 60=20260827-15:15:45.147 | 97=Y | 107=Example Contract Name | 150=F | 151=0 | 167=OPT | 200=202608 | 201=1 | 204=0 | 207=Exchange Name | 447=D | 448=Administrator | 452=44 | 453=1 |
[9=451|35=8] EXECUTION: Market **BUY 1@0** | Order=CB7ED23B-1D2F-4652-BE77-DF16DB3ED854 | Filled=1/1@0 | Remaining=0 | Status=Filled
===== P&L Calculation =====
Settlement P&L for a prediction market position is straightforward:
* **P&L per contract** = (Settlement Price - Entry Price) * Contract Multiplier * Quantity
* For a long at entry price 0.60 settling at 1: (1 - 0.60) * [multiplier] * qty = profit
* For a long at entry price 0.60 settling at 0: (0 - 0.60) * [multiplier] * qty = loss
**Note:** Confirm the contract multiplier for each prediction market instrument via the [[developers:markets|Instruments API]].