Как закрыть позиции без перебора в советнике?

 
Доброго времени суток. Я обращаюсь с вопросом в надежде, что кто то знает как реализовать этот момент в советнике) В MT5 если кликнуть правой кнопкой мыши на открытые позиции, можно найти вкладку Групповые операции- Закрыть все позиции. Где найти эту функцию в mql5 , чтобы не использовать перебор всех позиций для закрытия? 
 
Anton Novokhatskii:
Доброго времени суток. Я обращаюсь с вопросом в надежде, что кто то знает как реализовать этот момент в советнике) В MT5 если кликнуть правой кнопкой мыши на открытые позиции, можно найти вкладку Групповые операции- Закрыть все позиции. Где найти эту функцию в mql5 , чтобы не использовать перебор всех позиций для закрытия? 

Написать свою функцию ))

Это ведь несложно на самом деле и именно так это реализовано в терминале. Про быстродействие не стоит беспокоиться. Все равно выполнение одной торговой операции займет намного больше времени, чем непосредственно перебор позиций.

 
Этот вопрос я уже задавал давненько) Ни одна функция не срабатывает быстрее метода который я описал в вопросе. Это большая проблема, если позиций много, поэтому все еще ищу ответ на этот вопрос)
 
Anton Novokhatskii #:
Этот вопрос я уже задавал давненько) Ни одна функция не срабатывает быстрее метода который я описал в вопросе. Это большая проблема, если позиций много, поэтому все еще ищу ответ на этот вопрос)

Каким образом измеряли? Скорее всего, проверенные функции попросту закрывали одну позицию, а потом ждали следующего тика. То есть дело в коде, а не в волшебной палочке от MQ.

 
void CloseAllPositions()
  { 
      for(int i=0; i<PositionsTotal(); i++)
         if(m_position.SelectByIndex(i))
           {
            trade.PositionClose(m_position.Ticket());
           }
  }

Сейчас для закрытия позиций использую такую функцию. Измерять не приходится, когда начинается закрытие, видно что сильно отстает он инструмента mt. Может у вас есть на примере функция проще?

 
Если на моем ПК просто видна разница во времени закрытия, то к примеру на виртуальном ПК у моего брокера дело обстоит хуже) Если я использую глобальное закрытие от mt, то позиции закрываются спокойно, но если позиций много, в той же ситуации при использовании моей функции для закрытия, Терминал может попросту зависнуть пока закрываются позиции) Т.е. на виртуальных хостингах эта проблема становится еще заметнее(
 
Anton Novokhatskii #:

Сейчас для закрытия позиций использую такую функцию. Измерять не приходится, когда начинается закрытие, видно что сильно отстает он инструмента mt. Может у вас есть на примере функция проще?

У вас в ней ошибка, похоже. Поэтому она работает не так, как вы рассчитываете.
Допишу позже, в чем она.
 
Anton Novokhatskii #:

Сейчас для закрытия позиций использую такую функцию. Измерять не приходится, когда начинается закрытие, видно что сильно отстает он инструмента mt. Может у вас есть на примере функция проще?

Обычно закрываю при помощи такого цикла:

      for(int i=PositionsTotal()-1; i>=0; i--)
        {
         ulong position_ticket=PositionGetTicket(i);
         if(PositionGetString(POSITION_SYMBOL)==_Symbol &&
            PositionGetInteger(POSITION_MAGIC)==Magic_Number)
            trade.PositionClose(position_ticket);
        }

А вот без перебора в цикле, как-то не задумывался.

С уважением, Владимир.

 
Anton Novokhatskii #:

Сейчас для закрытия позиций использую такую функцию. Измерять не приходится, когда начинается закрытие, видно что сильно отстает он инструмента mt. Может у вас есть на примере функция проще?

Цикл не в ту сторону
 
MrBrooklin #:

Обычно закрываю при помощи такого цикла:

А вот без перебора в цикле, как-то не задумывался.

С уважением, Владимир.

Ну, тут получается такой же цикл как и у меня только я не проверяю символ и магик.

 
Artyom Trishkin #:
Цикл не в ту сторону

А какая разница? что в одну что в другую сторону смысл будет один, просто закрываться будет в другую сторону

Причина обращения: