| Both sides previous revision Previous revision Next revision | Previous revision |
| developers:websocket:orders [2026/01/23 20:15] – chad | developers:websocket:orders [2026/03/05 16:43] (current) – [AutoOCO Order] frank |
|---|
| An AutoOCO Order is a batch of three orders: | An AutoOCO Order is a batch of three orders: |
| * A Trigger Order that initiates the trade. | * A Trigger Order that initiates the trade. |
| * Two OCO Orders (Take Profit and Stop Loss) that execute based on the trigger order's fill price. | * Two OCO Orders (Take Profit and Stop Loss) that are submitted with prices that are differentials to the fill price of the trigger order. |
| |
| If the Trigger Order fills, the OCO Orders are submitted. If the OCO Orders begin filling, any remaining volume in the Trigger Order is canceled. | If the Trigger Order fills, the OCO Orders are submitted. If the OCO Orders begin filling, any remaining volume in the Trigger Order is canceled. |
| |
| <code> | <code> |
| OrderSubmit { | { |
| UserId = "efda0709-af12-4b65-8971-5089edb4aaf0", | "UserId": "", |
| AccountId = "448c9ddd-6a50-4852-85ea-aad3b6d60620", | "HasUserId": false, |
| MarketId = "XCME_C ZC (H25)", | "AccountId": "60B90323-E72A-4BBF-A129-3882019E622C", |
| OrderLink = OrderLink.AutoOCO, | "MarketId": "XCME_Eq ES (H26)", |
| Orders = [ | "OrderLink": 2, |
| { | "ManualOrderIndicator": true, |
| BuySell = BuySell.Buy, | "Orders": [ |
| PriceType = PriceType.Limit, | { |
| TimeType = TimeType.Normal, | "BuySell": 1, |
| Volume = 1, | "PriceType": 1, |
| LimitPrice = "2375.00" | "TimeType": 0, |
| }, | "Volume": 1, |
| { | "MaxShow": 0, |
| BuySell = BuySell.Sell, | "HasMaxShow": false, |
| PriceType = PriceType.Limit, | "MaxVolume": 0, |
| TimeType = TimeType.Normal, | "HasMaxVolume": false, |
| Volume = 0, | "LimitPrice": { |
| LimitPrice = "2380.00" | "Value": "685800" |
| }, | }, |
| { | "StopPrice": null, |
| BuySell = BuySell.Sell, | "TrailDistance": null, |
| PriceType = PriceType.StopMarket, | "Tag": "", |
| TimeType = TimeType.Normal, | "HasTag": false, |
| Volume = 0, | "ActivationType": 0, |
| StopPrice = "2365.00" | "HasActivationType": false, |
| } | "ActivationData": null |
| ] | }, |
| | { |
| | "BuySell": -1, |
| | "PriceType": 1, |
| | "TimeType": 2, |
| | "Volume": 0, |
| | "MaxShow": 0, |
| | "HasMaxShow": false, |
| | "MaxVolume": 0, |
| | "HasMaxVolume": false, |
| | "LimitPrice": { |
| | "Value": "250" |
| | }, |
| | "StopPrice": null, |
| | "TrailDistance": null, |
| | "Tag": "", |
| | "HasTag": false, |
| | "ActivationType": 1, |
| | "HasActivationType": true, |
| | "ActivationData": null |
| | }, |
| | { |
| | "BuySell": -1, |
| | "PriceType": 2, |
| | "TimeType": 2, |
| | "Volume": 0, |
| | "MaxShow": 0, |
| | "HasMaxShow": false, |
| | "MaxVolume": 0, |
| | "HasMaxVolume": false, |
| | "LimitPrice": null, |
| | "StopPrice": { |
| | "Value": "125" |
| | }, |
| | "TrailDistance": null, |
| | "Tag": "", |
| | "HasTag": false, |
| | "ActivationType": 1, |
| | "HasActivationType": true, |
| | "ActivationData": null |
| | } |
| | ] |
| } | } |
| </code> | </code> |
| |
| |
| | ===== Order Status Summary Messages Reference ===== |
| | |
| | When displaying order status to end users, combining the ''OrderStatus'' and <del>OrderChange</del> fields provides more meaningful feedback than either field alone. The following table maps these field combinations to user-friendly status messages. |
| |
| | ^ Order Status ^ Order Change ^ Status Summary Message ^ Notes ^ |
| | | **Finished States** |||| |
| | | Finished | ''PullFailed'', ''PullRejected'', ''PullRiskFailed'' | "Cancel Failed" | Includes StatusDetail | |
| | | Finished | ''PullSuccess'', ''PullSent'', ''PullRiskSuccess'' //(with fills)// | "Completed, Partial Fill" | When TotalFillVolume ≠ 0 | |
| | | Finished | ''PullSuccess'', ''PullSent'', ''PullRiskSuccess'' //(no fills)// | "Canceled" | When TotalFillVolume = 0 | |
| | | Finished | ''TradeCompleted'' //(partial)// | "Completed, Partial Fill" | When TotalFillVolume < CurrentVolume | |
| | | Finished | ''TradeCompleted'' //(full)// | "Completed, Filled" | When TotalFillVolume = CurrentVolume | |
| | | Finished | ''StatusRequestFailed'', ''StatusRequestRejected'', ''StatusRequestRiskFailed'', ''StatusRequestRiskSuccess'', ''StatusRequestSent'', ''StatusRequestSuccess'', ''TagFailed'', ''TagSuccess'' //(partial)// | "Completed, Partial Fill, {OrderChange}" | When TotalFillVolume < CurrentVolume | |
| | | Finished | ''StatusRequestFailed'', ''StatusRequestRejected'', ''StatusRequestRiskFailed'', ''StatusRequestRiskSuccess'', ''StatusRequestSent'', ''StatusRequestSuccess'', ''TagFailed'', ''TagSuccess'' //(full)// | "Completed, Filled, {OrderChange}" | When TotalFillVolume = CurrentVolume | |
| | | Finished | ''RevisionRiskFailed'' //(filled)// | "Completed, Filled, {OrderChange}" | When TotalFillVolume = CurrentVolume | |
| | | Finished | ''TradeBusted'' | "Completed, {OrderChange}" | | |
| | | Finished | ''SubmissionSuccess'' //(RFQ only)// | "Completed" | Only for PriceType.RFQ | |
| | | **Rejected States** |||| |
| | | Rejected | ''StatusRequestFailed'', ''StatusRequestRejected'', ''StatusRequestRiskFailed'', ''StatusRequestRiskSuccess'', ''StatusRequestSent'', ''StatusRequestSuccess'' | "Rejected, {OrderChange}" | Includes StatusDetail | |
| | | Rejected | //(Other changes)// | "Rejected" | Includes StatusDetail | |
| | | **Working States** |||| |
| | | Working | ''PullRiskSuccess'', ''PullSent'', ''PullSuccess'' | "Canceling..." | | |
| | | Working | ''RevisionSent'', ''RevisionRiskSuccess'' | "Revising..." | | |
| | | Working | ''RevisionSuccess'' | "Working, Revised" | | |
| | | Working | ''RevisionFailed'', ''RevisionRejected'', ''RevisionRiskFailed'' | "Working, Revision Failed" | Includes StatusDetail | |
| | | Working | ''PullFailed'', ''PullRejected'', ''PullRiskFailed'' | "Working, Cancel Failed" | Includes StatusDetail | |
| | | Working | ''Trade'', ''SubmissionSent'', ''SubmissionSuccess'', ''SubmissionRiskSuccess'' | "Working..." | | |
| | | Working | ''Handover'' | "Working, Handover" | | |
| | | Working | ''Rollover'' | "Working, Rollover" | | |
| | | Working | ''StatusRequestFailed'', ''StatusRequestRejected'', ''StatusRequestRiskFailed'', ''StatusRequestRiskSuccess'', ''StatusRequestSent'', ''StatusRequestSuccess'', ''TagFailed'', ''TagSuccess'' | "Working, {OrderChange}" | | |
| | | Working | //(Any change with fills)// | "{Base Message}, Partial Fill" | Appended when TotalFillVolume > 0 | |
| | | **None (Pre-Submission) States** |||| |
| | | None | None | "Submitting..." | | |
| | | None | ''SubmissionRiskSuccess'' | "Submitting to Exchange" | | |
| | | None | ''SubmissionRejected'', ''SubmissionRiskRejected'' | "Submission Rejected" | | |
| | | None | ''SubmissionFailed'' | "Submission Failed" | | |
| | | None | ''SubmissionSent'', ''SubmissionSuccess'' | "Submission Sent" | | |
| | | **Held States** |||| |
| | | Held | //(Any)// | "Held on Server..." (Real Market) \\ "Held on Client..." (Non-Real Market) | | |