Я следующий пример код 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
, как описано выше, чтобы избежать неопределенной функции.
Как я могу исправить ошибки выше для работы с обоими компиляторами?
В статье documentation page of MqlTradeRequest
struct имеется элемент структуры position
, поэтому, скорее всего, он был добавлен в последние сборки.
Итак, есть ли способ добавить отсутствующий элемент переменной в существующую встроенную структуру, чтобы старший компилятор прошел проверку синтаксиса?
Я знаю об этом, но проблема заключается в компиляции кода MQL5 при старшем CLI компилятора, который не имеет эту функцию, и она не будет иметь, потому что нет новее не строит из этого MQL-компилятор. Поэтому вопрос заключается в компиляции кода для совместимости. – kenorb
Невозможно эмулировать функцию. Потому что он работает только на учетной записи хеджирования. Это поддерживается только с 1325 года. –