MQL5 PositionSelect(_Symbol) 调用冻结测试

问题描述 投票:0回答:2

我希望其他人也遇到过这个问题。我是 MQL5 的新手(来自 pinescript),正在寻找使用该语言的方法。

按照文档的指导,建议在调用

PositionSelect()
之前先调用
PositionGetInteger()
,例如:

int openPositions(ENUM_POSITION_TYPE type) {
   int count = 0;
   
   //if (PositionSelect(_Symbol)) {
      for (long i = 0; i < PositionsTotal(); i++) {
          if (PositionGetInteger(POSITION_TYPE, i) == type) {
              count++;
          }
      }
   //}
   return count;
}

如果我启用该

PositionSelect(_Symbol)
条件,MT5 回溯测试将“冻结”,并且在进行几笔交易后不会执行任何操作。然后我必须单击“停止”才能恢复功能。

代码似乎无需进行该检查即可正常工作,但文档建议进行该调用,并且我也看到其他教程使用它......那么到底是什么?

对这里发生的事情有什么想法吗?

谢谢

mql5 metatrader5
2个回答
0
投票

通过 MQL5.com 论坛获得帮助。答案是:

int openPositions(ENUM_POSITION_TYPE type) {
    int count = 0;
    
    for (int i = 0; i < PositionsTotal(); i++) {
        if (!PositionGetTicket(i)) {
            Print("ERROR: PositionGetTicket() failed, error code: ", GetLastError());
            continue;
        }
        if (PositionGetInteger(POSITION_TYPE) == type) 
            count++;
    }
    return count;
}

文档在这方面令人困惑:PositionGetTicket() 和 PositionSelect() 都应该在 PositionGetInteger() 之前使用,但一个会冻结,另一个可以工作。

哦,好吧。


0
投票

if (PositionSelect(i)) { //选择这个错误

© www.soinside.com 2019 - 2024. All rights reserved.