Login Page - Create Account

Support Board


Date/Time: Tue, 26 Nov 2024 06:23:19 +0000



Post From: OCO gets canceled after scaling out ASCIL

[2023-12-29 08:28:47]
User888583 - Posts: 20
Hi, I am working on ASCIL study that enters the trade with several OCO groups and once time comes, scale out one or more contracts out of it.

For example: I go long 3 contracts with 3 respective TP/SL OCO groups:

// during sc.SetDefaults
sc.AllowMultipleEntriesInSameDirection = true;
sc.AllowOnlyOneTradePerBar = false;
sc.CancelAllWorkingOrdersOnExit = true;
sc.AllowEntryWithWorkingOrders = true;

// code to execute new trade
s_SCNewOrder NewOrder;
NewOrder.OrderQuantity = 3;
NewOrder.OrderType = SCT_ORDERTYPE_MARKET;
NewOrder.Symbol = SCString("ES");
NewOrder.Target1Offset = 3;
NewOrder.AttachedOrderTarget1Type = SCT_ORDERTYPE_LIMIT;
NewOrder.OCOGroup1Quantity = 1;
NewOrder.Target2Offset = 4;
NewOrder.AttachedOrderTarget2Type = SCT_ORDERTYPE_LIMIT;
NewOrder.OCOGroup2Quantity = 1;
NewOrder.Target3Offset = 5;
NewOrder.AttachedOrderTarget3Type = SCT_ORDERTYPE_LIMIT;
NewOrder.OCOGroup3Quantity = 1;
Result = this->sierra.BuyEntry(NewOrder);

I have one trade with 3 separate OCO for TP/SL.

Now I want to reduce exposure, I am executing following code to take one trade:

s_SCNewOrder NewOrder;
NewOrder.OrderQuantity = 1;
NewOrder.OrderType = SCT_ORDERTYPE_MARKET;
NewOrder.Symbol = SCString("ES");

int Result = 0;
Result = this->sierra.BuyExit(NewOrder); // returns 1
As a result, I have 2 contracts open, but two remaining two OCO TP/SL are closed as well.

I am not sure what I am doing wrong here or which API I should use instead if I want to scale out keeping OCO.