Ошибки, баги, вопросы - страница 2175

 

Господа, возникла непонятная для меня ошибка. Кто понимает в чем проблема, плииз, отзовитесь.

При компиляции ниже представленного кода возникает ошибка: 'ORDER_TYPE_BUY' - cannot convert enum;  'ORDER_TYPE_SELL' - cannot convert enum

Аналогичный код в mql4 компилируется без проблем. Похожие примеры встречал в других советниках на mql5. Но у меня этот код сейчас не компилируется. Понятия не имею почему так и что нужно исправить.

//+------------------------------------------------------------------+
int Fun()
  {
   int res;

   int total=PositionsTotal(); // количество открытых позиций   
//--- перебор всех открытых позиций
   for(int i=total-1; i>=0; i--)
     {
      //--- параметры ордера
      ulong  position_ticket=PositionGetTicket(i);  // тикет позиции                                  

      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // тип позиции      

      if(type!=ORDER_TYPE_BUY && type!=ORDER_TYPE_SELL) continue;

      switch(type)
        {
         case ORDER_TYPE_BUY:
            res=1;
            break;

         case ORDER_TYPE_SELL:
            res=2;
            break;
        }
      return(res);

     }

   return(3);
  }
//+------------------------------------------------------------------+

 
if (type !=POSITION_TYPE_BUY &&  type!=POSITION_TYPE_SELL) continue;  
 
Sergiy Riehl:

Господа, возникла непонятная для меня ошибка. Кто понимает в чем проблема, плииз, отзовитесь.

При компиляции ниже представленного кода возникает ошибка: 'ORDER_TYPE_BUY' - cannot convert enum;  'ORDER_TYPE_SELL' - cannot convert enum

Аналогичный код в mql4 компилируется без проблем. Похожие примеры встречал в других советниках на mql5. Но у меня этот код сейчас не компилируется. Понятия не имею почему так и что нужно исправить.


Будьте добры, вставляйте код правильно:


Ваш код исправил за вас в вашем посте

 
Sergiy Riehl:

Господа, возникла непонятная для меня ошибка. Кто понимает в чем проблема, плииз, отзовитесь.

При компиляции ниже представленного кода возникает ошибка: 'ORDER_TYPE_BUY' - cannot convert enum;  'ORDER_TYPE_SELL' - cannot convert enum

Аналогичный код в mql4 компилируется без проблем. Похожие примеры встречал в других советниках на mql5. Но у меня этот код сейчас не компилируется. Понятия не имею почему так и что нужно исправить.



 ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // тип позиции      

      if(type!=ORDER_TYPE_BUY && type!=ORDER_TYPE_SELL) continue;


Вы присваиваете тип POSITION_TYPE 

и сравниваете с ORDER_TYPE 

 
Sergiy Riehl:

Господа, возникла непонятная для меня ошибка. Кто понимает в чем проблема, плииз, отзовитесь.

При компиляции ниже представленного кода возникает ошибка: 'ORDER_TYPE_BUY' - cannot convert enum;  'ORDER_TYPE_SELL' - cannot convert enum

Аналогичный код в mql4 компилируется без проблем. Похожие примеры встречал в других советниках на mql5. Но у меня этот код сейчас не компилируется. Понятия не имею почему так и что нужно исправить.


Путаете ордера (в старом языке) и позиции в MQL5.

Тип позиции может быть ( ENUM_POSITION_TYPE )

Идентификатор

Описание

POSITION_TYPE_BUY

Покупка

POSITION_TYPE_SELL

Продажа


То есть ИЛИ "POSITION_TYPE_BUY" ИЛИ "POSITION_TYPE_SELL". Другого быть не может.

Следовательно Ваш код примет вид:

   for(int i=total-1; i>=0; i--)
     {
      //--- параметры позиции
      ulong  position_ticket=PositionGetTicket(i);  // тикет позиции                                  

      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);  // тип позиции      

      switch(type)
        {
         case POSITION_TYPE_BUY:
            res=1;
            break;

         case POSITION_TYPE_SELL:
            res=2;
            break;
        }
      return(res);
     }
   return(3);
 
Всем спасибо. Всё понял. 
 

Проблема. Использую стандартный класс  CTrade::SellStop

При добавлении ордера передаю expiration = TimeCurrent()+3600; (время проверил - отправляется правильно)

Удаление ордера не происходит.

Может что-то еще надо дописывать, вроде ж класс стандартный.

Заранее спасибо

 
Anton Ohmat:

Проблема. Использую стандартный класс  CTrade::SellStop

При добавлении ордера передаю expiration = TimeCurrent()+3600;

Удаление ордера не происходит.

Может что-то еще надо дописывать, вроде ж класс стандартный.

Заранее спасибо

Что передаёте в

type_time=ORDER_TIME_GTC

[in]  Тип истечения срока действия ордера из перечисления ENUM_ORDER_TYPE_TIME.

?

 
Vladimir Karputov:

Что передаёте в

type_time=ORDER_TIME_GTC

[in]  Тип истечения срока действия ордера из перечисления ENUM_ORDER_TYPE_TIME.

?

Капец. СПАСИБО
 
не публикуются скриншоты из терминала на сайт...