Как добавить новый элемент во встроенную структуру MQL5?

У меня есть следующий пример кода MQL5 (для демонстрации проблемы):

// PositionSelectByTicket is missing in older MQL5 builds.
#ifndef PositionSelectByTicket
#define PositionSelectByTicket(ticket) OrderSelect(ticket)
#endif 

void CheckOrder(const MqlTradeRequest &Request) {

  if (Request.action == TRADE_ACTION_SLTP) {
    ulong pos = PositionSelectByTicket(Request.position); // error 130: 'position' - struct member undefined
  }

}

void OnStart() { }

И он отлично компилируется в последней сборке Metaeditor 5 (сборка 1495), однако в сборке 1162 (с использованием более старых компилятор mql) Я получил следующие ошибки:

$ wine mql /s /mql5 MQL_Test.mq5
MQL4/MQL5 Compiler build 1162 (02 Jul 2015)
MQL_Test.mq5 : information: Checking 'MQL_Test.mq5'
MQL_Test.mq5(9,17) : error 130: 'position' - struct member undefined
MQL_Test.mq5(9,17) : warning 60: possible use of uninitialized variable ''
 : information: Result 1 error(s), 1 warning(s)
Time: 11 ms

Я хотел бы улучшить код, чтобы он был обратно совместим, и я уже добавил определение для PositionSelectByTicket, как указано выше, чтобы избежать неопределенной функции.

Хотя как исправить ошибки выше, чтобы работало на обоих компиляторах?

На странице документации MqlTradeRequest struct существует элемент position struct, поэтому скорее всего его добавили в последних билдах.

Итак, есть ли способ добавить отсутствующий элемент переменной в существующую встроенную структуру, чтобы старый компилятор прошел проверку синтаксиса?


person kenorb    schedule 12.01.2017    source источник


Ответы (1)


Знаете ли вы, что PositionBySelect() — это новая функция, доступная начиная с сборки 1325 (новый режим хеджирования)?

новый терминал MetaTrader 5 примечания к выпуску

12: Добавлена ​​функция PositionSelectByTicket — выбрать открытую позицию для дальнейшей работы по указанному тикету.

bool  PositionSelectByTicket(ulong ticket );    // position ticket
person xnet_dev    schedule 12.02.2017
comment
Я знаю об этом, но проблема заключается в компиляции кода MQL5 под более старым компилятором CLI, в котором нет этой функции, и не будет, потому что нет более новых сборок этого компилятора MQL. Таким образом, вопрос заключается в том, чтобы скомпилировать код для обратной совместимости. - person kenorb; 12.02.2017
comment
Нет возможности эмулировать функцию. Потому что это работает только на хедж-счете. Который поддерживается только начиная с 1325. - person xnet_dev; 12.02.2017