developers:predictionmarkets

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
developers:predictionmarkets [2026/04/29 19:45] – created chaddevelopers:predictionmarkets [2026/08/27 19:07] (current) chris
Line 1: Line 1:
-Comin soon+====== 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]''
 + 
 +<WRAP callout> 
 +**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. 
 +</WRAP> 
 + 
 +===== 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) ==== 
 + 
 +<code> 
 +<< 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 
 +</code> 
 + 
 +==== Example: Lost (Long Position, Settles at 0) ==== 
 + 
 +<code> 
 +<< 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 
 +</code> 
 + 
 +==== Example: Won (Short Position, Settles at 0) ==== 
 + 
 +<code> 
 +<< 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 
 +</code> 
 + 
 +===== 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 
 + 
 +<WRAP callout> 
 +**Note:** Confirm the contract multiplier for each prediction market instrument via the [[developers:markets|Instruments API]]. 
 +</WRAP> 
 + 
  • developers/predictionmarkets.1777491930.txt.gz
  • Last modified: 2026/04/29 19:45
  • by chad