Распознавание открытой позиции в MQL5

 

Добрый день.

Нужна ваша помощь в правильном определении типом открытой  позиции.

Обнаружил вот такую вот ошибку.

по текущему коду, идет сравнение открытой позиции на Buy,  но в сейчас у меня открыта поза на SELL.

 if  (apos.PositionType () == POSITION_TYPE_BUY )
            {
                  while(PositionsTotal() > 0)
                    {
                     atrade.PositionClose(_Symbol);
                    } 
            }

 

Почему такая ерунда ?


Пробовал даже и такой вариант, не помогло. (В терминале отрыта поза на SELL)

         if(ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE)) == POSITION_TYPE_BUY)                        // почему то определяет как sell ?
            {
                  while(PositionsTotal() > 0)
                    {
                     atrade.PositionClose(_Symbol);
                    } 
            }
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
Файлы:
open_posa.jpg  216 kb
 

Пожалуйста вставляйте код правильно.

Зачем Вы применяете while - Вы хотите попасть в бесконечный цикл? Пример перебора позиций:

   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
***
              }
            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
***
              }
           }
 
Vladimir Karputov:

Пожалуйста вставляйте код правильно.

Зачем Вы применяете while - Вы хотите попасть в бесконечный цикл? Пример перебора позиций:

цикл While я использую что бы он закрыл все открытые позиции на BUY или SELL.

Спасибо вам. Сейчас протестирую.