Закрытие выбранной позиции в MQL5 на Hedge счетё.

 

Всех приветствую, столкнулся с проблемой закрытия выбранной позиции на Hedge счёте!
Задача была в том, чтобы советник выбирал конкретную позицию, и её самостоятельно закрывал без SL и TP, а как при нажатии кнопки "закрыть позицию" из терминала.
Но на стандартный закрывающий позицию код из справочника, терминал никак не реагирует. Закрывать позицию встречной мне не нужно...
Вариант который я нашел на просторах форума (который частично совпадает с вариантом из справочника) тоже не работает, на его основе написал следующий код, но когда выполняются условия для закрытия позиции - Result.retcode даёт  код 10030 не верный тип исполнения...
Что делать в данной ситуации не понимаю. Профи, прошу помочь!

               ENUM_POSITION_TYPE xType    = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);            // Определяем тип выбранной позиции 
               //---//
         
                  //---//
                  if(xType == POSITION_TYPE_BUY)   {                                                           // Фильтр сделок по типу:
                     mRequest.type =ORDER_TYPE_SELL;                                                        // Вариант если выбранная сделка = Buy
                     mRequest.price= xBid;                                                                  // Цена закрытия для сделки Buy
                    } else {
                     mRequest.type =ORDER_TYPE_BUY;                                                         // Вариант если выбранная сделка = Sell
                     mRequest.price= xAsk;                                                                  // Цена закрытия для сделки Sell
                    }//---//
                    
                     //---//---//
                     PositionSelectByTicket(xT_1);                                                          // Переменная с тикетом позиции
                        xMagic   = PositionGetInteger(POSITION_MAGIC);  
                        xSymbol  = PositionGetString(POSITION_SYMBOL);  
                        xLot     = Lot * xVolume_Mod;
                           //---//
                           mRequest.action      = TRADE_ACTION_DEAL;                                           // Тип действия
                           mRequest.position    = xT_1;                                                        // Выбранная сделка из переменной    
                           mRequest.magic       = xMagic;                                                      // Magic советника
                           mRequest.symbol      = xSymbol;                                                     // По текущему символу позиции
                           mRequest.volume      = xLot;                                                        // Расчётный объём 
                           mRequest.deviation   = Deviation;                                                   // Проскальзывание
                              //---//
                              bool  GO_xClose = OrderSend(mRequest,mResult);                                   // Исполняем закрытие  сделки
                                 if(GO_xClose)  {                                                              // Если исполнилось закрытие  сделки:
                                          xT_1 = 0;                                                            // Очищаем статичную переменную с тикером  сделки
                                          if(Alert_Go == true)  Alert(mResult.retcode, ": Закрыта позиция ", xType, "!!  на инструменте ", _Symbol, "!!    Объём = ", xLot);
                               } else {   if(Alert_Go == true)  Alert("Ошибка закрытия  позиции ", xType, "!!! Код ошибки = ", mResult.retcode); }
                               //---//---//  
 
лучше посмотреть что ответный код даст после отправки 
 
Fast235 #:
лучше посмотреть что ответный код даст после отправки 

Что имеется ввиду  "после отправки " ??

 
Nikolai Gushchenko #:

Что имеется ввиду  "после отправки " ??

номер ошибки.

по номеру ошибки можно определить, что случилось.

 
Укажите правильный тип исполнения 
 
Nikolai Gushchenko:

Что делать в данной ситуации

//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
CTrade         m_trade;
//+------------------------------------------------------------------+
bool PositionClose()
  {
   for(int i = PositionsTotal() - 1; i >= 0; i--)
      if(PositionGetTicket(i))
         if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == Magic)
            if(!m_trade.PositionClose(PositionGetInteger(POSITION_TICKET)))
               return(false);
   return(true);
  }
//+------------------------------------------------------------------+

На любых счетах закрывает нормально.

Судя по коду, тикет закрываемой позиции вам известен. Значит для закрытия позиции, вам  достаточно одной строки)

m_trade.PositionClose(xT_1);
 
Rashid Umarov #:
Укажите правильный тип исполнения 

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

 
Aleksandr Slavskii #:

На любых счетах закрывает нормально.

Спасибо за идею, попробую интегрировать код из CTrade 

 
Nikolai Gushchenko #:

Спасибо за идею, попробую интегрировать код из CTrade 

В CTrade обратите внимание на bool CTrade::FillingCheck(const string symbol) и режимы заполнения. Именно об этом говорит Рашид.

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5