如何在MQL5中向内置结构添加新项?

时间:2017-01-12 16:57:25

标签: struct compiler-errors 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的最新版本(build 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结构项存在,因此最有可能在最近的版本中添加。

那么,有没有办法将缺少的变量项添加到现有的内置结构中,所以较旧的编译器会通过语法检查?

1 个答案:

答案 0 :(得分:0)

您是否知道 PositionBySelect() 是一项新功能,自Build 1325(新的套期保值模式)以来可用?

new MetaTrader 5 Terminal release notes

  

12:添加了 PositionSelectByTicket 功能 - 选择一个未结头寸   用于指定机票的进一步工作。

bool  PositionSelectByTicket(ulong ticket );    // position ticket