Support Board
Date/Time: Fri, 31 Oct 2025 12:38:19 +0000
[Programming Help] - Issues about sc.CancelAllOrders()
View Count: 569
| [2024-07-10 14:53:20] | 
| Tony - Posts: 640 | 
| Hi, I am trying to cancel stop order when there is no position by using sc.CancelAllOrders(), everything works great until I press "Insert" key to reload and recalculate the chart, the stop order disappeared even I still had a position, so I tried to fix the issue by doing this: if (sc.IsChartDataLoadingInChartbook() || sc.IsFullRecalculation || sc.ChartIsDownloadingHistoricalData(sc.ChartNumber)) { // do something } else { s_SCPositionData PositionData; sc.GetTradePosition(PositionData); if (PositionData.AveragePrice == 0.0) { sc.CancelAllOrders(); } } But the stop order still got canceled after reload and recalculation while I had an open position. Wonder what I had missed, Thanks! P.S. Originally, the stop order also got canceled after I remove and add this custom study, that part has been fixed by adding the code showed above. Date Time Of Last Edit: 2024-07-10 15:25:58  | 
| [2024-07-10 15:09:35] | 
| ForgivingComputers.com - Posts: 1150 | 
| // Generally you want to return in this conditional: if (sc.IsFullRecalculation || sc.ChartIsDownloadingHistoricalData(sc.ChartNumber)) { return; } // Then check if in a position and working orders s_SCPositionData PositionData; sc.GetTradePosition(PositionData); int Open_Position = PositionData.PositionQuantity; if (!Open_Position && PositionData.WorkingOrdersExist) { sc.CancelAllOrders(); } | 
| [2024-07-10 15:20:16] | 
| Tony - Posts: 640 | 
| Hi bradh, Thanks for your reply, I tried to return that condition, I still have the same issue. One thing had been fixed is that after I remove/add this study or release/load DLL, the stop order will not be canceled, which is what I wanted. | 
| [2024-07-10 15:35:27] | 
| User431178 - Posts: 804 | 
| As well as PositionData.WorkingOrdersExist there is also PositionData.NonAttachedWorkingOrdersExist Which seems might be appropriate? | 
| [2024-07-10 17:10:03] | 
| ForgivingComputers.com - Posts: 1150 | 
| The first one is all working orders, the second is only Non-Attached Orders, so I would use the first one. | 
| [2024-07-10 19:46:09] | 
| Tony - Posts: 640 | 
| Hi bradh and User431178, Thanks so much for the feedback, unfortunately I tried all the possible solutions, none of them works. I get around the issue by delaying the open-position check for a few loops right after reload / recalculation: static int LoopCount {0}; LoopCount++; So this number will be increased by 1 per loop through the lifespan of the study, but will be reset to 0 every time reload or recalculate happened. And open-position check only happens when the value of LoopCount is greater than a certain number, i.e. 3 Now the stop order will never be canceled when there is an open position, as I expected. I think I misunderstood with either of these 3 function / variable: sc.IsChartDataLoadingInChartbook() sc.IsFullRecalculation sc.ChartIsDownloadingHistoricalData(sc.ChartNumber) I hope engineering team will have a better solution, my code looks ugly now. Date Time Of Last Edit: 2024-07-11 05:44:45  | 
To post a message in this thread, you need to log in with your Sierra Chart account:
