1

我有以下示例 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按照上面的方法添加了定义以避免未定义的函数。

虽然我如何修复上面的错误以在两个编译器上工作?

在 struct 的文档页面中,MqlTradeRequestpositionstruct 项存在,因此很可能它是在最近的构建中添加的。

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

4

1 回答 1

1

您知道这PositionBySelect()是自 Build 1325(一种新的对冲模式)以来可用的新功能吗?

新的 MetaTrader 5 终端发行说明

12:新增PositionSelectByTicket功能——按指定工单选择未平仓头寸进行后续工作。

bool  PositionSelectByTicket(ulong ticket );    // position ticket
于 2017-02-12T14:50:23.073 回答