2017-01-12 2 views
1

Я следующий пример код 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, поэтому, скорее всего, он был добавлен в последние сборки.

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

ответ

0

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

new MetaTrader 5 Terminal release notes

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

bool PositionSelectByTicket(ulong ticket); // position ticket 
+0

Я знаю об этом, но проблема заключается в компиляции кода MQL5 при старшем CLI компилятора, который не имеет эту функцию, и она не будет иметь, потому что нет новее не строит из этого MQL-компилятор. Поэтому вопрос заключается в компиляции кода для совместимости. – kenorb

+0

Невозможно эмулировать функцию. Потому что он работает только на учетной записи хеджирования. Это поддерживается только с 1325 года. –

Смежные вопросы