Ejemplo n.º 1
0
        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);
                }
            }
        }