Почему PositionGetInteger(POSITION_TYPE) возвращает 0 ?

 
if(PositionSelect(symbol)==true)
     {
      double profit = PositionGetDouble(POSITION_PROFIT);
      long   type   = PositionGetInteger(POSITION_TYPE);
      double vol    = PositionGetDouble(POSITION_VOLUME);
     

FileWrite(fileHandle,"Поза выбрана profit = "+profit+"  type= "+type+" vol="+vol);

     }

результат файла лога

Поза выбрана profit = 280.5  type= 0 vol=0.6

type = 0 ?????? 


при тестировании эксперта

 
snik_666:

результат файла лога

Поза выбрана profit = 280.5  type= 0 vol=0.6

type = 0 ?????? 


при тестировании эксперта

POSITION_TYPE_BUY

Покупка   =0

POSITION_TYPE_SELL

Продажа    =1

 

MQL4   так ....

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
Manov:

POSITION_TYPE_BUY

Покупка   =0

POSITION_TYPE_SELL

Продажа    =1

 

MQL4   так ....

оно и в MQL5 не изменилось, покупка = 0, продажа = 1, далее уже идут соответствующие отложенные ордера, хотя наверно у отложенных ордеров свои индексы и тоже начинаются с нуля, не проверял, поэтому точно утверждать не могу.
 
sergey1294:
оно и в MQL5 не изменилось, покупка = 0, продажа = 1, далее уже идут соответствующие отложенные ордера, хотя наверно у отложенных ордеров свои индексы и тоже начинаются с нуля, не проверял, поэтому точно утверждать не могу.

В данном случае это идентификаторы свойств позиции - ENUM_POSITION_TYPE.

Если говорить об ENUM_POSITION_TYPE то там только это


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

Описание

POSITION_TYPE_BUY

Покупка

POSITION_TYPE_SELL

Продажа

 

За подобные свойства ордеров отвечает другой идентификатор - ENUM_ORDER_TYPE. В нем тоже все нумеруется с 0

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

Описание

ORDER_TYPE_BUY

Рыночный ордер на покупку

ORDER_TYPE_SELL

Рыночный ордер на продажу

ORDER_TYPE_BUY_LIMIT

Отложенный ордер Buy Limit

ORDER_TYPE_SELL_LIMIT

Отложенный ордер Sell Limit

ORDER_TYPE_BUY_STOP

Отложенный ордер Buy Stop

ORDER_TYPE_SELL_STOP

Отложенный ордер Sell Stop

ORDER_TYPE_BUY_STOP_LIMIT

По достижении цены ордера выставляется отложенный ордер Buy Limit по цене StopLimit

ORDER_TYPE_SELL_STOP_LIMIT

По достижении цены ордера выставляется отложенный ордер Sell Limit по цене StopLimit

 
snik_666:

результат файла лога

Поза выбрана profit = 280.5  type= 0 vol=0.6

type = 0 ?????? 


при тестировании эксперта

Правильней так (чтобы лишних вопросов не возникало)

  if(PositionSelect(symbol)==true)
  {
  double profit = PositionGetDouble(POSITION_PROFIT);
  double vol    = PositionGetDouble(POSITION_VOLUME);

  ENUM_POSITION_TYPE   type   = PositionGetInteger(POSITION_TYPE);
     
  FileWrite(fileHandle,"Поза выбрана profit = "+profit+"  type= "+type+" vol="+vol);
  }
//Если запись ведется в XLS, наверное правильней это так сделать (по крайней мере у меня так)
  if(PositionSelect(symbol)==true)
  {
  String SymbolPos = PositionGetString(POSITION_SYMBOL);
  double profit    = PositionGetDouble(POSITION_PROFIT);
  double vol       = PositionGetDouble(POSITION_VOLUME);

  ENUM_POSITION_TYPE   type   = PositionGetInteger(POSITION_TYPE);
     
  FileWrite(fileHandle,TimeTradeServer(),SymbolPos,type,vol,profit);
  }


 
Interesting:

Правильней так (чтобы лишних вопросов не возникало)

Я бы уточнил так:

ENUM_POSITION_TYPE   type   = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
 
Yedelkin:

Я бы уточнил так:

ENUM_POSITION_TYPE   type   = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
Соглашусь, это лучший вариант.
 

Меня в этой истории смущает следующее:

Возвращаемое значение

Значение типа long. В случае неудачного выполнения возвращает 0.

Таким образом, 0 возвращается как минимум в двух различных ситуациях.
 
Yedelkin:

Меня в этой истории смущает следующее:

Таким образом, 0 возвращается как минимум в двух различных ситуациях.
Да хорошо бы при неудачной операции возвращалось [-EMPTY_VALUE]
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Urain:
Да хорошо бы при неудачной операции возвращалось [-EMPTY_VALUE]
Аочему именно его? Мне почему-то кажется что -1 будет правильней...
 

Интересный вопрос...  Остаётся надеяться, что

long  PositionGetInteger(
   ENUM_POSITION_PROPERTY  property_id      // идентификатор свойства

   );

Для

ENUM_POSITION_TYPE

никогда не ошибается.