Стандартная библиотека, CTrade - PositionClose не работает - страница 2

 

Вот пример перебора списка позиций, выбор позиции по индексу, далее закрытие по тикету. Если ошибка - то распечатывается описание ошибки (ResultRetcodeDescription). 

//+------------------------------------------------------------------+
//| Close all positions                                              |
//+------------------------------------------------------------------+
void CloseAllPositions(void)
  {
   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_trade.PositionClose(m_position.Ticket())) // close a position by the specified m_symbol
                  if(InpPrintLog)
                     Print(__FILE__," ",__FUNCTION__,", ERROR: ","BUY PositionClose ",m_position.Ticket(),", ",m_trade.ResultRetcodeDescription());
              }
            if(m_position.PositionType()==POSITION_TYPE_SELL)
              {
               if(!m_trade.PositionClose(m_position.Ticket())) // close a position by the specified m_symbol
                  if(InpPrintLog)
                     Print(__FILE__," ",__FUNCTION__,", ERROR: ","SELL PositionClose ",m_position.Ticket(),", ",m_trade.ResultRetcodeDescription());
              }
           }
  }

Интересно, что покажет у Вас метод описания ошибки.

 
Александр Кувакин #:

ну это очень странно когда пытаешься дать обратную связь чтобы улучшить СБ, видимо никто никому это не надо

Vladimir Karputov #:
Используйте стандарт переборах позиции в цикле и выбор позиции через Тикет позиции. Пример сейчас дать не могу к сожалению.

Я могу, Владимир - благо воспользовался Вашим примером вчера - с кодебазе трала(Вас от души благодарю!)

вот (взяли по индексу - закрыли):

участки перебора и закрытия - все работает супер - сейчас тестирую:

Александр - пользуйтесь! Перебор надо с конца вначало - мне надо крыть первый поэтому цикл сначала позиций к крайней свежей!

 for(i=0; i<PositionsTotal(); i++)
         //for(i = PositionsTotal()-1; i>=0; i--)
            if(a_position.SelectByIndex(i))
               if(a_position.Symbol()==Symbol() && a_position.Magic()==Magic)
                  if(Magic==OrderGetInteger(ORDER_MAGIC))  
                 {
                  //... и переведен в бу (выставлен СЛ))
                  if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && PositionGetDouble(POSITION_SL) > 0)
                    {
 if(!trade.PositionClose(_Symbol))
                          {
                           //--- сообщим о неудаче
                           Print(" неудачное частичное закрытие (ПОЗИЦИИ В ЦИКЛЕ buy):  Ошибка (Код возврата):",trade.ResultRetcode(),
                                 " Описание кода: ",trade.ResultRetcodeDescription());
                          }
                        else
                          {
                           Print("Частичное закрытие (ПОЗИЦИИ В ЦИКЛЕ buy): Метод выполнен успешно. Код возврата = ",trade.ResultRetcode(),
                                 " (",trade.ResultRetcodeDescription(),")");
                           Virt_Tral_Price_Close_B = 0; // сбрасываем значение виртуального СЛ
                          }
                        break; // закрыли самую первую позицию по списку по частичному закрытию - и вышли - ждем дальше сработки трала
                       }
                     else
                       {
                        //  Print(" Не открываем больше СЕЛЛ, в связи с превышением  N_max_S: ", N_max_S);
                       }
                    }

https://www.mql5.com/ru/articles/138



Как использовать торговые классы Стандартной библиотеки при написании советника
Как использовать торговые классы Стандартной библиотеки при написании советника
  • www.mql5.com
В статье рассказывается о том, как использовать основной функционал торговых классов Стандартной библиотеки при написании советников, в которых применяется открытие, закрытие и модификация позиции, проверка свободной маржи перед размещением торговых ордеров, размещение и удаление отложенных ордеров. Показано, как использовать торговые классы для получения свойств ордеров и сделок.
 
всем спасибо, воспользуюсь