private void CheckStaleOrders() { List <int> stalePositions = null; try { // позиции, мастер - ордера по которым закрыты stalePositions = GetStaleOrders(); } catch (Exception ex) { logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogCheckStaleOrdersError, 1000 * 60 * 15, "Ошибка в CheckStaleOrders(): " + ex); } if (stalePositions == null || stalePositions.Count == 0) { return; } logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogStaleOrdersFound, 1000 * 60 * 10, "CheckStaleOrders({0})", stalePositions.Count); // отправить пачку запросов на закрытие позиций const int maxRequestsInPack = 15; for (var i = 0; i < stalePositions.Count; i += maxRequestsInPack) { var count = (i + maxRequestsInPack) < stalePositions.Count ? maxRequestsInPack : stalePositions.Count - i; var subQuery = stalePositions.GetRange(i, count).ToArray(); try { serverProxy.SendCloseRequests(subQuery, PositionExitReason.ClosedBySignal); } catch (Exception ex) { logNoFlood.LogMessageFormatCheckFlood(LogEntryType.Error, LogCheckStaleOrdersExecuteError, 1000 * 60 * 15, "Ошибка в CheckStaleOrders() - закрытие ордеров: " + ex); } } }