Login Page - Create Account

Support Board


Date/Time: Tue, 09 Sep 2025 18:47:21 +0000



[Programming Help] - DTC binary protocol for OCO orders

View Count: 170

[2025-07-29 20:32:23]
User362280 - Posts: 1
Hello,

I am trying to figure out the paddings (locations and sizes) needed for creating the body of a binary message for OCO order submission via DTC protocol. I was able to figure the right structure for single orders/parent orders but I am stuck to find the right combinason for oco orders (and Yes I have enabled the server side oco and bracket orders and also I send the parent order just before the oco order).

The only documentation I found about this is:
https://www.sierrachart.com/DTC_Files/DTCProtocol.h
and
https://www.sierrachart.com/DTC_Files/DTCProtocolVLS.cpp


Is it possible to have any kind of working example (to mimic the structure) or more clear information of the required paddings, mapping ?


Thanks in advance for any help !

====================================================

This is the binary structure that I figured out (with all paddings removed):

body += fixed_string(symbol, 64) # Symbol (string 64 bytes)
body += fixed_string('', 16) # Exchange (string 16 bytes)

# --- Order 1: TP ---
body += fixed_string(client_order_id_tp, 32) # ClientOrderID_TP (string 32 bytes)
body += struct.pack('<i', 2) # OrderType1 (int32 4 bytes) = 2 (LIMIT)
body += struct.pack('<i', 1 if buy_sell == 2 else 2) # BuySell1 (int32 4 bytes)
body += struct.pack('<d', tp_price) # Price1_1 (double 8 bytes)
body += struct.pack('<d', 0.0) # Price2_1 (double 8 bytes)
body += struct.pack('<d', quantity) # Quantity_1 (double 8 bytes)

# --- Order 2: SL ---
body += fixed_string(client_order_id_sl, 32) # ClientOrderID_SL (string 32 bytes)
body += struct.pack('<i', 3) # OrderType_2 (int32 4 bytes) = 3 (STOP)
body += struct.pack('<i', buy_sell) # BuySell2 (int32 4 bytes)
body += struct.pack('<d', sl_price) # Price1_2 (double 8 bytes)
body += struct.pack('<d', 0.0) # Price2_2 (double 8 bytes)
body += struct.pack('<d', quantity) # Quantity_2 (double 8 bytes)

body += struct.pack('<i', 1) # TimeInForce (int32 4 bytes) unset: 0, Day: 1, GTC: 2
body += struct.pack('<q', 0) # GoodTillDateTime (int64 8 bytes)

body += fixed_string(TRADE_ACCOUNT, 32) # TradeAccount (string 32 bytes)
body += struct.pack('<B', 1) # IsAutomatedOrder (uint8 1 byte) Manual: 0 Auto: 1

body += fixed_string(parent_id, 32) # ParentTriggerClientOrderID
body += fixed_string(comment, 48) # FreeFormText
body += struct.pack('<i', 0) # OpenOrClose = TRADE_UNSET
body += struct.pack('<b', 0) # PartialFillHandling = UNSET
body += struct.pack('<B', 0) # UseOffsets = false

body += struct.pack('<d', 0.0) # OffsetFromParent1
body += struct.pack('<d', 0.0) # OffsetFromParent2
body += struct.pack('<B', 0) # MaintainSamePricesOnParentFill

body += fixed_string('', 16) # Price1_1AsString
body += fixed_string('', 16) # Price2_1AsString
body += fixed_string('', 16) # Price1_2AsString
body += fixed_string('', 16) # Price2_2AsString
[2025-07-31 20:59:45]
Sierra_Chart Engineering - Posts: 20852
Did you want to use, Binary or Binary VLS encoding? What programming language are you using? If it is C++, then you just need to include the header files. This is all.
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, use the Teton service:
Sierra Chart Teton Futures Order Routing
Date Time Of Last Edit: 2025-07-31 20:59:56

To post a message in this thread, you need to log in with your Sierra Chart account:

Login

Login Page - Create Account